diff --git a/README.md b/README.md index ce8f6a4..59181cf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![StackPulse Logo](assets/images/stackpulse.png) -# 📦 StackPulse ![Release](https://img.shields.io/badge/release-v0.2-blue.svg) +# 📦 StackPulse ![Release](https://img.shields.io/badge/release-v0.5-blue.svg) **StackPulse** ist eine kleine Web-App, die über die Portainer-API deine Docker-Stacks verwaltet und aktualisiert. Aktuell funktioniert StackPulse nur mit der Business-Edition von Portainer. Die Communitiy-Edition wird in einem späteren Release implementiert! @@ -67,7 +67,7 @@ Ziel: -
+
✅ v0.4 – Release ### Backend @@ -86,27 +86,35 @@ Ziel:
- 🟡 v0.5 – In Entwicklung +✅ v0.5 – Release + +### 🛠️ Backend +- [x] Neue API-Endpunkte für Logging, Benutzer- und Gruppenverwaltung sowie Superuser-Registrierung +- [x] Authentifizierung und Log-In +- [x] Erweiterte Protokollierung und Datenbank-Migration +- [x] Präzisere Steuerung der globalen Benutzerrechte + +### 💻 Frontend +- [x] Neue Log-In-Seite +- [x] Benutzer- und Gruppenverwaltung mit granularen Rechteeinstellungen +- [x] Erweiterte Log-Ausgabe mit Filtern und Suchoptionen +- [x] Konsolidierte und vereinheitlichte Ansichten im Dashboard + +### ✨ Features +- [x] Vollständiges Authentifizierungs- und Berechtigungssystem +- [x] Erweiterte Logs in allen Bereichen +- [x] Speicherung von Server- und Superuser-Einstellungen in der Datenbank +
+ +
+ +🟡 v0.6 – In Entwicklung ### Backend -- [x] Neue API-Endpunkte für Logging, Benutzer- und Gruppenverwaltung und Superuser-Registrierung -- [x] Authentifizierung und Log-In -- [x] erweitertes Logging -- [x] Datenbank erweitert und Migration erweitert -- [ ] Feinsteuerung der globalen Userrechte am Benutzer - ### Frontend -- [x] Log-In-Seite -- [ ] Benutzer- und Gruppenverwaltung -- [x] Erweiterte Log-Ausgabe -- [x] Konsolidierung der Ansichten und Filter im Frontend -- [ ] Benutzerverwaltung mit granularer Steuerung von Einzelrechten ### Features -- [ ] Authentifizierungssystem und Benutzerverwaltung mit Gruppenrechten -- [x] Erweiterung der Logs auf alle Bereiche -- [x] Speichern der Server- und Superusereinstellungen in die Datenbank
@@ -117,10 +125,8 @@ Ziel: - Monitoring (Status, CPU/RAM) - Verbesserte UI/UX - Erweiterte Filterungen udn Sortierungen -- Multi-Server/Endpoint Verwaltung +- Multi-Server Verwaltung - Integration Community Edition -- Integration Community Edition -
--- @@ -158,41 +164,29 @@ stackpulse/ ### Mit Compose starten ```bash -version: "2.4" +version: '3.8' services: - stackpulse: - container_name: stackpulse - image: ghcr.io/mboehmlaender/stackpulse - ports: - - '4001:4001' - volumes: - - stackpulse_data:/app/backend/data - environment: - PORTAINER_URL: "Your_Portainer_Server_Address" - PORTAINER_API_KEY: "Your_Portainer_API_Key" - PORTAINER_ENDPOINT_ID: "Your_Portainer_Endpoint_ID" - SELF_STACK_ID: "Stackpulse ID" - restart: unless-stopped - + app: + build: + context: . + dockerfile: Dockerfile + ports: + - "4001:4001" + volumes: + - stackpulse_data:/app/backend/data + restart: unless-stopped + environment: + - PORTAINER_URL=Your_Portainer_Server_Adress (optional) + - PORTAINER_API_KEY=Your_Portainer_API_Key (optional) + - SUPERUSER_USERNAME=Your_Superuser_Username (optional) + - SUPERUSER_EMAIL=Your_Superuser_Email (optional) + - SUPERUSER_PASSWORD=Your_Superuser_Password (optional) + - SELF_STACK_ID=Your_StackPulse_Stack_ID (optional) volumes: stackpulse_data: + ``` - -Die PORTAINER_ENDPOINT_ID erhältst du, wenn du die die URL im Browser ansiehst, wenn du das Dashboard in Portainer öffnest: - -![PORTAINER_ENDPOINT_ID](assets/images/ENDPOINT_ID.png) - -Die 3 wäre in diesem Fall Endpoint-ID. - -Die STACK_SELF_ID findest du, wenn du das Frontend von StackPulse öffnest: - -![SELF_STACK_ID](assets/images/SELF_STACK_ID.png) - -Diese ID kann erst nach dem Deploy von Stackpulse ausgelesen werden. Vergiss daher nicht, nach dem Hinterlegen der ID in den Variablen das Stack noch einmal zu redeployen! - ---- - ## 📋 Voraussetzungen - Node.js >= 20 diff --git a/assets/images/ENDPOINT_ID.png b/assets/images/ENDPOINT_ID.png deleted file mode 100644 index fea20e6..0000000 Binary files a/assets/images/ENDPOINT_ID.png and /dev/null differ diff --git a/assets/images/SELF_STACK_ID.png b/assets/images/SELF_STACK_ID.png deleted file mode 100644 index 24978de..0000000 Binary files a/assets/images/SELF_STACK_ID.png and /dev/null differ diff --git a/backend/.env.example b/backend/.env.example index 097ab98..16d4f9b 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,3 +1,6 @@ -PORTAINER_URL=Your_Portainer_Server_Adress -PORTAINER_API_KEY=Your_Portainer_API_Key -PORTAINER_ENDPOINT_ID=Your_Portainer_Endpoint_ID +PORTAINER_URL=Your_Portainer_Server_Adress (optional) +PORTAINER_API_KEY=Your_Portainer_API_Key (optional) +SUPERUSER_USERNAME=Your_Superuser_Username (optional) +SUPERUSER_EMAIL=Your_Superuser_Email (optional) +SUPERUSER_PASSWORD=Your_Superuser_Password (optional) +SELF_STACK_ID=Your_StackPulse_Stack_ID (optional) \ No newline at end of file diff --git a/backend/auth/superuser.js b/backend/auth/superuser.js new file mode 100644 index 0000000..22487e7 --- /dev/null +++ b/backend/auth/superuser.js @@ -0,0 +1,300 @@ +import crypto from 'crypto'; +import { db } from '../db/index.js'; + +export const SUPERUSER_GROUP_NAME = 'superuser'; + +export const AVATAR_COLORS = [ + 'bg-arcticBlue-600', + 'bg-copperRust-500', + 'bg-sunsetCoral-600', + 'bg-mintTea-400', + 'bg-lavenderSmoke-500', + 'bg-emeraldMist-500', + 'bg-roseQuartz-500', + 'bg-auroraTeal-500', + 'bg-citrusPunch-500', + 'bg-mossGreen-400' +]; + +export const DEFAULT_AVATAR_COLOR = 'bg-mossGreen-500'; +const AVATAR_COLOR_SET = new Set([...AVATAR_COLORS, DEFAULT_AVATAR_COLOR]); + +export const pickRandomAvatarColor = () => { + if (!Array.isArray(AVATAR_COLORS) || AVATAR_COLORS.length === 0) { + return DEFAULT_AVATAR_COLOR; + } + const index = Math.floor(Math.random() * AVATAR_COLORS.length); + return AVATAR_COLORS[index] ?? DEFAULT_AVATAR_COLOR; +}; + +export const normalizeAvatarColor = (value) => { + if (!value) return null; + const candidate = String(value).trim(); + return AVATAR_COLOR_SET.has(candidate) ? candidate : null; +}; + +const selectGroupByName = db.prepare('SELECT * FROM user_groups WHERE name = ?'); +const insertGroup = db.prepare('INSERT INTO user_groups (name, description) VALUES (?, ?)'); + +const selectSuperuser = db.prepare(` + SELECT u.* + FROM users u + INNER JOIN user_group_memberships m ON m.user_id = u.id + INNER JOIN user_groups g ON g.id = m.group_id + WHERE g.name = ? + LIMIT 1 +`); + +const selectUserByUsername = db.prepare('SELECT * FROM users WHERE username = ?'); +const selectUserByEmail = db.prepare('SELECT * FROM users WHERE email = ?'); +const selectUserById = db.prepare('SELECT * FROM users WHERE id = ?'); +const updateLastLogin = db.prepare(` + UPDATE users + SET last_login = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const insertUser = db.prepare(` + INSERT INTO users (username, email, password_hash, password_salt, avatar_color, is_active, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +`); + +const updateUser = db.prepare(` + UPDATE users + SET username = ?, email = ?, password_hash = ?, password_salt = ?, is_active = 1, avatar_color = COALESCE(?, avatar_color), updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const insertMembership = db.prepare(` + INSERT OR IGNORE INTO user_group_memberships (user_id, group_id) + VALUES (?, ?) +`); + +const removeMembershipsForGroup = db.prepare(` + DELETE FROM user_group_memberships + WHERE group_id = ? +`); + +const selectUserIdsForGroup = db.prepare(` + SELECT u.id + FROM users u + INNER JOIN user_group_memberships m ON m.user_id = u.id + WHERE m.group_id = ? +`); + +const deleteUserById = db.prepare('DELETE FROM users WHERE id = ?'); +const deleteGroupById = db.prepare('DELETE FROM user_groups WHERE id = ?'); + +const countSuperusers = db.prepare(` + SELECT COUNT(*) as count + FROM user_group_memberships m + INNER JOIN user_groups g ON g.id = m.group_id + WHERE g.name = ? +`); + +const creationTransaction = db.transaction(({ username, email, passwordHash, passwordSalt, groupId, avatarColor }) => { + const existingUser = selectUserByUsername.get(username) || selectUserByEmail.get(email); + + let userId; + if (existingUser) { + const existingColor = normalizeAvatarColor(existingUser.avatar_color); + const normalizedNewColor = normalizeAvatarColor(avatarColor); + const colorToPersist = existingColor || normalizedNewColor || DEFAULT_AVATAR_COLOR; + updateUser.run(username, email, passwordHash, passwordSalt, colorToPersist, existingUser.id); + userId = existingUser.id; + } else { + const colorToPersist = normalizeAvatarColor(avatarColor) || DEFAULT_AVATAR_COLOR; + const result = insertUser.run(username, email, passwordHash, passwordSalt, colorToPersist); + userId = result.lastInsertRowid; + } + + removeMembershipsForGroup.run(groupId); + insertMembership.run(userId, groupId); + + return selectUserById.get(userId); +}); + +export function hashPassword(password) { + if (!password || typeof password !== 'string') { + const err = new Error('INVALID_PASSWORD'); + err.code = 'INVALID_PASSWORD'; + throw err; + } + const trimmed = password.trim(); + if (!trimmed) { + const err = new Error('INVALID_PASSWORD'); + err.code = 'INVALID_PASSWORD'; + throw err; + } + if (trimmed.length < 8) { + const err = new Error('PASSWORD_TOO_SHORT'); + err.code = 'PASSWORD_TOO_SHORT'; + throw err; + } + const salt = crypto.randomBytes(16).toString('hex'); + const hash = crypto.pbkdf2Sync(trimmed, salt, 120000, 64, 'sha512').toString('hex'); + return { salt, hash }; +} + +export function verifyPassword(password, hash, salt) { + if (!hash || !salt) return false; + if (!password || typeof password !== 'string') return false; + const trimmed = password.trim(); + if (!trimmed) return false; + + const derived = crypto.pbkdf2Sync(trimmed, salt, 120000, 64, 'sha512').toString('hex'); + const storedBuffer = Buffer.from(hash, 'hex'); + const derivedBuffer = Buffer.from(derived, 'hex'); + if (storedBuffer.length !== derivedBuffer.length) { + return false; + } + return crypto.timingSafeEqual(storedBuffer, derivedBuffer); +} + +function ensureGroup(name, description = null) { + let group = selectGroupByName.get(name); + if (group) return group; + insertGroup.run(name, description); + group = selectGroupByName.get(name); + return group; +} + +export function hasSuperuser() { + const { count } = countSuperusers.get(SUPERUSER_GROUP_NAME); + return count > 0; +} + +export function findUserByIdentifier(identifier) { + const value = String(identifier || '').trim(); + if (!value) return null; + if (value.includes('@')) { + return selectUserByEmail.get(value.toLowerCase()); + } + return selectUserByUsername.get(value); +} + +export function findUserById(id) { + if (!id) return null; + return selectUserById.get(id); +} + +export function markUserLogin(userId) { + if (!userId) return; + updateLastLogin.run(userId); +} + +function createOrUpdateSuperuser({ username, email, password }) { + const normalizedUsername = String(username || '').trim(); + const normalizedEmail = String(email || '').trim().toLowerCase(); + + if (!normalizedUsername) { + throw new Error('USERNAME_REQUIRED'); + } + + if (!normalizedEmail || !normalizedEmail.includes('@')) { + throw new Error('EMAIL_INVALID'); + } + + const { hash, salt } = hashPassword(password); + const group = ensureGroup(SUPERUSER_GROUP_NAME, 'System Superuser'); + const avatarColor = pickRandomAvatarColor(); + + const user = creationTransaction({ + username: normalizedUsername, + email: normalizedEmail, + passwordHash: hash, + passwordSalt: salt, + groupId: group.id, + avatarColor + }); + + const persistedColor = normalizeAvatarColor(user.avatar_color) || avatarColor || DEFAULT_AVATAR_COLOR; + + return { + id: user.id, + username: user.username, + email: user.email, + avatarColor: persistedColor + }; +} + +const deletionTransaction = db.transaction((groupId) => { + const members = selectUserIdsForGroup.all(groupId); + + members.forEach(({ id }) => { + deleteUserById.run(id); + }); + + const { changes: groupChanges } = deleteGroupById.run(groupId); + + return { + usersRemoved: members.length, + groupRemoved: groupChanges > 0 + }; +}); + +export function ensureSuperuserFromEnv() { + const username = process.env.SUPERUSER_USERNAME; + const email = process.env.SUPERUSER_EMAIL; + const password = process.env.SUPERUSER_PASSWORD; + + if (hasSuperuser()) { + if (username || email || password) { + console.log('ℹ️ Superuser existiert bereits - Umgebungsvariablen werden ignoriert.'); + } + return false; + } + + if (!username || !email || !password) { + return false; + } + + try { + createOrUpdateSuperuser({ username, email, password }); + console.log('✅ Superuser aus Umgebungsvariablen angelegt.'); + return true; + } catch (error) { + console.error('⚠️ Superuser konnte nicht aus Umgebungsvariablen erzeugt werden:', error.message); + return false; + } +} + +export function registerSuperuser({ username, email, password }) { + if (hasSuperuser()) { + const err = new Error('SUPERUSER_ALREADY_EXISTS'); + err.code = 'SUPERUSER_ALREADY_EXISTS'; + throw err; + } + + try { + return createOrUpdateSuperuser({ username, email, password }); + } catch (error) { + if (error.message === 'USERNAME_REQUIRED' || error.message === 'EMAIL_INVALID' || error.message === 'PASSWORD_TOO_SHORT') { + error.code = error.message; + } + throw error; + } +} + +export function removeSuperuser() { + const group = selectGroupByName.get(SUPERUSER_GROUP_NAME); + + if (!group) { + const error = new Error('SUPERUSER_NOT_FOUND'); + error.code = 'SUPERUSER_NOT_FOUND'; + throw error; + } + + return deletionTransaction(group.id); +} + +export function getSuperuserSummary() { + const user = selectSuperuser.get(SUPERUSER_GROUP_NAME); + if (!user) return null; + return { + id: user.id, + username: user.username, + email: user.email + }; +} diff --git a/backend/db/dbs b/backend/db/dbs new file mode 100644 index 0000000..6182846 --- /dev/null +++ b/backend/db/dbs @@ -0,0 +1,200 @@ +-- Stackpulse database schema blueprint +-- This document captures the expected structure of all tables, indexes and core seed requirements. + +CREATE TABLE event_logs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, + category TEXT NOT NULL, + event_type TEXT, + action TEXT, + status TEXT, + severity TEXT, + entity_type TEXT, + entity_id TEXT, + entity_name TEXT, + actor_type TEXT, + actor_id TEXT, + actor_name TEXT, + source TEXT, + context_type TEXT, + context_id TEXT, + context_label TEXT, + message TEXT, + metadata TEXT +); +CREATE INDEX idx_event_logs_timestamp ON event_logs (timestamp DESC); +CREATE INDEX idx_event_logs_category ON event_logs (category); +CREATE INDEX idx_event_logs_event_type ON event_logs (event_type); +CREATE INDEX idx_event_logs_entity ON event_logs (entity_type, entity_id); +CREATE INDEX idx_event_logs_context ON event_logs (context_type, context_id); + +CREATE TABLE settings ( + key TEXT PRIMARY KEY, + value TEXT, + updated_at TEXT DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL UNIQUE, + email TEXT UNIQUE, + password_hash TEXT NOT NULL, + password_salt TEXT, + avatar_color TEXT, + is_active INTEGER NOT NULL DEFAULT 1, + last_login DATETIME, + security_phrase_content TEXT, + security_phrase_iv TEXT, + security_phrase_tag TEXT, + security_phrase_downloaded_at DATETIME, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE user_groups ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + description TEXT, + avatar_color TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE user_group_memberships ( + user_id INTEGER NOT NULL, + group_id INTEGER NOT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (user_id, group_id), + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE +); + +CREATE TABLE permissions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + key TEXT NOT NULL UNIQUE, + description TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE user_group_permissions ( + group_id INTEGER NOT NULL, + permission_id INTEGER NOT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (group_id, permission_id), + FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE, + FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE +); + +CREATE TABLE permission_sections ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + key TEXT NOT NULL UNIQUE, + title TEXT NOT NULL, + sort_order INTEGER NOT NULL DEFAULT 0, + has_navigation_flag INTEGER NOT NULL DEFAULT 0, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE permission_groups ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + section_id INTEGER NOT NULL, + key TEXT NOT NULL, + title TEXT NOT NULL, + sort_order INTEGER NOT NULL DEFAULT 0, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + UNIQUE(section_id, key), + FOREIGN KEY (section_id) REFERENCES permission_sections(id) ON DELETE CASCADE +); + +CREATE TABLE permission_items ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + section_id INTEGER NOT NULL, + group_id INTEGER, + key TEXT NOT NULL UNIQUE, + label TEXT NOT NULL, + sort_order INTEGER NOT NULL DEFAULT 0, + default_level TEXT NOT NULL, + available_levels TEXT NOT NULL, + is_required INTEGER NOT NULL DEFAULT 0, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (section_id) REFERENCES permission_sections(id) ON DELETE CASCADE, + FOREIGN KEY (group_id) REFERENCES permission_groups(id) ON DELETE SET NULL +); + +CREATE TABLE permission_dependencies ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + permission_id INTEGER NOT NULL, + depends_on_permission_id INTEGER NOT NULL, + required_level TEXT DEFAULT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (permission_id) REFERENCES permission_items(id) ON DELETE CASCADE, + FOREIGN KEY (depends_on_permission_id) REFERENCES permission_items(id) ON DELETE CASCADE, + UNIQUE(permission_id, depends_on_permission_id) +); +CREATE INDEX idx_permission_dependencies_required + ON permission_dependencies (permission_id, depends_on_permission_id); + +CREATE TABLE group_permission_values ( + group_id INTEGER NOT NULL, + permission_id INTEGER NOT NULL, + level TEXT NOT NULL, + effective_level TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (group_id, permission_id), + FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE, + FOREIGN KEY (permission_id) REFERENCES permission_items(id) ON DELETE CASCADE +); + +CREATE TABLE servers ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + url TEXT NOT NULL UNIQUE, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE user_server_permission_overrides ( + user_id INTEGER NOT NULL, + server_id INTEGER NOT NULL, + permission_id INTEGER NOT NULL, + change_type TEXT NOT NULL CHECK (change_type IN ('ADD', 'REMOVE')), + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + UNIQUE (user_id, server_id, permission_id), + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE, + FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE +); +CREATE INDEX idx_user_server_permission_overrides_user_server + ON user_server_permission_overrides (user_id, server_id); + +CREATE TABLE server_api_keys ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + server_id INTEGER NOT NULL UNIQUE, + key_cipher TEXT NOT NULL, + key_iv TEXT NOT NULL, + key_tag TEXT NOT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE +); + +CREATE TABLE user_settings ( + user_id INTEGER NOT NULL, + setting_key TEXT NOT NULL, + setting_value TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (user_id, setting_key), + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE +); + +-- Core seed expectations (keys only – maintained via schemaEnsure) +-- permission_sections: stacks, logs, users, user-groups, maintenance +-- permission_items: includes users-security-phrase (available_levels ["full","none"]) diff --git a/backend/db/ensure.js b/backend/db/ensure.js new file mode 100644 index 0000000..b5bec22 --- /dev/null +++ b/backend/db/ensure.js @@ -0,0 +1,14 @@ +import { ensureDatabaseSchema } from './schemaEnsure.js'; + +const run = async () => { + try { + ensureDatabaseSchema(); + console.log('✅ Datenbankschema abgeglichen.'); + process.exit(0); + } catch (error) { + console.error('⚠️ Schema-Abgleich fehlgeschlagen:', error); + process.exit(1); + } +}; + +run(); diff --git a/backend/db/migrate.js b/backend/db/migrate.js deleted file mode 100644 index 5f24ab8..0000000 --- a/backend/db/migrate.js +++ /dev/null @@ -1,46 +0,0 @@ -import { db } from './index.js'; - -const createRedeployLogsTable = ` -CREATE TABLE IF NOT EXISTS redeploy_logs ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, - stack_id TEXT NOT NULL, - stack_name TEXT NOT NULL, - status TEXT NOT NULL, - message TEXT, - endpoint INTEGER, - redeploy_type TEXT -); -`; - - - -db.exec(createRedeployLogsTable); - -try { - const columns = db.prepare('PRAGMA table_info(redeploy_logs)').all(); - const hasRedeployType = columns.some((column) => column.name === 'redeploy_type'); - if (!hasRedeployType) { - db.exec('ALTER TABLE redeploy_logs ADD COLUMN redeploy_type TEXT'); - console.log('ℹ️ redeploy_type column hinzugefügt'); - } -} catch (err) { - console.error('⚠️ Konnte redeploy_type Spalte nicht prüfen/erstellen:', err.message); -} - -console.log('✅ redeploy_logs table ready'); - -const createSettingsTable = ` - CREATE TABLE IF NOT EXISTS settings ( - key TEXT PRIMARY KEY, - value TEXT, - updated_at TEXT DEFAULT CURRENT_TIMESTAMP - ) -`; - -db.exec(createSettingsTable); - -console.log('✅ settings table ready'); - - -db.close(); diff --git a/backend/db/redeployLogs.js b/backend/db/redeployLogs.js deleted file mode 100644 index 12ba865..0000000 --- a/backend/db/redeployLogs.js +++ /dev/null @@ -1,181 +0,0 @@ -import { db } from './index.js'; - -const valueToArray = (value) => { - if (!value && value !== 0) return []; - const base = Array.isArray(value) ? value : [value]; - return base - .flatMap((entry) => String(entry).split(',')) - .map((entry) => entry.trim()) - .filter(Boolean); -}; - -const singleValue = (value) => { - if (value === undefined || value === null) return undefined; - return Array.isArray(value) ? value[0] : value; -}; - -export function buildLogFilter(queryParams = {}) { - const filters = []; - const params = {}; - - const ids = valueToArray(queryParams.ids ?? queryParams.id) - .map((entry) => Number(entry)) - .filter((value) => !Number.isNaN(value)); - if (ids.length) { - const placeholders = ids.map((_, idx) => `@id${idx}`); - filters.push(`id IN (${placeholders.join(', ')})`); - ids.forEach((value, idx) => { - params[`id${idx}`] = value; - }); - } - - const stackIds = valueToArray(queryParams.stackIds ?? queryParams.stackId); - if (stackIds.length) { - const placeholders = stackIds.map((_, idx) => `@stackId${idx}`); - filters.push(`stack_id IN (${placeholders.join(', ')})`); - stackIds.forEach((stack, idx) => { - params[`stackId${idx}`] = stack; - }); - } - - const statuses = valueToArray(queryParams.statuses ?? queryParams.status); - if (statuses.length) { - const placeholders = statuses.map((_, idx) => `@status${idx}`); - filters.push(`status IN (${placeholders.join(', ')})`); - statuses.forEach((entry, idx) => { - params[`status${idx}`] = entry; - }); - } - - const endpoints = valueToArray(queryParams.endpoints ?? queryParams.endpoint); - if (endpoints.length) { - const placeholders = endpoints.map((_, idx) => `@endpoint${idx}`); - filters.push(`endpoint IN (${placeholders.join(', ')})`); - endpoints.forEach((entry, idx) => { - const numeric = Number(entry); - params[`endpoint${idx}`] = Number.isNaN(numeric) ? entry : numeric; - }); - } - - const redeployTypes = valueToArray(queryParams.redeployTypes ?? queryParams.redeployType); - if (redeployTypes.length) { - const placeholders = redeployTypes.map((_, idx) => `@redeployType${idx}`); - filters.push(`redeploy_type IN (${placeholders.join(', ')})`); - redeployTypes.forEach((entry, idx) => { - params[`redeployType${idx}`] = entry; - }); - } - - const messageQuery = singleValue(queryParams.message); - if (messageQuery && String(messageQuery).trim()) { - filters.push('message LIKE @message'); - params.message = `%${String(messageQuery).trim()}%`; - } - - const from = singleValue(queryParams.from); - if (from) { - filters.push('timestamp >= @from'); - params.from = from; - } - - const to = singleValue(queryParams.to); - if (to) { - filters.push('timestamp <= @to'); - params.to = to; - } - - return { - whereClause: filters.length ? `WHERE ${filters.join(' AND ')}` : '', - params, - }; -} - -const insertRedeployLogStmt = db.prepare(` - INSERT INTO redeploy_logs (stack_id, stack_name, status, message, endpoint, redeploy_type) - VALUES (@stackId, @stackName, @status, @message, @endpoint, @redeployType) -`); - -export function logRedeployEvent({ stackId, stackName, status, message = null, endpoint = null, redeployType = null }) { - try { - insertRedeployLogStmt.run({ - stackId: String(stackId), - stackName: stackName ?? 'Unknown', - status, - message, - endpoint, - redeployType: redeployType ?? null - }); - } catch (err) { - console.error('❌ Fehler beim Speichern des Redeploy-Logs:', err.message); - } -} - -export function deleteLogById(id) { - const stmt = db.prepare('DELETE FROM redeploy_logs WHERE id = ?'); - const info = stmt.run(id); - return info.changes || 0; -} - -export function deleteLogsByFilters(queryParams = {}) { - const { whereClause, params } = buildLogFilter(queryParams); - const stmt = db.prepare(`DELETE FROM redeploy_logs ${whereClause}`); - const info = stmt.run(params); - return info.changes || 0; -} - -export function exportLogsByFilters(queryParams = {}, format = 'txt') { - const { whereClause, params } = buildLogFilter(queryParams); - const rows = db.prepare(` - SELECT id, timestamp, stack_id AS stackId, stack_name AS stackName, status, message, endpoint, redeploy_type AS redeployType - FROM redeploy_logs - ${whereClause} - ORDER BY datetime(timestamp) DESC - `).all(params); - - const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); - - if (format === 'sql') { - const statements = rows.map((row) => { - const columns = ['id', 'timestamp', 'stack_id', 'stack_name', 'status', 'message', 'endpoint', 'redeploy_type']; - const values = [ - row.id, - row.timestamp, - row.stackId, - row.stackName, - row.status, - row.message, - row.endpoint, - row.redeployType - ].map((value) => { - if (value === null || value === undefined) return 'NULL'; - return `'${String(value).replace(/'/g, "''")}'`; - }); - return `INSERT INTO redeploy_logs (${columns.join(', ')}) VALUES (${values.join(', ')});`; - }); - - return { - filename: `redeploy-logs-${timestamp}.sql`, - contentType: 'application/sql; charset=utf-8', - content: statements.join('\n') - }; - } - - const lines = rows.map((row) => { - const parts = [ - `[${row.id}]`, - row.timestamp, - `Stack: ${row.stackName ?? 'Unbekannt'} (ID: ${row.stackId})`, - `Status: ${row.status}`, - `Endpoint: ${row.endpoint ?? '-'}`, - `Nachricht: ${row.message ?? '-'}`, - `Redeploy: ${row.redeployType ?? '-'}` - ]; - return parts.join(' | '); - }); - - return { - filename: `redeploy-logs-${timestamp}.txt`, - contentType: 'text/plain; charset=utf-8', - content: lines.join('\n') - }; -} diff --git a/backend/db/schemaEnsure.js b/backend/db/schemaEnsure.js new file mode 100644 index 0000000..9f8589a --- /dev/null +++ b/backend/db/schemaEnsure.js @@ -0,0 +1,738 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { db } from './index.js'; + +const BLUEPRINT_FILENAME = 'dbs'; +const PERMISSION_BLUEPRINT = [ + { + key: 'stacks', + title: 'Stacks', + sortOrder: 0, + hasNavigation: 0, + items: [ + { + key: 'stacks-redeploy-single', + label: 'Redeploy einzeln', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [] + }, + { + key: 'stacks-redeploy-selection', + label: 'Redeploy Auswahl', + sortOrder: 1, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [] + }, + { + key: 'stacks-redeploy-all', + label: 'Redeploy Alle', + sortOrder: 2, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [] + } + ] + }, + { + key: 'logs', + title: 'Logs', + sortOrder: 1, + hasNavigation: 1, + items: [ + { + key: 'logs-access', + label: 'Bereich & Navigation', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + isRequired: 1, + dependencies: [] + }, + { + key: 'logs-export', + label: 'Logs Exportieren', + sortOrder: 1, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'logs-access', requiredLevel: '!=none' } + ] + }, + { + key: 'logs-delete', + label: 'Logs löschen', + sortOrder: 2, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'logs-access', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'users', + title: 'Benutzer', + sortOrder: 2, + hasNavigation: 1, + items: [ + { + key: 'users-access', + label: 'Bereich & Navigation', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + isRequired: 1, + dependencies: [] + }, + { + key: 'users-edit', + label: 'Benutzer bearbeiten', + sortOrder: 1, + defaultLevel: 'read', + levels: ['full', 'read'], + dependencies: [ + { dependsOnKey: 'users-access', requiredLevel: '!=none' } + ] + }, + { + key: 'users-delete', + label: 'Benutzer löschen', + sortOrder: 2, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'users-access', requiredLevel: '!=none' } + ] + }, + { + key: 'users-security-phrase', + label: 'Sicherheitsschlüssel', + sortOrder: 3, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'users-access', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'user-groups', + title: 'Benutzergruppen', + sortOrder: 3, + hasNavigation: 1, + items: [ + { + key: 'user-groups-access', + label: 'Bereich & Navigation', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + isRequired: 1, + dependencies: [] + }, + { + key: 'user-groups-edit', + label: 'Benutzergruppen bearbeiten', + sortOrder: 1, + defaultLevel: 'read', + levels: ['full', 'read'], + dependencies: [ + { dependsOnKey: 'user-groups-access', requiredLevel: '!=none' } + ] + }, + { + key: 'user-groups-delete', + label: 'Benutzergruppen löschen', + sortOrder: 2, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'user-groups-access', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'maintenance', + title: 'Wartung', + sortOrder: 4, + hasNavigation: 1, + items: [ + { + key: 'maintenance-access', + label: 'Bereich & Navigation', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + isRequired: 1, + dependencies: [] + } + ], + groups: [ + { + key: 'maintenance-server-group', + title: 'Server', + sortOrder: 0, + items: [ + { + key: 'maintenance-server-manage', + label: 'Server-Sektion', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'read', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' } + ] + }, + { + key: 'maintenance-server-delete', + label: 'Server löschen', + sortOrder: 1, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' }, + { dependsOnKey: 'maintenance-server-manage', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'maintenance-superuser-group', + title: 'Superuser', + sortOrder: 1, + items: [ + { + key: 'maintenance-superuser-delete', + label: 'Superuser löschen', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'maintenance-portainer-group', + title: 'Portainer', + sortOrder: 2, + items: [ + { + key: 'maintenance-portainer', + label: 'Portainer-Sektion', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' } + ] + }, + { + key: 'maintenance-ssh-update', + label: 'SSH/Update-Skript', + sortOrder: 1, + defaultLevel: 'none', + levels: ['full', 'read', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' }, + { dependsOnKey: 'maintenance-portainer', requiredLevel: '!=none' } + ] + }, + { + key: 'maintenance-update', + label: 'Update durchführen', + sortOrder: 2, + defaultLevel: 'none', + levels: ['full', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' }, + { dependsOnKey: 'maintenance-portainer', requiredLevel: '!=none' } + ] + } + ] + }, + { + key: 'maintenance-duplicates-group', + title: 'Doppelte Stacks', + sortOrder: 3, + items: [ + { + key: 'maintenance-duplicates', + label: 'Doppelte Stacks', + sortOrder: 0, + defaultLevel: 'none', + levels: ['full', 'read', 'none'], + dependencies: [ + { dependsOnKey: 'maintenance-access', requiredLevel: '!=none' } + ] + } + ] + } + ] + } +]; + +const TABLE_REGEX = /^CREATE TABLE\s+([^\s(]+)\s*\(/i; +const INDEX_REGEX = /^CREATE INDEX\s+([^\s(]+)\s+ON\s+([^\s(]+)\s*\(/i; +const COLUMN_SKIP_PREFIXES = ['PRIMARY KEY', 'FOREIGN KEY', 'UNIQUE', 'CHECK', 'CONSTRAINT']; + +const normalizeIdentifier = (value) => value.replace(/`|"/g, '').trim(); + +const loadBlueprintStatements = () => { + const __filename = fileURLToPath(import.meta.url); + const __dirname = path.dirname(__filename); + const filePath = path.join(__dirname, BLUEPRINT_FILENAME); + const content = fs.readFileSync(filePath, 'utf8'); + const cleanContent = content + .split('\n') + .map((line) => line.trim()) + .filter((line) => line && !line.startsWith('--')) + .join('\n'); + + return cleanContent + .split(';') + .map((statement) => statement.trim()) + .filter(Boolean); +}; + +const parseTableDefinitions = (statements) => { + const tables = new Map(); + + statements.forEach((statement) => { + const match = statement.match(TABLE_REGEX); + if (!match) { + return; + } + + const tableName = normalizeIdentifier(match[1]); + const body = statement.slice(statement.indexOf('(') + 1, statement.lastIndexOf(')')); + const lines = body + .split('\n') + .map((line) => line.trim()) + .filter(Boolean); + + const columns = []; + lines.forEach((line) => { + const cleaned = line.replace(/,$/, ''); + const upper = cleaned.toUpperCase(); + if (COLUMN_SKIP_PREFIXES.some((prefix) => upper.startsWith(prefix))) { + return; + } + const [rawName, ...restParts] = cleaned.split(/\s+/); + if (!rawName || restParts.length === 0) { + return; + } + const columnName = normalizeIdentifier(rawName); + const definition = restParts.join(' '); + columns.push({ name: columnName, definition }); + }); + + tables.set(tableName, { + createStatement: statement, + columns + }); + }); + + return tables; +}; + +const parseIndexStatements = (statements) => { + const indexes = []; + statements.forEach((statement) => { + const match = statement.match(INDEX_REGEX); + if (!match) { + return; + } + const indexName = normalizeIdentifier(match[1]); + indexes.push({ + name: indexName, + statement + }); + }); + return indexes; +}; + +const tableExists = (tableName) => { + const result = db + .prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ? LIMIT 1`) + .get(tableName); + return Boolean(result); +}; + +const dropDeprecatedArtifacts = () => { + const deprecatedTables = ['user_endpoint_permission_overrides', 'endpoints']; + deprecatedTables.forEach((table) => { + if (tableExists(table)) { + db.exec(`DROP TABLE IF EXISTS ${table}`); + console.log(`ℹ️ Veraltete Tabelle ${table} entfernt`); + } + }); +}; + +const getExistingColumns = (tableName) => { + const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all(); + return new Set(pragma.map((column) => column.name)); +}; + +const indexExists = (indexName) => { + const result = db + .prepare(`SELECT name FROM sqlite_master WHERE type = 'index' AND name = ? LIMIT 1`) + .get(indexName); + return Boolean(result); +}; + +const ensureTablesAndColumns = (tables) => { + tables.forEach(({ createStatement, columns }, tableName) => { + if (!tableExists(tableName)) { + const statementWithGuard = createStatement.replace(/^CREATE TABLE/i, 'CREATE TABLE IF NOT EXISTS'); + db.exec(`${statementWithGuard};`); + console.log(`ℹ️ Tabelle ${tableName} angelegt`); + return; + } + + const existingColumns = getExistingColumns(tableName); + const missingColumns = columns.filter((column) => !existingColumns.has(column.name)); + missingColumns.forEach((column) => { + try { + db.exec(`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition};`); + console.log(`ℹ️ Column ${column.name} added to ${tableName}`); + } catch (error) { + console.warn(`⚠️ Column ${column.name} could not be added to ${tableName}: ${error.message}`); + } + }); + }); +}; + +const ensureIndexes = (indexes) => { + indexes.forEach(({ name, statement }) => { + if (indexExists(name)) { + return; + } + const statementWithGuard = statement.replace(/^CREATE INDEX/i, 'CREATE INDEX IF NOT EXISTS'); + db.exec(`${statementWithGuard};`); + console.log(`ℹ️ Index ${name} angelegt`); + }); +}; + +const ensurePermissionSeeds = () => { + const selectSection = db.prepare(` + SELECT id, title, sort_order, has_navigation_flag + FROM permission_sections + WHERE key = ? + LIMIT 1 + `); + const insertSection = db.prepare(` + INSERT INTO permission_sections (key, title, sort_order, has_navigation_flag, created_at, updated_at) + VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) + `); + const updateSection = db.prepare(` + UPDATE permission_sections + SET title = ?, sort_order = ?, has_navigation_flag = ?, updated_at = CURRENT_TIMESTAMP + WHERE id = ? + `); + + const selectGroup = db.prepare(` + SELECT id, title, sort_order + FROM permission_groups + WHERE section_id = ? AND key = ? + LIMIT 1 + `); + const insertGroup = db.prepare(` + INSERT INTO permission_groups (section_id, key, title, sort_order, created_at, updated_at) + VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) + `); + const updateGroup = db.prepare(` + UPDATE permission_groups + SET title = ?, sort_order = ?, updated_at = CURRENT_TIMESTAMP + WHERE id = ? + `); + + const selectItem = db.prepare(` + SELECT + id, + section_id, + group_id, + label, + sort_order, + default_level, + available_levels, + is_required + FROM permission_items + WHERE key = ? + LIMIT 1 + `); + const insertItem = db.prepare(` + INSERT INTO permission_items ( + section_id, + group_id, + key, + label, + sort_order, + default_level, + available_levels, + is_required, + created_at, + updated_at + ) VALUES ( + ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + ) + `); + const updateItem = db.prepare(` + UPDATE permission_items + SET + section_id = ?, + group_id = ?, + label = ?, + sort_order = ?, + default_level = ?, + available_levels = ?, + is_required = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? + `); + + const selectDependency = db.prepare(` + SELECT id, required_level + FROM permission_dependencies + WHERE permission_id = ? AND depends_on_permission_id = ? + LIMIT 1 + `); + const insertDependency = db.prepare(` + INSERT INTO permission_dependencies ( + permission_id, + depends_on_permission_id, + required_level, + created_at, + updated_at + ) VALUES ( + ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + ) + `); + const updateDependency = db.prepare(` + UPDATE permission_dependencies + SET required_level = ?, updated_at = CURRENT_TIMESTAMP + WHERE id = ? + `); + + const itemKeyToId = new Map(); + + PERMISSION_BLUEPRINT.forEach((section, sectionIndex) => { + const existingSection = selectSection.get(section.key); + let sectionId; + if (!existingSection) { + const result = insertSection.run( + section.key, + section.title, + section.sortOrder ?? sectionIndex, + section.hasNavigation ? 1 : 0 + ); + sectionId = Number(result.lastInsertRowid); + console.log(`ℹ️ Berechtigungs-Sektion ${section.key} angelegt`); + } else { + updateSection.run( + section.title, + section.sortOrder ?? sectionIndex, + section.hasNavigation ? 1 : 0, + existingSection.id + ); + sectionId = existingSection.id; + if ( + existingSection.title !== section.title || + (existingSection.sort_order ?? sectionIndex) !== (section.sortOrder ?? sectionIndex) || + Number(existingSection.has_navigation_flag) !== (section.hasNavigation ? 1 : 0) + ) { + console.log(`ℹ️ Berechtigungs-Sektion ${section.key} aktualisiert`); + } + } + + const sectionItems = Array.isArray(section.items) ? section.items : []; + sectionItems.forEach((item, itemIdx) => { + const existingItem = selectItem.get(item.key); + const sortOrder = typeof item.sortOrder === 'number' ? item.sortOrder : itemIdx; + const levelOptions = Array.isArray(item.levels) && item.levels.length + ? item.levels + : ['full', 'read', 'none']; + const availableLevels = JSON.stringify(levelOptions); + const isRequired = item.isRequired ? 1 : 0; + if (!existingItem) { + const result = insertItem.run( + sectionId, + null, + item.key, + item.label, + sortOrder, + item.defaultLevel || 'none', + availableLevels, + isRequired + ); + itemKeyToId.set(item.key, Number(result.lastInsertRowid)); + console.log(`ℹ️ Berechtigung ${item.key} angelegt`); + } else { + const hasChanges = + existingItem.section_id !== sectionId || + existingItem.group_id !== null || + existingItem.label !== item.label || + (existingItem.sort_order ?? sortOrder) !== sortOrder || + existingItem.default_level !== (item.defaultLevel || 'none') || + existingItem.available_levels !== availableLevels || + Number(existingItem.is_required) !== isRequired; + updateItem.run( + sectionId, + null, + item.label, + sortOrder, + item.defaultLevel || 'none', + availableLevels, + isRequired, + existingItem.id + ); + itemKeyToId.set(item.key, existingItem.id); + if (hasChanges) { + console.log(`ℹ️ Berechtigung ${item.key} aktualisiert`); + } + } + }); + + const sectionGroups = Array.isArray(section.groups) ? section.groups : []; + sectionGroups.forEach((group, groupIdx) => { + const existingGroup = selectGroup.get(sectionId, group.key); + const sortOrder = typeof group.sortOrder === 'number' ? group.sortOrder : groupIdx; + let groupId; + if (!existingGroup) { + const result = insertGroup.run(sectionId, group.key, group.title, sortOrder); + groupId = Number(result.lastInsertRowid); + console.log(`ℹ️ Berechtigungs-Gruppe ${group.key} in Sektion ${section.key} angelegt`); + } else { + const hasGroupChanges = + existingGroup.title !== group.title || + (existingGroup.sort_order ?? sortOrder) !== sortOrder; + updateGroup.run(group.title, sortOrder, existingGroup.id); + groupId = existingGroup.id; + if (hasGroupChanges) { + console.log(`ℹ️ Berechtigungs-Gruppe ${group.key} in Sektion ${section.key} aktualisiert`); + } + } + const groupItems = Array.isArray(group.items) ? group.items : []; + groupItems.forEach((item, itemIdx) => { + const existingItem = selectItem.get(item.key); + const itemSortOrder = typeof item.sortOrder === 'number' ? item.sortOrder : itemIdx; + const levelOptions = Array.isArray(item.levels) && item.levels.length + ? item.levels + : ['full', 'read', 'none']; + const availableLevels = JSON.stringify(levelOptions); + const isRequired = item.isRequired ? 1 : 0; + if (!existingItem) { + const result = insertItem.run( + sectionId, + groupId, + item.key, + item.label, + itemSortOrder, + item.defaultLevel || 'none', + availableLevels, + isRequired + ); + itemKeyToId.set(item.key, Number(result.lastInsertRowid)); + console.log(`ℹ️ Berechtigung ${item.key} in Gruppe ${group.key} angelegt`); + } else { + const hasChanges = + existingItem.section_id !== sectionId || + existingItem.group_id !== groupId || + existingItem.label !== item.label || + (existingItem.sort_order ?? itemSortOrder) !== itemSortOrder || + existingItem.default_level !== (item.defaultLevel || 'none') || + existingItem.available_levels !== availableLevels || + Number(existingItem.is_required) !== isRequired; + updateItem.run( + sectionId, + groupId, + item.label, + itemSortOrder, + item.defaultLevel || 'none', + availableLevels, + isRequired, + existingItem.id + ); + itemKeyToId.set(item.key, existingItem.id); + if (hasChanges) { + console.log(`ℹ️ Berechtigung ${item.key} in Gruppe ${group.key} aktualisiert`); + } + } + }); + }); + }); + + PERMISSION_BLUEPRINT.forEach((section) => { + const sectionItems = Array.isArray(section.items) ? section.items : []; + sectionItems.forEach((item) => { + const permissionId = itemKeyToId.get(item.key); + if (!permissionId) return; + (item.dependencies || []).forEach((dependency) => { + const dependsId = itemKeyToId.get(dependency.dependsOnKey); + if (!dependsId) return; + const existing = selectDependency.get(permissionId, dependsId); + const requiredLevel = dependency.requiredLevel ?? null; + if (!existing) { + insertDependency.run(permissionId, dependsId, requiredLevel); + console.log( + `ℹ️ Abhängigkeit ${item.key} -> ${dependency.dependsOnKey} angelegt` + ); + } else if (existing.required_level !== requiredLevel) { + updateDependency.run(requiredLevel, existing.id); + console.log( + `ℹ️ Abhängigkeit ${item.key} -> ${dependency.dependsOnKey} aktualisiert` + ); + } + }); + }); + + const sectionGroups = Array.isArray(section.groups) ? section.groups : []; + sectionGroups.forEach((group) => { + const groupItems = Array.isArray(group.items) ? group.items : []; + groupItems.forEach((item) => { + const permissionId = itemKeyToId.get(item.key); + if (!permissionId) return; + (item.dependencies || []).forEach((dependency) => { + const dependsId = itemKeyToId.get(dependency.dependsOnKey); + if (!dependsId) return; + const requiredLevel = dependency.requiredLevel ?? null; + const existing = selectDependency.get(permissionId, dependsId); + if (!existing) { + insertDependency.run(permissionId, dependsId, requiredLevel); + console.log( + `ℹ️ Abhängigkeit ${item.key} -> ${dependency.dependsOnKey} angelegt` + ); + } else if (existing.required_level !== requiredLevel) { + updateDependency.run(requiredLevel, existing.id); + console.log( + `ℹ️ Abhängigkeit ${item.key} -> ${dependency.dependsOnKey} aktualisiert` + ); + } + }); + }); + }); + }); +}; + +export const ensureDatabaseSchema = () => { + try { + const statements = loadBlueprintStatements(); + const tableDefinitions = parseTableDefinitions(statements); + const indexDefinitions = parseIndexStatements(statements); + + dropDeprecatedArtifacts(); + ensureTablesAndColumns(tableDefinitions); + ensureIndexes(indexDefinitions); + ensurePermissionSeeds(); + } catch (error) { + console.error('⚠️ Schema-Abgleich fehlgeschlagen:', error); + } +}; diff --git a/backend/docker-entrypoint.sh b/backend/docker-entrypoint.sh index 4585dd3..1a2f668 100644 --- a/backend/docker-entrypoint.sh +++ b/backend/docker-entrypoint.sh @@ -1,8 +1,8 @@ #!/bin/sh set -e -echo "🔧 Starte Migration (idempotent)..." -node db/migrate.js +echo "🔧 Überprüfe Datenbankschema..." +node db/ensure.js -echo "✅ Migration abgeschlossen. Starte Anwendung..." +echo "✅ Schema-Abgleich abgeschlossen. Starte Anwendung..." exec "$@" diff --git a/backend/groups/index.js b/backend/groups/index.js new file mode 100644 index 0000000..d73b733 --- /dev/null +++ b/backend/groups/index.js @@ -0,0 +1,342 @@ +import { db } from '../db/index.js'; +import { + normalizeAvatarColor, + DEFAULT_AVATAR_COLOR, + SUPERUSER_GROUP_NAME, + pickRandomAvatarColor +} from '../auth/superuser.js'; +import { logEvent } from '../logging/eventLogs.js'; + +const selectGroupsWithMembers = db.prepare(` + SELECT + g.id, + g.name, + g.description, + g.avatar_color, + g.created_at, + g.updated_at, + COUNT(DISTINCT u.id) AS member_count, + GROUP_CONCAT(u.id || '::' || u.username, '|||') AS member_pairs + FROM user_groups g + LEFT JOIN user_group_memberships m ON m.group_id = g.id + LEFT JOIN users u ON u.id = m.user_id + GROUP BY g.id + ORDER BY g.name COLLATE NOCASE +`); + +const selectGroupWithMembersById = db.prepare(` + SELECT + g.id, + g.name, + g.description, + g.avatar_color, + g.created_at, + g.updated_at, + COUNT(DISTINCT u.id) AS member_count, + GROUP_CONCAT(u.id || '::' || u.username, '|||') AS member_pairs + FROM user_groups g + LEFT JOIN user_group_memberships m ON m.group_id = g.id + LEFT JOIN users u ON u.id = m.user_id + WHERE g.id = ? + GROUP BY g.id +`); + +const selectGroupByIdBasic = db.prepare(` + SELECT id, name, description, avatar_color + FROM user_groups + WHERE id = ? +`); + +const selectGroupIdByName = db.prepare(` + SELECT id + FROM user_groups + WHERE lower(name) = lower(?) + LIMIT 1 +`); + +const insertGroupStatement = db.prepare(` + INSERT INTO user_groups (name, description, avatar_color, created_at, updated_at) + VALUES (?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +`); + +const updateGroupStatement = db.prepare(` + UPDATE user_groups + SET name = ?, + description = ?, + avatar_color = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const countGroupMembersStatement = db.prepare(` + SELECT COUNT(*) AS member_count + FROM user_group_memberships + WHERE group_id = ? +`); + +const deleteGroupStatement = db.prepare(` + DELETE FROM user_groups + WHERE id = ? +`); + +const parseMembers = (rawPairs) => { + if (!rawPairs) { + return []; + } + + return rawPairs + .split('|||') + .map((entry) => { + const [idPart, usernamePart] = entry.split('::'); + const numericId = Number(idPart); + return { + id: Number.isFinite(numericId) ? numericId : idPart, + username: (usernamePart || '').trim() + }; + }) + .filter((member) => member.username); +}; + +const sanitizeGroup = (row) => ({ + id: row.id, + name: row.name, + description: row.description || '', + avatarColor: row.avatar_color || null, + createdAt: row.created_at || null, + updatedAt: row.updated_at || null, + memberCount: Number(row.member_count) || 0, + members: parseMembers(row.member_pairs) +}); + +export function listGroups() { + const rows = selectGroupsWithMembers.all(); + return rows.map(sanitizeGroup); +} + +export function getGroupById(groupId) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + return null; + } + const row = selectGroupWithMembersById.get(numericId); + return row ? sanitizeGroup(row) : null; +} + +export function createGroup({ name, description }) { + const normalizedName = typeof name === 'string' ? name.trim() : ''; + if (!normalizedName) { + const error = new Error('GROUP_NAME_REQUIRED'); + error.code = 'GROUP_NAME_REQUIRED'; + throw error; + } + + const existing = selectGroupIdByName.get(normalizedName); + if (existing) { + const error = new Error('GROUP_NAME_TAKEN'); + error.code = 'GROUP_NAME_TAKEN'; + throw error; + } + + const normalizedDescription = typeof description === 'string' ? description.trim() : null; + const avatarColor = pickRandomAvatarColor() || DEFAULT_AVATAR_COLOR; + const insertResult = insertGroupStatement.run(normalizedName, normalizedDescription || null, avatarColor); + const groupId = Number(insertResult.lastInsertRowid); + const row = selectGroupWithMembersById.get(groupId); + const group = row ? sanitizeGroup(row) : null; + + logEvent({ + category: 'benutzergruppe', + eventType: 'gruppe-angelegt', + action: 'anlegen', + status: 'erfolgreich', + entityType: 'gruppe', + entityId: String(groupId), + entityName: group?.name ?? normalizedName, + message: `Benutzergruppe "${normalizedName}" angelegt`, + metadata: { + description: group?.description ?? normalizedDescription ?? null, + avatarColor + } + }); + + return group; +} + +export function updateGroupDetails(groupId, { name, description, avatarColor } = {}) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + const error = new Error('INVALID_GROUP_ID'); + error.code = 'INVALID_GROUP_ID'; + throw error; + } + + const existingRow = selectGroupByIdBasic.get(numericId); + if (!existingRow) { + const error = new Error('GROUP_NOT_FOUND'); + error.code = 'GROUP_NOT_FOUND'; + throw error; + } + + const normalizedName = typeof name === 'string' ? name.trim() : existingRow.name || ''; + if (!normalizedName) { + const error = new Error('GROUP_NAME_REQUIRED'); + error.code = 'GROUP_NAME_REQUIRED'; + throw error; + } + + const nameRow = selectGroupIdByName.get(normalizedName); + if (nameRow && Number(nameRow.id) !== numericId) { + const error = new Error('GROUP_NAME_TAKEN'); + error.code = 'GROUP_NAME_TAKEN'; + throw error; + } + + let normalizedDescription; + if (description === undefined) { + normalizedDescription = existingRow.description ?? null; + } else if (description === null) { + normalizedDescription = null; + } else { + const trimmedDescription = typeof description === 'string' ? description.trim() : ''; + normalizedDescription = trimmedDescription ? trimmedDescription : null; + } + + const isSuperuserGroup = (existingRow.name || '').toLowerCase() === SUPERUSER_GROUP_NAME; + + if (isSuperuserGroup) { + if (name !== undefined) { + const incomingName = typeof name === 'string' ? name.trim() : ''; + if (incomingName && incomingName !== existingRow.name) { + const error = new Error('GROUP_SUPERUSER_PROTECTED'); + error.code = 'GROUP_SUPERUSER_PROTECTED'; + throw error; + } + } + + if (description !== undefined) { + const existingDescriptionComparable = existingRow.description === null || existingRow.description === undefined + ? '' + : String(existingRow.description).trim(); + const incomingDescriptionComparable = description === null + ? '' + : typeof description === 'string' + ? description.trim() + : ''; + + if (incomingDescriptionComparable !== existingDescriptionComparable) { + const error = new Error('GROUP_SUPERUSER_PROTECTED'); + error.code = 'GROUP_SUPERUSER_PROTECTED'; + throw error; + } + } + + // Enforce original values for protected fields + normalizedDescription = existingRow.description ?? null; + } + + let colorToPersist = existingRow.avatar_color || null; + if (avatarColor !== undefined) { + const candidate = String(avatarColor || '').trim(); + if (!candidate) { + colorToPersist = DEFAULT_AVATAR_COLOR; + } else { + const normalized = normalizeAvatarColor(candidate); + if (!normalized) { + const error = new Error('INVALID_AVATAR_COLOR'); + error.code = 'INVALID_AVATAR_COLOR'; + throw error; + } + colorToPersist = normalized; + } + } + + updateGroupStatement.run( + isSuperuserGroup ? existingRow.name : normalizedName, + normalizedDescription, + colorToPersist, + numericId + ); + + const updatedGroup = getGroupById(numericId); + + logEvent({ + category: 'benutzergruppe', + eventType: 'gruppe-aktualisiert', + action: 'aktualisieren', + status: 'erfolgreich', + entityType: 'gruppe', + entityId: String(numericId), + entityName: updatedGroup?.name ?? normalizedName, + message: `Benutzergruppe "${updatedGroup?.name ?? normalizedName}" aktualisiert`, + metadata: { + previous: { + name: existingRow.name, + description: existingRow.description ?? null, + avatarColor: existingRow.avatar_color ?? null + }, + current: updatedGroup + ? { + name: updatedGroup.name, + description: updatedGroup.description ?? null, + avatarColor: updatedGroup.avatarColor ?? null, + memberCount: updatedGroup.memberCount ?? 0 + } + : { + name: normalizedName, + description: normalizedDescription ?? null, + avatarColor: colorToPersist + } + } + }); + + return updatedGroup; +} + +export function deleteGroup(groupId) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + const error = new Error('INVALID_GROUP_ID'); + error.code = 'INVALID_GROUP_ID'; + throw error; + } + + const existingRow = selectGroupByIdBasic.get(numericId); + if (!existingRow) { + const error = new Error('GROUP_NOT_FOUND'); + error.code = 'GROUP_NOT_FOUND'; + throw error; + } + + const isSuperuserGroup = (existingRow.name || '').toLowerCase() === SUPERUSER_GROUP_NAME; + if (isSuperuserGroup) { + const error = new Error('GROUP_SUPERUSER_PROTECTED'); + error.code = 'GROUP_SUPERUSER_PROTECTED'; + throw error; + } + + const { member_count: memberCount } = countGroupMembersStatement.get(numericId); + if (Number(memberCount) > 0) { + const error = new Error('GROUP_HAS_MEMBERS'); + error.code = 'GROUP_HAS_MEMBERS'; + error.memberCount = Number(memberCount); + throw error; + } + + deleteGroupStatement.run(numericId); + + logEvent({ + category: 'benutzergruppe', + eventType: 'gruppe-gelöscht', + action: 'löschen', + status: 'erfolgreich', + entityType: 'gruppe', + entityId: String(numericId), + entityName: existingRow.name ?? `ID ${numericId}`, + message: `Benutzergruppe "${existingRow.name ?? numericId}" gelöscht`, + metadata: { + description: existingRow.description ?? null, + avatarColor: existingRow.avatar_color ?? null, + memberCountBeforeDelete: Number(memberCount) + } + }); +} diff --git a/backend/index.js b/backend/index.js index 4eb45bf..bc2d5f3 100644 --- a/backend/index.js +++ b/backend/index.js @@ -11,18 +11,79 @@ import os from 'os'; import crypto from 'crypto'; import { fileURLToPath } from 'url'; import { db } from './db/index.js'; +import { ensureDatabaseSchema } from './db/schemaEnsure.js'; import { - logRedeployEvent, - buildLogFilter, - deleteLogById, - deleteLogsByFilters, - exportLogsByFilters -} from './db/redeployLogs.js'; + ensureSuperuserFromEnv, + getSuperuserSummary, + hasSuperuser, + registerSuperuser, + removeSuperuser, + findUserByIdentifier, + markUserLogin, + verifyPassword, + SUPERUSER_GROUP_NAME +} from './auth/superuser.js'; +import { + logEvent, + buildEventLogFilter, + deleteEventLogById, + deleteEventLogsByFilters, + exportEventLogsByFilters +} from './logging/eventLogs.js'; import { getSetting, setSetting, deleteSetting } from './db/settings.js'; import { activateMaintenanceMode, deactivateMaintenanceMode, getMaintenanceState, isMaintenanceModeActive } from './maintenance/state.js'; +import { + ensureDefaultsFromEnv, + getActiveApiKey, + getActiveServerUrl, + hasServer, + hasApiKey, + getSetupStatus, + completeSetup, + removeServer, + setServerApiKey +} from './setup/index.js'; +import { + listUsers, + getUserById, + updateUserGroups, + createUser, + updateUserDetails, + deleteUser, + updateUserActiveStatus, + getUserSecurityPhrase, + renewUserSecurityPhrase, + markSecurityPhraseDownloaded, + ensureSecurityPhrasesForExistingUsers, + verifySecurityPhraseForUsername, + setUserPassword +} from './users/index.js'; +import { listGroups, createGroup, getGroupById, updateGroupDetails, deleteGroup } from './groups/index.js'; +import { + getPermissionStructure, + getPermissionValuesByGroup, + saveGroupPermissionValues, + clearGroupPermissionValues, + getSuperuserPermissionMap, + getEffectivePermissionsForGroups, + hasRequiredPermission +} from './permissions/index.js'; dotenv.config(); +ensureDatabaseSchema(); +ensureSuperuserFromEnv(); +ensureDefaultsFromEnv(); + +try { + const initializedCount = ensureSecurityPhrasesForExistingUsers(); + if (initializedCount > 0) { + console.log(`ℹ️ Sicherheitsschlüssel für ${initializedCount} bestehende Benutzer initialisiert`); + } +} catch (error) { + console.error('⚠️ Initialisierung der Sicherheitsschlüssel für bestehende Benutzer fehlgeschlagen:', error); +} + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -36,15 +97,143 @@ app.get('*', (req, res, next) => { }); const PORT = 4001; -const ENDPOINT_ID = Number(process.env.PORTAINER_ENDPOINT_ID); const agent = new https.Agent({ rejectUnauthorized: false }); + +const resolvePortainerBaseUrl = () => { + const envUrl = typeof process.env.PORTAINER_URL === 'string' ? process.env.PORTAINER_URL.trim() : ''; + if (envUrl) return envUrl; + const activeUrl = getActiveServerUrl(); + return activeUrl ? activeUrl.trim() : ''; +}; + const axiosInstance = axios.create({ - httpsAgent: agent, - headers: { "X-API-Key": process.env.PORTAINER_API_KEY }, - baseURL: process.env.PORTAINER_URL, + httpsAgent: agent }); +axiosInstance.interceptors.request.use((config) => { + const currentBase = typeof config.baseURL === 'string' ? config.baseURL.trim() : ''; + const effectiveBase = currentBase || resolvePortainerBaseUrl(); + if (!effectiveBase) { + throw new Error('PORTAINER_URL_NOT_CONFIGURED'); + } + config.baseURL = effectiveBase; + + const apiKey = getActiveApiKey(); + if (apiKey) { + config.headers = config.headers || {}; + config.headers["X-API-Key"] = apiKey; + } else if (config.headers?.["X-API-Key"]) { + delete config.headers["X-API-Key"]; + } + return config; +}); + +const PORTAINER_ENVIRONMENT_CACHE_TTL_MS = 5 * 60 * 1000; +let cachedPortainerEnvironment = { id: null, fetchedAt: 0 }; +let resolvingEnvironmentPromise = null; + +const resolvePortainerEnvironmentId = async () => { + const now = Date.now(); + if (cachedPortainerEnvironment.id && now - cachedPortainerEnvironment.fetchedAt < PORTAINER_ENVIRONMENT_CACHE_TTL_MS) { + return cachedPortainerEnvironment.id; + } + + if (resolvingEnvironmentPromise) { + return resolvingEnvironmentPromise; + } + + resolvingEnvironmentPromise = (async () => { + try { + const endpointsRes = await axiosInstance.get('/api/endpoints'); + const endpoints = Array.isArray(endpointsRes.data) ? endpointsRes.data : []; + if (!endpoints.length) { + const error = new Error('PORTAINER_ENVIRONMENT_NOT_FOUND'); + error.code = 'PORTAINER_ENVIRONMENT_NOT_FOUND'; + throw error; + } + const preferred = + endpoints.find((endpoint) => endpoint.Type === 1 && (!endpoint.URL || endpoint.URL === '')) || + endpoints[0]; + const resolvedId = preferred?.Id ?? preferred?.ID ?? null; + if (!resolvedId) { + const error = new Error('PORTAINER_ENVIRONMENT_NOT_FOUND'); + error.code = 'PORTAINER_ENVIRONMENT_NOT_FOUND'; + throw error; + } + cachedPortainerEnvironment = { + id: String(resolvedId), + fetchedAt: Date.now() + }; + return cachedPortainerEnvironment.id; + } catch (error) { + const normalized = error.response?.data?.message || error.message || 'PORTAINER_ENVIRONMENT_NOT_FOUND'; + console.error('⚠️ [Portainer] Environment-Erkennung fehlgeschlagen:', normalized); + const wrapped = new Error('PORTAINER_ENVIRONMENT_NOT_FOUND'); + wrapped.code = 'PORTAINER_ENVIRONMENT_NOT_FOUND'; + throw wrapped; + } finally { + resolvingEnvironmentPromise = null; + } + })(); + + return resolvingEnvironmentPromise; +}; + +const normalizeExternalPortainerUrl = (value = '') => { + if (typeof value !== 'string') return ''; + const trimmed = value.trim(); + if (!trimmed) return ''; + try { + const hasProtocol = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed); + const candidate = hasProtocol ? trimmed : `https://${trimmed}`; + const normalized = new URL(candidate); + normalized.hash = ''; + return normalized.toString().replace(/\/$/, ''); + } catch { + return ''; + } +}; + +const createPortainerSetupClient = ({ baseURL, apiKey }) => { + if (!baseURL) { + const error = new Error('SERVER_URL_REQUIRED'); + error.code = 'SERVER_URL_REQUIRED'; + throw error; + } + if (!apiKey) { + const error = new Error('API_KEY_REQUIRED'); + error.code = 'API_KEY_REQUIRED'; + throw error; + } + return axios.create({ + baseURL, + httpsAgent: agent, + headers: { + 'X-API-Key': apiKey + } + }); +}; + +const extractPortainerCredentials = (payload = {}) => { + const rawServer = payload.server ?? {}; + const serverUrl = + typeof rawServer.url === 'string' ? rawServer.url : + typeof payload.serverUrl === 'string' ? payload.serverUrl : + typeof payload.url === 'string' ? payload.url : ''; + const apiKey = + typeof payload.apiKey === 'string' ? payload.apiKey : + typeof payload.key === 'string' ? payload.key : + typeof payload.api === 'string' ? payload.api : + typeof payload?.api?.value === 'string' ? payload.api.value : + ''; + + return { + serverUrl: serverUrl ? serverUrl.trim() : '', + apiKey: apiKey ? apiKey.trim() : '' + }; +}; + const REDEPLOY_PHASES = { QUEUED: 'queued', STARTED: 'started', @@ -55,6 +244,226 @@ const REDEPLOY_PHASES = { const redeployingStacks = new Map(); +const AUTH_COOKIE_NAME = process.env.AUTH_COOKIE_NAME || 'sp_auth_token'; +const DEFAULT_SESSION_TTL_MS = 1000 * 60 * 60 * 12; +const envSessionTtl = Number(process.env.AUTH_SESSION_TTL_MS); +const AUTH_SESSION_TTL_MS = Number.isFinite(envSessionTtl) && envSessionTtl > 0 ? envSessionTtl : DEFAULT_SESSION_TTL_MS; + +const parseBooleanEnv = (value, fallback) => { + if (value === undefined || value === null) return fallback; + const normalized = String(value).trim().toLowerCase(); + if (['1', 'true', 'yes', 'on'].includes(normalized)) return true; + if (['0', 'false', 'no', 'off'].includes(normalized)) return false; + return fallback; +}; + +const AUTH_COOKIE_SECURE = parseBooleanEnv(process.env.AUTH_COOKIE_SECURE, false); + +const AUTH_COOKIE_OPTIONS = { + httpOnly: true, + sameSite: 'lax', + secure: AUTH_COOKIE_SECURE, + path: '/' +}; + +const activeSessions = new Map(); +const passwordResetTickets = new Map(); +const PASSWORD_RESET_TTL_MS = 1000 * 60 * 15; + +const PUBLIC_API_ROUTES = [ + { method: 'GET', matcher: /^\/api\/auth\/superuser\/status$/ }, + { method: 'POST', matcher: /^\/api\/auth\/superuser\/register$/ }, + { method: 'POST', matcher: /^\/api\/auth\/login$/ }, + { method: 'POST', matcher: /^\/api\/auth\/logout$/ }, + { method: 'GET', matcher: /^\/api\/auth\/session$/ }, + { method: 'POST', matcher: /^\/api\/auth\/recover\/verify$/ }, + { method: 'POST', matcher: /^\/api\/auth\/recover\/reset$/ }, + { method: 'GET', matcher: /^\/api\/setup\/status$/ }, + { method: 'POST', matcher: /^\/api\/setup\/complete$/ }, + { method: 'POST', matcher: /^\/api\/setup\/test-portainer$/ }, + { method: 'POST', matcher: /^\/api\/setup\/portainer-stacks$/ } +]; + +const sanitizeUser = (user) => ({ + id: user.id, + username: user.username, + email: user.email, + avatarColor: user.avatar_color || null +}); + +const buildUserSessionPayload = (userId) => { + const record = getUserById(userId); + if (!record || !record.isActive) { + return null; + } + + const groups = Array.isArray(record.groups) ? record.groups : []; + const groupIds = groups + .map((group) => Number(group.id)) + .filter((groupId) => Number.isFinite(groupId) && groupId > 0); + + const isSuperuser = groups.some( + (group) => typeof group?.name === 'string' && group.name.toLowerCase() === SUPERUSER_GROUP_NAME + ); + + const permissions = isSuperuser + ? getSuperuserPermissionMap() + : getEffectivePermissionsForGroups(groupIds); + + return { + user: { + id: record.id, + username: record.username, + email: record.email || null, + avatarColor: record.avatarColor || null, + groups, + isSuperuser, + securityPhraseDownloadedAt: record.securityPhraseDownloadedAt || null, + requiresSecurityPhraseDownload: !record.securityPhraseDownloadedAt + }, + permissions + }; +}; + +const cleanupExpiredSessions = () => { + const now = Date.now(); + for (const [token, session] of activeSessions.entries()) { + if (!session || session.expiresAt <= now) { + activeSessions.delete(token); + } + } +}; + +const removeSessionsForUser = (userId) => { + if (!userId) return; + for (const [token, session] of activeSessions.entries()) { + if (session?.userId === userId) { + activeSessions.delete(token); + } + } +}; + +const cleanupExpiredPasswordResetTickets = () => { + const now = Date.now(); + for (const [token, ticket] of passwordResetTickets.entries()) { + if (!ticket || ticket.expiresAt <= now) { + passwordResetTickets.delete(token); + } + } +}; + +const removePasswordResetTicketsForUser = (userId) => { + if (!userId) return; + for (const [token, ticket] of passwordResetTickets.entries()) { + if (ticket?.userId === userId) { + passwordResetTickets.delete(token); + } + } +}; + +const createPasswordResetTicketForUser = (userId) => { + cleanupExpiredPasswordResetTickets(); + removePasswordResetTicketsForUser(userId); + const token = crypto.randomBytes(32).toString('hex'); + const expiresAt = Date.now() + PASSWORD_RESET_TTL_MS; + passwordResetTickets.set(token, { userId, expiresAt }); + return { token, expiresAt }; +}; + +const getPasswordResetTicket = (token) => { + if (!token) { + return null; + } + cleanupExpiredPasswordResetTickets(); + const record = passwordResetTickets.get(token); + if (!record) { + return null; + } + if (record.expiresAt <= Date.now()) { + passwordResetTickets.delete(token); + return null; + } + return record; +}; + +const createSessionForUser = (user) => { + cleanupExpiredSessions(); + removeSessionsForUser(user.id); + const token = crypto.randomBytes(48).toString('hex'); + const expiresAt = Date.now() + AUTH_SESSION_TTL_MS; + activeSessions.set(token, { userId: user.id, expiresAt }); + return { token, expiresAt }; +}; + +const getSessionRecord = (token) => { + if (!token) return null; + cleanupExpiredSessions(); + const record = activeSessions.get(token); + if (!record) return null; + if (record.expiresAt <= Date.now()) { + activeSessions.delete(token); + return null; + } + return record; +}; + +const touchSession = (token) => { + if (!token) return; + const record = activeSessions.get(token); + if (!record) return; + record.expiresAt = Date.now() + AUTH_SESSION_TTL_MS; + activeSessions.set(token, record); +}; + +const extractAuthToken = (req) => { + const rawCookie = req.headers?.cookie; + if (rawCookie && typeof rawCookie === 'string') { + const parts = rawCookie.split(';'); + for (const part of parts) { + const [name, ...rest] = part.trim().split('='); + if (name === AUTH_COOKIE_NAME) { + return rest.join('='); + } + } + } + const authHeader = req.headers?.authorization || req.headers?.Authorization; + if (authHeader && typeof authHeader === 'string') { + const lower = authHeader.toLowerCase(); + if (lower.startsWith('bearer ')) { + return authHeader.slice(7).trim(); + } + } + return null; +}; + +const setAuthCookie = (res, token) => { + if (!token || !res) return; + if (typeof res.cookie === 'function') { + res.cookie(AUTH_COOKIE_NAME, token, { + ...AUTH_COOKIE_OPTIONS, + maxAge: AUTH_SESSION_TTL_MS + }); + } else { + res.setHeader('Set-Cookie', `${AUTH_COOKIE_NAME}=${token}; Path=/; HttpOnly; SameSite=Lax`); + } +}; + +const clearAuthCookie = (res) => { + if (!res) return; + if (typeof res.clearCookie === 'function') { + res.clearCookie(AUTH_COOKIE_NAME, { + ...AUTH_COOKIE_OPTIONS, + maxAge: 0 + }); + } else { + res.setHeader('Set-Cookie', `${AUTH_COOKIE_NAME}=; Path=/; Max-Age=0`); + } +}; + +const isPublicApiRoute = (req) => { + return PUBLIC_API_ROUTES.some(({ method, matcher }) => req.method === method && matcher.test(req.path)); +}; + const isActiveRedeployPhase = (phase) => phase === REDEPLOY_PHASES.QUEUED || phase === REDEPLOY_PHASES.STARTED; const resolveRedeployPhase = (phase, message) => { @@ -111,7 +520,119 @@ const REDEPLOY_TYPES = { MAINTENANCE: 'Wartung' }; -const SELF_STACK_ID = process.env.SELF_STACK_ID ? String(process.env.SELF_STACK_ID) : null; +const logStackEvent = ({ + stackId, + stackName, + status, + message, + redeployType = null, + metadata = {} +}) => { + const metadataPayload = { + ...metadata + }; + + if (redeployType) { + metadataPayload.redeployType = redeployType; + } + + const hasMetadata = Object.keys(metadataPayload).length > 0; + const serverContextId = getActiveServerUrl() || null; + + logEvent({ + category: 'stack', + eventType: redeployType ?? null, + action: 'redeploy', + status: status ?? null, + entityType: 'stack', + entityId: stackId !== undefined && stackId !== null ? String(stackId) : null, + entityName: stackName ?? null, + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, + message: message ?? null, + metadata: hasMetadata ? metadataPayload : null + }); +}; + +const parseJsonColumn = (value) => { + if (value === undefined || value === null || value === '') return null; + try { + return JSON.parse(value); + } catch { + return null; + } +}; + +const SELF_STACK_SETTING_KEY = 'self_stack_id'; +let cachedSelfStackId = null; +let selfStackLoaded = false; + +const loadSelfStackId = () => { + try { + const stored = getSetting(SELF_STACK_SETTING_KEY); + if (stored && stored.value) { + cachedSelfStackId = String(stored.value); + } else if (process.env.SELF_STACK_ID) { + cachedSelfStackId = String(process.env.SELF_STACK_ID); + } else { + cachedSelfStackId = null; + } + } catch (error) { + console.warn('⚠️ [Setup] Konnte Self-Stack-ID nicht laden:', error.message); + cachedSelfStackId = process.env.SELF_STACK_ID ? String(process.env.SELF_STACK_ID) : null; + } finally { + selfStackLoaded = true; + } +}; + +const getSelfStackId = () => { + if (!selfStackLoaded) { + loadSelfStackId(); + } + return cachedSelfStackId; +}; + +const persistSelfStackId = (value) => { + const normalized = typeof value === 'string' + ? value.trim() + : value !== undefined && value !== null + ? String(value).trim() + : ''; + + if (!normalized) { + deleteSetting(SELF_STACK_SETTING_KEY); + cachedSelfStackId = process.env.SELF_STACK_ID ? String(process.env.SELF_STACK_ID) : null; + } else { + setSetting(SELF_STACK_SETTING_KEY, normalized); + cachedSelfStackId = normalized; + } + selfStackLoaded = true; + return cachedSelfStackId; +}; + +const getEnvSelfStackId = () => { + const raw = typeof process.env.SELF_STACK_ID === 'string' ? process.env.SELF_STACK_ID : ''; + return raw.trim(); +}; + +const applySelfStackStatus = (status) => { + const envSelfStackId = getEnvSelfStackId(); + const currentSelfStackId = getSelfStackId(); + const envDefaults = { ...(status.envDefaults || {}) }; + envDefaults.selfStackId = currentSelfStackId || envSelfStackId || envDefaults.selfStackId || ''; + + return { + ...status, + envDefaults, + selfStack: { + current: currentSelfStackId, + envProvided: Boolean(envSelfStackId) + } + }; +}; + +const buildSetupStatusResponse = () => applySelfStackStatus(getSetupStatus()); + const PORTAINER_SCRIPT_SETTING_KEY = 'portainer_update_script'; const PORTAINER_SSH_CONFIG_KEY = 'portainer_ssh_config'; @@ -458,7 +979,8 @@ const testSshConnection = async (configOverride = null) => { const detectPortainerContainer = async () => { try { - const containersRes = await axiosInstance.get(`/api/endpoints/${ENDPOINT_ID}/docker/containers/json`, { + const endpointId = await resolvePortainerEnvironmentId(); + const containersRes = await axiosInstance.get(`/api/endpoints/${endpointId}/docker/containers/json`, { params: { all: true } }); const containers = Array.isArray(containersRes.data) ? containersRes.data : []; @@ -484,7 +1006,7 @@ const detectPortainerContainer = async () => { return { summary: null, error: 'Portainer-Container nicht gefunden' }; } - const inspectRes = await axiosInstance.get(`/api/endpoints/${ENDPOINT_ID}/docker/containers/${matchedContainer.Id}/json`); + const inspectRes = await axiosInstance.get(`/api/endpoints/${endpointId}/docker/containers/${matchedContainer.Id}/json`); const inspect = inspectRes.data ?? {}; const trimName = (value) => (typeof value === 'string' ? value.replace(/^\//, '') : value); @@ -654,6 +1176,52 @@ const maintenanceGuard = (req, res, next) => { }); }; +const requirePermission = (permissionKey, requiredLevel = 'full') => (req, res, next) => { + if (!permissionKey) { + return next(); + } + + if (req.user?.isSuperuser) { + return next(); + } + + const permissions = req.userPermissions || {}; + if (hasRequiredPermission(permissions, permissionKey, requiredLevel)) { + return next(); + } + + return res.status(403).json({ + error: 'INSUFFICIENT_PERMISSIONS', + permission: permissionKey, + requiredLevel + }); +}; + +const requireAnyPermission = (candidates = []) => (req, res, next) => { + if (!Array.isArray(candidates) || candidates.length === 0) { + return next(); + } + + if (req.user?.isSuperuser) { + return next(); + } + + const permissions = req.userPermissions || {}; + const granted = candidates.some(({ key, level }) => + typeof key === 'string' && hasRequiredPermission(permissions, key, level || 'full') + ); + + if (granted) { + return next(); + } + + return res.status(403).json({ + error: 'INSUFFICIENT_PERMISSIONS', + permission: candidates.map((entry) => entry.key).filter(Boolean), + requiredLevel: candidates.map((entry) => entry.level || 'full') + }); +}; + const logScriptOutput = (data, level) => { if (!data) return; const text = data.toString(); @@ -729,6 +1297,7 @@ let currentPortainerUpdatePromise = null; const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) => { let maintenanceActivated = false; + const serverContextId = getActiveServerUrl() || null; try { addUpdateLog(`Portainer-Update gestartet (Quelle: ${scriptSource})`, 'info'); @@ -750,22 +1319,40 @@ const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) = }); maintenanceActivated = true; - logRedeployEvent({ - stackId: 'portainer', - stackName: 'Portainer', - status: 'started', + logEvent({ + category: 'wartung', + eventType: 'portainer-update', + action: 'aktualisieren', + status: 'gestartet', + entityType: 'service', + entityId: 'portainer', + entityName: 'Portainer', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: `Portainer Update gestartet (Ziel: ${targetVersion ?? 'unbekannt'})`, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + metadata: { + targetVersion: targetVersion ?? null, + scriptSource + }, + source: 'system' }); - logRedeployEvent({ - stackId: 'maintenance', - stackName: 'StackPulse Wartung', - status: 'started', + logEvent({ + category: 'wartung', + eventType: 'Wartungsmodus', + action: 'aktivieren', + status: 'gestartet', + entityType: 'system', + entityId: 'wartung', + entityName: 'StackPulse Wartung', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: 'Wartungsmodus aktiviert (Portainer Update)', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + metadata: { + reason: 'portainer-update', + scriptSource + }, + source: 'system' }); updatePortainerState({ @@ -789,13 +1376,21 @@ const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) = const statusAfter = await fetchPortainerStatusSummary().catch(() => null); const finalVersion = statusAfter?.currentVersion ?? null; - logRedeployEvent({ - stackId: 'portainer', - stackName: 'Portainer', - status: 'success', + logEvent({ + category: 'wartung', + eventType: 'portainer-update', + action: 'aktualisieren', + status: 'erfolgreich', + entityType: 'service', + entityId: 'portainer', + entityName: 'Portainer', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: `Portainer Update abgeschlossen (Version: ${finalVersion ?? 'unbekannt'})`, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + metadata: { + resultVersion: finalVersion ?? null + }, + source: 'system' }); updatePortainerState({ @@ -813,24 +1408,37 @@ const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) = if (maintenanceActivated || maintenanceState?.active) { deactivateMaintenanceMode({ message: 'Portainer Update abgeschlossen' }); maintenanceActivated = false; - logRedeployEvent({ - stackId: 'maintenance', - stackName: 'StackPulse Wartung', - status: 'success', + logEvent({ + category: 'wartung', + eventType: 'Wartungsmodus', + action: 'deaktivieren', + status: 'erfolgreich', + entityType: 'system', + entityId: 'wartung', + entityName: 'StackPulse Wartung', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: 'Wartungsmodus deaktiviert', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + metadata: { + reason: 'portainer-update' + }, + source: 'system' }); } } catch (err) { const message = err?.message || 'Portainer Update fehlgeschlagen'; - logRedeployEvent({ - stackId: 'portainer', - stackName: 'Portainer', - status: 'error', + logEvent({ + category: 'wartung', + eventType: 'portainer-update', + action: 'aktualisieren', + status: 'fehler', + entityType: 'service', + entityId: 'portainer', + entityName: 'Portainer', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + source: 'system' }); updatePortainerState({ @@ -846,13 +1454,21 @@ const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) = if (maintenanceActivated || isMaintenanceModeActive()) { deactivateMaintenanceMode({ message: 'Portainer Update fehlgeschlagen' }); - logRedeployEvent({ - stackId: 'maintenance', - stackName: 'StackPulse Wartung', - status: 'error', - message: 'Wartungsmodus deaktiviert (Fehler)', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.MAINTENANCE + logEvent({ + category: 'wartung', + eventType: 'Wartungsmodus', + action: 'deaktivieren', + status: 'fehler', + entityType: 'system', + entityId: 'wartung', + entityName: 'StackPulse Wartung', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, + message: 'Wartungsmodus deaktiviert (Fehler)', + metadata: { + reason: 'portainer-update' + }, + source: 'system' }); } } finally { @@ -862,15 +1478,16 @@ const performPortainerUpdate = async ({ script, scriptSource, targetVersion }) = const fetchPortainerStacks = async () => { const stacksRes = await axiosInstance.get('/api/stacks'); - return stacksRes.data.filter((stack) => stack.EndpointId === ENDPOINT_ID); + return Array.isArray(stacksRes.data) ? stacksRes.data : []; }; const buildStackCollections = (stacks = []) => { + const currentSelfStackId = getSelfStackId(); const collections = new Map(); stacks.forEach((stack) => { const name = stack.Name || 'Unbenannt'; - const isSelf = SELF_STACK_ID && String(stack.Id) === SELF_STACK_ID; + const isSelf = currentSelfStackId && String(stack.Id) === currentSelfStackId; const entry = collections.get(name); if (!entry) { @@ -942,10 +1559,11 @@ const isStackOutdated = async (stackId) => { }; const filterOutdatedStacks = async (stacks = []) => { + const currentSelfStackId = getSelfStackId(); const results = await Promise.all( stacks.map(async (stack) => ({ stack, - outdated: SELF_STACK_ID && String(stack.Id) === SELF_STACK_ID + outdated: currentSelfStackId && String(stack.Id) === currentSelfStackId ? false : await isStackOutdated(stack.Id) })) @@ -984,10 +1602,6 @@ const redeployStackById = async (stackId, redeployType) => { const stackRes = await axiosInstance.get(`/api/stacks/${stackId}`); stack = stackRes.data; - if (stack.EndpointId !== ENDPOINT_ID) { - throw new Error(`Stack gehört nicht zum Endpoint ${ENDPOINT_ID}`); - } - const targetId = stack.Id || stackId; const targetName = stack.Name || `Stack ${stackId}`; @@ -997,12 +1611,11 @@ const redeployStackById = async (stackId, redeployType) => { phase: REDEPLOY_PHASES.STARTED }); - logRedeployEvent({ + logStackEvent({ stackId: targetId, stackName: targetName, status: 'started', message: messages.started, - endpoint: stack.EndpointId, redeployType }); @@ -1077,12 +1690,11 @@ const redeployStackById = async (stackId, redeployType) => { phase: REDEPLOY_PHASES.SUCCESS }); - logRedeployEvent({ + logStackEvent({ stackId: targetId, stackName: targetName, status: 'success', message: messages.success, - endpoint: stack.EndpointId, redeployType }); @@ -1099,12 +1711,11 @@ const redeployStackById = async (stackId, redeployType) => { message: errorMessage }); - logRedeployEvent({ + logStackEvent({ stackId: fallbackId, stackName: fallbackName, status: 'error', message: errorMessage, - endpoint: stack?.EndpointId || ENDPOINT_ID, redeployType }); @@ -1113,7 +1724,1041 @@ const redeployStackById = async (stackId, redeployType) => { } }; -// --- API Endpoints --- +app.use((req, res, next) => { + if (!req.path.startsWith('/api')) { + return next(); + } + + if (req.method === 'OPTIONS' || isPublicApiRoute(req)) { + return next(); + } + + if (!hasSuperuser()) { + return res.status(403).json({ error: 'SUPERUSER_REQUIRED' }); + } + + if (!hasServer() || !hasApiKey()) { + return res.status(403).json({ error: 'SETUP_REQUIRED' }); + } + + const token = extractAuthToken(req); + const session = getSessionRecord(token); + if (!session) { + clearAuthCookie(res); + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + const userRecord = getUserById(session.userId); + if (!userRecord || !userRecord.isActive) { + activeSessions.delete(token); + clearAuthCookie(res); + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + const userGroups = Array.isArray(userRecord.groups) ? userRecord.groups : []; + const groupIds = userGroups + .map((group) => Number(group.id)) + .filter((groupId) => Number.isFinite(groupId) && groupId > 0); + + const isSuperuser = userGroups.some( + (group) => typeof group?.name === 'string' && group.name.toLowerCase() === SUPERUSER_GROUP_NAME + ); + + const permissionsMap = isSuperuser + ? getSuperuserPermissionMap() + : getEffectivePermissionsForGroups(groupIds); + + req.user = { + id: userRecord.id, + username: userRecord.username, + email: userRecord.email, + avatarColor: userRecord.avatarColor || null, + groups: userGroups, + isSuperuser, + securityPhraseDownloadedAt: userRecord.securityPhraseDownloadedAt || null, + requiresSecurityPhraseDownload: !userRecord.securityPhraseDownloadedAt + }; + req.userPermissions = permissionsMap; + req.authToken = token; + touchSession(token); + setAuthCookie(res, token); + next(); +}); + +// --- API Routes --- + +app.get('/api/setup/status', (req, res) => { + try { + const status = buildSetupStatusResponse(); + res.json(status); + } catch (error) { + console.error('⚠️ [Setup] Statusabfrage fehlgeschlagen:', error); + res.status(500).json({ error: 'SETUP_STATUS_FAILED' }); + } +}); + +app.post('/api/setup/test-portainer', async (req, res) => { + const { serverUrl, apiKey } = extractPortainerCredentials(req.body); + const normalizedUrl = normalizeExternalPortainerUrl(serverUrl); + + if (!normalizedUrl) { + return res.status(400).json({ error: 'SERVER_URL_INVALID' }); + } + if (!apiKey) { + return res.status(400).json({ error: 'API_KEY_REQUIRED' }); + } + + try { + const client = createPortainerSetupClient({ baseURL: normalizedUrl, apiKey }); + const statusRes = await client.get('/api/status'); + res.json({ + success: true, + status: statusRes.data ?? null + }); + } catch (error) { + const message = error.response?.data?.message || error.message || 'PORTAINER_TEST_FAILED'; + const status = error.response?.status ?? 400; + res.status(status === 401 ? 401 : 400).json({ error: 'PORTAINER_TEST_FAILED', message }); + } +}); + +app.post('/api/setup/portainer-stacks', async (req, res) => { + const { serverUrl, apiKey } = extractPortainerCredentials(req.body); + const normalizedUrl = normalizeExternalPortainerUrl(serverUrl); + + if (!normalizedUrl) { + return res.status(400).json({ error: 'SERVER_URL_INVALID' }); + } + if (!apiKey) { + return res.status(400).json({ error: 'API_KEY_REQUIRED' }); + } + + try { + const client = createPortainerSetupClient({ baseURL: normalizedUrl, apiKey }); + const stacksRes = await client.get('/api/stacks'); + const stacks = Array.isArray(stacksRes.data) ? stacksRes.data : []; + res.json({ success: true, stacks }); + } catch (error) { + const message = error.response?.data?.message || error.message || 'PORTAINER_STACK_FETCH_FAILED'; + const status = error.response?.status ?? 400; + res.status(status === 401 ? 401 : 400).json({ error: 'PORTAINER_STACK_FETCH_FAILED', message }); + } +}); + +app.post('/api/setup/complete', (req, res) => { + const { superuser: superuserInput, server: serverInput, apiKey: apiKeyInput, selfStackId: selfStackInput } = req.body ?? {}; + const hasSelfStackInput = req.body ? Object.prototype.hasOwnProperty.call(req.body, 'selfStackId') : false; + const initialStatus = getSetupStatus(); + const needsSuperuser = initialStatus.requirements.superuser; + const needsServer = initialStatus.requirements.server; + const needsApiKey = initialStatus.requirements.apiKey; + + const created = {}; + + const normalizeServerInput = (input) => { + if (!input) return null; + const name = typeof input.name === 'string' ? input.name.trim() : ''; + const url = typeof input.url === 'string' ? input.url.trim() : ''; + if (!url) { + return { name: name || '', url: '' }; + } + return { + name: name || null, + url + }; + }; + + const normalizeApiKeyInput = (input) => { + if (!input) return null; + if (typeof input === 'string') { + const value = input.trim(); + return { value, serverId: null }; + } + if (typeof input === 'object') { + const rawValue = typeof input.value === 'string' ? input.value : typeof input.key === 'string' ? input.key : ''; + const value = rawValue.trim(); + const serverIdRaw = input.serverId !== undefined && input.serverId !== null ? Number(input.serverId) : null; + const serverId = Number.isFinite(serverIdRaw) ? serverIdRaw : null; + return { value, serverId }; + } + return null; + }; + + try { + const serverPayload = normalizeServerInput(serverInput); + const apiKeyPayload = normalizeApiKeyInput(apiKeyInput); + + if (needsServer && (!serverPayload || !serverPayload.url)) { + return res.status(400).json({ error: 'SERVER_DETAILS_REQUIRED' }); + } + + if (needsServer || (serverPayload && serverPayload.url)) { + const setupResult = completeSetup({ + server: serverPayload && serverPayload.url ? serverPayload : null + }); + created.server = setupResult.server; + } + + if (needsSuperuser) { + const username = typeof superuserInput?.username === 'string' ? superuserInput.username.trim() : ''; + const email = typeof superuserInput?.email === 'string' ? superuserInput.email.trim() : ''; + const password = typeof superuserInput?.password === 'string' ? superuserInput.password : ''; + + if (!username || !email || !password) { + return res.status(400).json({ error: 'SUPERUSER_DETAILS_REQUIRED' }); + } + + const user = registerSuperuser({ username, email, password }); + created.superuser = user; + } + + const statusSnapshot = getSetupStatus(); + + let targetServerId = apiKeyPayload?.serverId ?? created.server?.id ?? null; + if (!targetServerId) { + targetServerId = statusSnapshot.servers.items?.[0]?.id ?? null; + } + + if (apiKeyPayload && apiKeyPayload.value) { + if (!targetServerId) { + return res.status(400).json({ error: 'SERVER_DETAILS_REQUIRED' }); + } + const apiKeyResult = setServerApiKey({ serverId: targetServerId, apiKey: apiKeyPayload.value }); + created.apiKey = apiKeyResult; + } else if (needsApiKey) { + return res.status(400).json({ error: 'API_KEY_REQUIRED' }); + } + + if (hasSelfStackInput) { + const normalizedSelfStackId = typeof selfStackInput === 'string' + ? selfStackInput.trim() + : selfStackInput !== undefined && selfStackInput !== null + ? String(selfStackInput).trim() + : ''; + + const nextSelfStackId = persistSelfStackId(normalizedSelfStackId); + created.selfStackId = nextSelfStackId || null; + } + + const finalStatus = buildSetupStatusResponse(); + res.status(201).json({ + success: finalStatus.setupComplete, + status: finalStatus, + created + }); + } catch (error) { + const code = error.code || error.message; + switch (code) { + case 'SERVER_URL_REQUIRED': + case 'SERVER_NAME_REQUIRED': + case 'SERVER_DETAILS_REQUIRED': + case 'USERNAME_REQUIRED': + case 'EMAIL_INVALID': + case 'PASSWORD_TOO_SHORT': + case 'INVALID_PASSWORD': + case 'API_KEY_REQUIRED': + return res.status(400).json({ error: code }); + case 'API_KEY_ENCRYPT_FAILED': + console.error('⚠️ [Setup] API-Key Verschlüsselung fehlgeschlagen:', error); + return res.status(500).json({ error: 'API_KEY_ENCRYPT_FAILED' }); + case 'SERVER_NOT_FOUND': + return res.status(404).json({ error: 'SERVER_NOT_FOUND' }); + case 'SUPERUSER_ALREADY_EXISTS': + return res.status(409).json({ error: 'SUPERUSER_EXISTS' }); + default: + console.error('⚠️ [Setup] Fehler beim Abschluss:', error); + return res.status(500).json({ error: 'SETUP_FAILED' }); + } + } +}); + +app.delete('/api/setup/servers/:id', requirePermission('maintenance-server-delete', 'full'), (req, res) => { + const { id } = req.params; + const numericId = Number(id); + if (!Number.isFinite(numericId)) { + return res.status(400).json({ error: 'SERVER_ID_INVALID' }); + } + + try { + const result = removeServer(numericId); + const status = buildSetupStatusResponse(); + res.json({ success: true, removed: result, status }); + } catch (error) { + const code = error.code || error.message; + switch (code) { + case 'SERVER_ID_INVALID': + return res.status(400).json({ error: 'SERVER_ID_INVALID' }); + case 'SERVER_NOT_FOUND': + return res.status(404).json({ error: 'SERVER_NOT_FOUND' }); + default: + console.error('⚠️ [Setup] Server konnte nicht gelöscht werden:', error); + return res.status(500).json({ error: 'SERVER_DELETE_FAILED' }); + } + } +}); + +app.put('/api/setup/servers/:id/api-key', requirePermission('maintenance-server-manage', 'full'), (req, res) => { + const { id } = req.params; + const numericId = Number(id); + if (!Number.isFinite(numericId)) { + return res.status(400).json({ error: 'SERVER_ID_INVALID' }); + } + + const rawValue = typeof req.body?.apiKey === 'string' ? req.body.apiKey : typeof req.body?.key === 'string' ? req.body.key : ''; + + try { + const result = setServerApiKey({ serverId: numericId, apiKey: rawValue }); + const status = buildSetupStatusResponse(); + res.json({ success: true, updated: result, status }); + } catch (error) { + const code = error.code || error.message; + switch (code) { + case 'SERVER_ID_INVALID': + return res.status(400).json({ error: 'SERVER_ID_INVALID' }); + case 'SERVER_NOT_FOUND': + return res.status(404).json({ error: 'SERVER_NOT_FOUND' }); + case 'API_KEY_REQUIRED': + return res.status(400).json({ error: 'API_KEY_REQUIRED' }); + case 'API_KEY_ENCRYPT_FAILED': + console.error('⚠️ [Setup] API-Key Verschlüsselung fehlgeschlagen:', error); + return res.status(500).json({ error: 'API_KEY_ENCRYPT_FAILED' }); + default: + console.error('⚠️ [Setup] API-Key konnte nicht aktualisiert werden:', error); + return res.status(500).json({ error: 'API_KEY_UPDATE_FAILED' }); + } + } +}); + +app.put('/api/setup/self-stack', requirePermission('maintenance-server-manage', 'full'), (req, res) => { + const hasPayload = req.body ? Object.prototype.hasOwnProperty.call(req.body, 'selfStackId') : false; + if (!hasPayload) { + return res.status(400).json({ error: 'SELF_STACK_ID_MISSING' }); + } + + const inputValue = req.body.selfStackId; + const normalizedSelfStackId = typeof inputValue === 'string' + ? inputValue.trim() + : inputValue !== undefined && inputValue !== null + ? String(inputValue).trim() + : ''; + + try { + const nextValue = persistSelfStackId(normalizedSelfStackId) || null; + const status = buildSetupStatusResponse(); + res.json({ + success: true, + value: nextValue, + status + }); + } catch (error) { + console.error('⚠️ [Setup] Self-Stack-ID konnte nicht aktualisiert werden:', error); + res.status(500).json({ error: 'SELF_STACK_ID_UPDATE_FAILED' }); + } +}); + +app.post('/api/auth/login', (req, res) => { + if (!hasSuperuser()) { + return res.status(403).json({ error: 'SUPERUSER_REQUIRED' }); + } + + if (!hasServer() || !hasApiKey()) { + return res.status(403).json({ error: 'SETUP_REQUIRED' }); + } + + const { identifier, password } = req.body ?? {}; + if (!identifier || !password) { + return res.status(400).json({ error: 'MISSING_CREDENTIALS' }); + } + + const user = findUserByIdentifier(identifier); + if (!user) { + return res.status(401).json({ error: 'INVALID_CREDENTIALS' }); + } + + if (!user.is_active) { + return res.status(403).json({ error: 'USER_INACTIVE' }); + } + + const passwordValid = verifyPassword(password, user.password_hash, user.password_salt); + if (!passwordValid) { + return res.status(401).json({ error: 'INVALID_CREDENTIALS' }); + } + + const session = createSessionForUser(user); + markUserLogin(user.id); + setAuthCookie(res, session.token); + + const payload = buildUserSessionPayload(user.id); + if (payload) { + res.json(payload); + } else { + res.json({ user: sanitizeUser(user), permissions: {} }); + } +}); + +app.post('/api/auth/logout', (req, res) => { + const token = extractAuthToken(req); + if (token) { + activeSessions.delete(token); + } + clearAuthCookie(res); + res.json({ success: true }); +}); + +app.post('/api/auth/recover/verify', (req, res) => { + const { username, phrase, words } = req.body ?? {}; + + try { + const candidate = typeof phrase === 'string' && phrase.trim() ? phrase : words; + const verification = verifySecurityPhraseForUsername(username, candidate); + const ticket = createPasswordResetTicketForUser(verification.userId); + res.json({ token: ticket.token, expiresIn: PASSWORD_RESET_TTL_MS }); + } catch (error) { + if (error.code === 'USERNAME_REQUIRED' || error.code === 'PHRASE_REQUIRED') { + return res.status(400).json({ error: error.code }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + if (error.code === 'PHRASE_NOT_INITIALIZED') { + return res.status(409).json({ error: 'PHRASE_NOT_INITIALIZED' }); + } + if (error.code === 'PHRASE_MISMATCH') { + return res.status(401).json({ error: 'PHRASE_MISMATCH' }); + } + if (error.code === 'INVALID_PASSWORD') { + return res.status(400).json({ error: 'INVALID_PASSWORD' }); + } + console.error('⚠️ [Auth] Sicherheitsphrase-Überprüfung fehlgeschlagen:', error); + res.status(500).json({ error: 'RECOVERY_VERIFY_FAILED' }); + } +}); + +app.post('/api/auth/recover/reset', (req, res) => { + const { token, password, confirmPassword } = req.body ?? {}; + + if (!token || typeof token !== 'string' || !token.trim()) { + return res.status(400).json({ error: 'TOKEN_REQUIRED' }); + } + + if (typeof password !== 'string' || !password.trim()) { + return res.status(400).json({ error: 'PASSWORD_REQUIRED' }); + } + + if (typeof confirmPassword === 'string' && password !== confirmPassword) { + return res.status(400).json({ error: 'PASSWORD_MISMATCH' }); + } + + const trimmedToken = token.trim(); + const ticket = getPasswordResetTicket(trimmedToken); + if (!ticket) { + return res.status(410).json({ error: 'TOKEN_INVALID_OR_EXPIRED' }); + } + + try { + setUserPassword(ticket.userId, password, { resetMethod: 'security-phrase' }); + passwordResetTickets.delete(trimmedToken); + removeSessionsForUser(ticket.userId); + res.json({ success: true }); + } catch (error) { + if (error.code === 'INVALID_PASSWORD' || error.code === 'PASSWORD_TOO_SHORT') { + return res.status(400).json({ error: error.code }); + } + if (error.code === 'USER_NOT_FOUND') { + passwordResetTickets.delete(trimmedToken); + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + console.error('⚠️ [Auth] Passwort-Zurücksetzung fehlgeschlagen:', error); + res.status(500).json({ error: 'RECOVERY_RESET_FAILED' }); + } +}); + +app.get('/api/auth/session', (req, res) => { + if (!hasSuperuser()) { + return res.status(403).json({ error: 'SUPERUSER_REQUIRED' }); + } + + if (!hasServer() || !hasApiKey()) { + return res.status(403).json({ error: 'SETUP_REQUIRED' }); + } + + const token = extractAuthToken(req); + const session = getSessionRecord(token); + if (!session) { + clearAuthCookie(res); + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + const payload = buildUserSessionPayload(session.userId); + if (!payload) { + activeSessions.delete(token); + clearAuthCookie(res); + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + touchSession(token); + setAuthCookie(res, token); + res.json(payload); +}); + +app.get('/api/users', requirePermission('users-access', 'read'), (req, res) => { + try { + const users = listUsers(); + res.json({ items: users, total: users.length }); + } catch (error) { + console.error('⚠️ [Users] Abruf der Benutzerliste fehlgeschlagen:', error); + res.status(500).json({ error: 'USERS_FETCH_FAILED' }); + } +}); + +app.post('/api/users', requirePermission('users-edit', 'full'), (req, res) => { + const { username, email, password, groupId, avatarColor } = req.body ?? {}; + + try { + const user = createUser({ username, email, password, groupId, avatarColor }, { actor: req.user }); + res.status(201).json({ item: user }); + } catch (error) { + if (error.code === 'USERNAME_REQUIRED' || error.code === 'INVALID_GROUP_ID') { + return res.status(400).json({ error: error.code }); + } + if (error.code === 'GROUP_NOT_FOUND') { + return res.status(400).json({ error: 'GROUP_NOT_FOUND' }); + } + if (error.code === 'INVALID_EMAIL') { + return res.status(400).json({ error: 'INVALID_EMAIL' }); + } + if (error.code === 'INVALID_PASSWORD' || error.code === 'PASSWORD_TOO_SHORT') { + return res.status(400).json({ error: error.code }); + } + if (error.code === 'USERNAME_TAKEN' || error.code === 'EMAIL_TAKEN') { + return res.status(409).json({ error: error.code }); + } + console.error('⚠️ [Users] Anlegen eines Benutzers fehlgeschlagen:', error); + res.status(500).json({ error: 'USER_CREATE_FAILED' }); + } +}); + +app.get('/api/users/me/security-phrase', (req, res) => { + const userId = req.user?.id; + if (!userId) { + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + try { + const phrase = getUserSecurityPhrase(userId, { actor: req.user }); + if (phrase.downloadedAt) { + return res.status(409).json({ + error: 'SECURITY_PHRASE_ALREADY_DOWNLOADED', + downloadedAt: phrase.downloadedAt + }); + } + res.json({ + item: { + userId: phrase.userId, + words: phrase.words, + downloadedAt: phrase.downloadedAt + } + }); + } catch (error) { + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + console.error(`⚠️ [Users] Sicherheitsschlüssel konnte für Benutzer ${userId} nicht geladen werden:`, error); + res.status(500).json({ error: 'USER_SECURITY_PHRASE_FETCH_FAILED' }); + } +}); + +app.post('/api/users/me/security-phrase/downloaded', (req, res) => { + const userId = req.user?.id; + if (!userId) { + return res.status(401).json({ error: 'UNAUTHORIZED' }); + } + + try { + const result = markSecurityPhraseDownloaded(userId, { actor: req.user }); + const sessionPayload = buildUserSessionPayload(userId); + res.json({ + item: { + userId: result.userId, + downloadedAt: result.downloadedAt + }, + session: sessionPayload + }); + } catch (error) { + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + console.error(`⚠️ [Users] Sicherheits-Download konnte nicht vermerkt werden (${userId}):`, error); + res.status(500).json({ error: 'USER_SECURITY_PHRASE_DOWNLOAD_FAILED' }); + } +}); + +app.get('/api/users/:userId', requirePermission('users-access', 'read'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + const user = getUserById(numericId); + if (!user) { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + res.json({ item: user }); + } catch (error) { + console.error(`⚠️ [Users] Abruf der Benutzerdetails fehlgeschlagen (${userId}):`, error); + res.status(500).json({ error: 'USER_FETCH_FAILED' }); + } +}); + +app.get('/api/users/:userId/security-phrase', requirePermission('users-security-phrase', 'read'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + const phrase = getUserSecurityPhrase(numericId, { actor: req.user }); + res.json({ item: phrase }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + console.error(`⚠️ [Users] Sicherheitsschlüssel konnte nicht geladen werden (${userId}):`, error); + res.status(500).json({ error: 'USER_SECURITY_PHRASE_FETCH_FAILED' }); + } +}); + +app.post('/api/users/:userId/security-phrase/renew', requirePermission('users-security-phrase', 'full'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + const renewed = renewUserSecurityPhrase(numericId, { actor: req.user }); + res.json({ item: renewed }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + console.error(`⚠️ [Users] Sicherheitsschlüssel konnte nicht erneuert werden (${userId}):`, error); + res.status(500).json({ error: 'USER_SECURITY_PHRASE_RENEW_FAILED' }); + } +}); + +app.put('/api/users/:userId', requirePermission('users-edit', 'full'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + const { username, email, password, avatarColor, groupId, groupIds } = req.body ?? {}; + + try { + const updatedUser = updateUserDetails(numericId, { + username, + email, + password, + avatarColor, + groupId, + groupIds + }); + res.json({ item: updatedUser }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + if (error.code === 'USERNAME_REQUIRED') { + return res.status(400).json({ error: 'USERNAME_REQUIRED' }); + } + if (error.code === 'INVALID_EMAIL') { + return res.status(400).json({ error: 'INVALID_EMAIL' }); + } + if (error.code === 'USERNAME_TAKEN') { + return res.status(409).json({ error: 'USERNAME_TAKEN' }); + } + if (error.code === 'EMAIL_TAKEN') { + return res.status(409).json({ error: 'EMAIL_TAKEN' }); + } + if (error.code === 'INVALID_PASSWORD' || error.code === 'PASSWORD_TOO_SHORT') { + return res.status(400).json({ error: error.code }); + } + if (error.code === 'INVALID_AVATAR_COLOR') { + return res.status(400).json({ error: 'INVALID_AVATAR_COLOR' }); + } + if (error.code === 'GROUP_NOT_FOUND') { + return res.status(400).json({ error: 'GROUP_NOT_FOUND', details: error.missingGroupIds || [] }); + } + if (error.code === 'GROUP_SUPERUSER_PROTECTED') { + return res.status(403).json({ error: 'GROUP_SUPERUSER_PROTECTED' }); + } + + console.error(`⚠️ [Users] Aktualisierung der Benutzerdaten fehlgeschlagen (${userId}):`, error); + res.status(500).json({ error: 'USER_UPDATE_FAILED' }); + } +}); + +app.put('/api/users/:userId/groups', requirePermission('users-edit', 'full'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + const { groupIds } = req.body ?? {}; + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + const updatedUser = updateUserGroups(numericId, Array.isArray(groupIds) ? groupIds : []); + res.json({ item: updatedUser }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + if (error.code === 'GROUP_NOT_FOUND') { + return res.status(400).json({ error: 'GROUP_NOT_FOUND', details: error.missingGroupIds || [] }); + } + console.error(`⚠️ [Users] Aktualisierung der Gruppenzuordnung fehlgeschlagen (${userId}):`, error); + res.status(500).json({ error: 'USER_GROUPS_UPDATE_FAILED' }); + } +}); + +app.delete('/api/users/:userId', requirePermission('users-delete', 'full'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + deleteUser(numericId); + res.json({ success: true }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + if (error.code === 'USER_SUPERUSER_PROTECTED') { + return res.status(403).json({ error: 'USER_SUPERUSER_PROTECTED' }); + } + + console.error(`⚠️ [Users] Löschen fehlgeschlagen (${userId}):`, error); + res.status(500).json({ error: 'USER_DELETE_FAILED' }); + } +}); + +app.put('/api/users/:userId/active', requirePermission('users-edit', 'full'), (req, res) => { + const { userId } = req.params; + const numericId = Number(userId); + const { isActive } = req.body ?? {}; + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + + try { + const updatedUser = updateUserActiveStatus(numericId, Boolean(isActive)); + res.json({ item: updatedUser }); + } catch (error) { + if (error.code === 'INVALID_USER_ID') { + return res.status(400).json({ error: 'INVALID_USER_ID' }); + } + if (error.code === 'USER_NOT_FOUND') { + return res.status(404).json({ error: 'USER_NOT_FOUND' }); + } + if (error.code === 'USER_SUPERUSER_PROTECTED') { + return res.status(403).json({ error: 'USER_SUPERUSER_PROTECTED' }); + } + + console.error(`⚠️ [Users] Aktualisierung des Aktivstatus fehlgeschlagen (${userId}):`, error); + res.status(500).json({ error: 'USER_STATUS_UPDATE_FAILED' }); + } +}); + +app.get( + '/api/groups', + requireAnyPermission([ + { key: 'user-groups-access', level: 'read' }, + { key: 'users-edit', level: 'read' } + ]), + (req, res) => { + try { + const groups = listGroups(); + res.json({ items: groups, total: groups.length }); + } catch (error) { + console.error('⚠️ [Groups] Abruf der Benutzergruppenliste fehlgeschlagen:', error); + res.status(500).json({ error: 'GROUPS_FETCH_FAILED' }); + } + } +); + +app.get( + '/api/groups/:groupId', + requireAnyPermission([ + { key: 'user-groups-access', level: 'read' }, + { key: 'users-edit', level: 'read' } + ]), + (req, res) => { + const { groupId } = req.params; + const numericId = Number(groupId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + try { + const group = getGroupById(numericId); + if (!group) { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + res.json({ item: group }); + } catch (error) { + console.error(`⚠️ [Groups] Abruf der Gruppendetails fehlgeschlagen (${groupId}):`, error); + res.status(500).json({ error: 'GROUP_FETCH_FAILED' }); + } + } +); + +app.get('/api/groups/:groupId/permissions', requirePermission('user-groups-edit', 'read'), (req, res) => { + const { groupId } = req.params; + const numericId = Number(groupId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + try { + const group = getGroupById(numericId); + if (!group) { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + + const sections = getPermissionStructure(); + const isSuperuser = (group.name || '').toLowerCase() === SUPERUSER_GROUP_NAME; + let values = {}; + + if (isSuperuser) { + clearGroupPermissionValues(numericId); + } else { + values = getPermissionValuesByGroup(numericId); + } + + res.json({ sections, values }); + } catch (error) { + console.error(`⚠️ [Groups] Abruf der Gruppenberechtigungen fehlgeschlagen (${groupId}):`, error); + res.status(500).json({ error: 'GROUP_PERMISSIONS_FETCH_FAILED' }); + } +}); + +app.put('/api/groups/:groupId/permissions', requirePermission('user-groups-edit', 'full'), (req, res) => { + const { groupId } = req.params; + const numericId = Number(groupId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + try { + const group = getGroupById(numericId); + if (!group) { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + + const isSuperuser = (group.name || '').toLowerCase() === SUPERUSER_GROUP_NAME; + if (isSuperuser) { + clearGroupPermissionValues(numericId); + return res.status(403).json({ error: 'GROUP_SUPERUSER_PROTECTED' }); + } + + const valuesPayload = req.body?.values ?? {}; + const savedValues = saveGroupPermissionValues(numericId, valuesPayload); + + res.json({ success: true, values: savedValues }); + } catch (error) { + const serverError = error?.code; + if (serverError === 'GROUP_NOT_FOUND') { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + if (serverError === 'PERMISSION_INVALID_PAYLOAD') { + return res.status(400).json({ error: 'PERMISSION_INVALID_PAYLOAD' }); + } + if (serverError === 'PERMISSION_INVALID_LEVEL') { + return res.status(400).json({ error: 'PERMISSION_INVALID_LEVEL', permissionKey: error.permissionKey, level: error.level }); + } + if (serverError === 'PERMISSION_UNKNOWN_KEY') { + return res.status(400).json({ error: 'PERMISSION_UNKNOWN_KEY', permissionKey: error.permissionKey }); + } + if (serverError === 'INVALID_GROUP_ID') { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + console.error(`⚠️ [Groups] Aktualisierung der Berechtigungen fehlgeschlagen (${groupId}):`, error); + res.status(500).json({ error: 'GROUP_PERMISSIONS_UPDATE_FAILED' }); + } +}); + +app.post('/api/groups', requirePermission('user-groups-edit', 'full'), (req, res) => { + const { name, description } = req.body ?? {}; + try { + const group = createGroup({ name, description }); + res.status(201).json({ item: group }); + } catch (error) { + if (error.code === 'GROUP_NAME_REQUIRED') { + return res.status(400).json({ error: 'GROUP_NAME_REQUIRED' }); + } + if (error.code === 'GROUP_NAME_TAKEN') { + return res.status(409).json({ error: 'GROUP_NAME_TAKEN' }); + } + console.error('⚠️ [Groups] Anlegen der Benutzergruppe fehlgeschlagen:', error); + res.status(500).json({ error: 'GROUP_CREATE_FAILED' }); + } +}); + +app.put('/api/groups/:groupId', requirePermission('user-groups-edit', 'full'), (req, res) => { + const { groupId } = req.params; + const numericId = Number(groupId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + const { name, description, avatarColor } = req.body ?? {}; + + try { + const updatedGroup = updateGroupDetails(numericId, { name, description, avatarColor }); + res.json({ item: updatedGroup }); + } catch (error) { + if (error.code === 'INVALID_GROUP_ID') { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + if (error.code === 'GROUP_NOT_FOUND') { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + if (error.code === 'GROUP_NAME_REQUIRED') { + return res.status(400).json({ error: 'GROUP_NAME_REQUIRED' }); + } + if (error.code === 'GROUP_NAME_TAKEN') { + return res.status(409).json({ error: 'GROUP_NAME_TAKEN' }); + } + if (error.code === 'INVALID_AVATAR_COLOR') { + return res.status(400).json({ error: 'INVALID_AVATAR_COLOR' }); + } + if (error.code === 'GROUP_SUPERUSER_PROTECTED') { + return res.status(403).json({ error: 'GROUP_SUPERUSER_PROTECTED' }); + } + + console.error(`⚠️ [Groups] Aktualisierung der Gruppendaten fehlgeschlagen (${groupId}):`, error); + res.status(500).json({ error: 'GROUP_UPDATE_FAILED' }); + } +}); + +app.delete('/api/groups/:groupId', requirePermission('user-groups-delete', 'full'), (req, res) => { + const { groupId } = req.params; + const numericId = Number(groupId); + + if (!Number.isFinite(numericId) || numericId <= 0) { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + + try { + deleteGroup(numericId); + res.json({ success: true }); + } catch (error) { + if (error.code === 'INVALID_GROUP_ID') { + return res.status(400).json({ error: 'INVALID_GROUP_ID' }); + } + if (error.code === 'GROUP_NOT_FOUND') { + return res.status(404).json({ error: 'GROUP_NOT_FOUND' }); + } + if (error.code === 'GROUP_HAS_MEMBERS') { + return res.status(409).json({ error: 'GROUP_HAS_MEMBERS', memberCount: error.memberCount || 0 }); + } + if (error.code === 'GROUP_SUPERUSER_PROTECTED') { + return res.status(403).json({ error: 'GROUP_SUPERUSER_PROTECTED' }); + } + + console.error(`⚠️ [Groups] Löschen der Gruppe fehlgeschlagen (${groupId}):`, error); + res.status(500).json({ error: 'GROUP_DELETE_FAILED' }); + } +}); + +// Superuser Setup +app.get('/api/auth/superuser/status', (req, res) => { + const exists = hasSuperuser(); + const user = exists ? getSuperuserSummary() : null; + res.json({ exists, user }); +}); + +app.post('/api/auth/superuser/register', (req, res) => { + if (hasSuperuser()) { + return res.status(409).json({ error: 'SUPERUSER_EXISTS' }); + } + + const { username, email, password } = req.body || {}; + + if (!username || !email || !password) { + return res.status(400).json({ error: 'MISSING_FIELDS' }); + } + + try { + const user = registerSuperuser({ username, email, password }); + res.status(201).json({ user }); + } catch (error) { + switch (error.code) { + case 'USERNAME_REQUIRED': + return res.status(400).json({ error: 'USERNAME_REQUIRED' }); + case 'EMAIL_INVALID': + return res.status(400).json({ error: 'EMAIL_INVALID' }); + case 'PASSWORD_TOO_SHORT': + return res.status(400).json({ error: 'PASSWORD_TOO_SHORT' }); + case 'SUPERUSER_ALREADY_EXISTS': + return res.status(409).json({ error: 'SUPERUSER_EXISTS' }); + default: + console.error('⚠️ Fehler beim Registrieren des Superusers:', error); + return res.status(500).json({ error: 'INTERNAL_ERROR' }); + } + } +}); + +app.delete('/api/auth/superuser', requirePermission('maintenance-superuser-delete', 'full'), (req, res) => { + if (!hasSuperuser()) { + return res.status(404).json({ error: 'SUPERUSER_NOT_FOUND' }); + } + + try { + const result = removeSuperuser(); + res.json({ success: true, usersRemoved: result.usersRemoved, groupRemoved: result.groupRemoved }); + } catch (error) { + if (error.code === 'SUPERUSER_NOT_FOUND') { + return res.status(404).json({ error: 'SUPERUSER_NOT_FOUND' }); + } + console.error('⚠️ Fehler beim Löschen des Superusers:', error); + res.status(500).json({ error: 'INTERNAL_ERROR' }); + } +}); // Stacks abrufen app.get('/api/stacks', maintenanceGuard, async (req, res) => { @@ -1127,6 +2772,7 @@ app.get('/api/stacks', maintenanceGuard, async (req, res) => { console.warn(`⚠️ [API] GET /api/stacks: Doppelte Stack-Namen erkannt: ${duplicateNames.join(', ')}`); } + const currentSelfStackId = getSelfStackId(); const stacksWithStatus = await Promise.all( canonicalStacks.map(async (stack) => { try { @@ -1142,7 +2788,7 @@ app.get('/api/stacks', maintenanceGuard, async (req, res) => { redeploying: redeployPhase === REDEPLOY_PHASES.STARTED || redeployPhase === REDEPLOY_PHASES.QUEUED, redeployPhase, redeployQueued: redeployPhase === REDEPLOY_PHASES.QUEUED, - redeployDisabled: SELF_STACK_ID ? String(stack.Id) === SELF_STACK_ID : false, + redeployDisabled: currentSelfStackId ? String(stack.Id) === currentSelfStackId : false, duplicateName: duplicateNameSet.has(stack.Name) }; } catch (err) { @@ -1155,7 +2801,7 @@ app.get('/api/stacks', maintenanceGuard, async (req, res) => { redeploying: redeployPhase === REDEPLOY_PHASES.STARTED || redeployPhase === REDEPLOY_PHASES.QUEUED, redeployPhase, redeployQueued: redeployPhase === REDEPLOY_PHASES.QUEUED, - redeployDisabled: SELF_STACK_ID ? String(stack.Id) === SELF_STACK_ID : false, + redeployDisabled: currentSelfStackId ? String(stack.Id) === currentSelfStackId : false, duplicateName: duplicateNameSet.has(stack.Name) }; } @@ -1167,11 +2813,14 @@ app.get('/api/stacks', maintenanceGuard, async (req, res) => { res.json(stacksWithStatus); } catch (err) { console.error(`❌ Fehler beim Abrufen der Stacks:`, err.message); + if (err.message === 'PORTAINER_URL_NOT_CONFIGURED') { + return res.status(503).json({ error: 'PORTAINER_URL_NOT_CONFIGURED' }); + } res.status(500).json({ error: err.message }); } }); -app.get('/api/maintenance/portainer-status', async (req, res) => { +app.get('/api/maintenance/portainer-status', requirePermission('maintenance-portainer', 'read'), async (req, res) => { console.log("🧭 [Maintenance] GET /api/maintenance/portainer-status: Prüfung gestartet"); try { const payload = await fetchPortainerStatusSummary(); @@ -1179,11 +2828,14 @@ app.get('/api/maintenance/portainer-status', async (req, res) => { } catch (err) { const message = err.response?.data?.message || err.message || 'Unbekannter Fehler'; console.error(`❌ [Maintenance] Fehler beim Prüfen des Portainer-Status: ${message}`); + if (message === 'PORTAINER_URL_NOT_CONFIGURED') { + return res.status(503).json({ error: 'PORTAINER_URL_NOT_CONFIGURED' }); + } res.status(500).json({ error: message }); } }); -app.post('/api/maintenance/mode', (req, res) => { +app.post('/api/maintenance/mode', requirePermission('maintenance-access', 'full'), (req, res) => { try { const { active, message } = req.body ?? {}; const normalizedMessage = typeof message === 'string' && message.trim() ? message.trim() : null; @@ -1202,7 +2854,7 @@ app.post('/api/maintenance/mode', (req, res) => { } }); -app.get('/api/maintenance/config', (req, res) => { +app.get('/api/maintenance/config', requirePermission('maintenance-server-manage', 'read'), (req, res) => { const custom = getCustomPortainerScript(); const effective = getEffectivePortainerScript(); const ssh = getPortainerSshConfig(); @@ -1228,7 +2880,7 @@ app.get('/api/maintenance/config', (req, res) => { }); }); -app.put('/api/maintenance/ssh-config', (req, res) => { +app.put('/api/maintenance/ssh-config', requirePermission('maintenance-ssh-update', 'full'), (req, res) => { try { const config = savePortainerSshConfig(req.body || {}); res.json({ @@ -1247,7 +2899,7 @@ app.put('/api/maintenance/ssh-config', (req, res) => { } }); -app.delete('/api/maintenance/ssh-config', (req, res) => { +app.delete('/api/maintenance/ssh-config', requirePermission('maintenance-ssh-update', 'full'), (req, res) => { const config = deletePortainerSshConfig(); res.json({ success: true, @@ -1261,7 +2913,7 @@ app.delete('/api/maintenance/ssh-config', (req, res) => { }); }); -app.post('/api/maintenance/test-ssh', async (req, res) => { +app.post('/api/maintenance/test-ssh', requirePermission('maintenance-ssh-update', 'full'), async (req, res) => { try { const override = req.body && Object.keys(req.body).length ? req.body : null; const result = await testSshConnection(override); @@ -1272,7 +2924,7 @@ app.post('/api/maintenance/test-ssh', async (req, res) => { } }); -app.put('/api/maintenance/update-script', (req, res) => { +app.put('/api/maintenance/update-script', requirePermission('maintenance-ssh-update', 'full'), (req, res) => { if (portainerUpdateState.running) { return res.status(409).json({ error: 'Aktualisierung läuft. Skript kann derzeit nicht geändert werden.', @@ -1303,7 +2955,7 @@ app.put('/api/maintenance/update-script', (req, res) => { }); }); -app.delete('/api/maintenance/update-script', (req, res) => { +app.delete('/api/maintenance/update-script', requirePermission('maintenance-ssh-update', 'full'), (req, res) => { if (portainerUpdateState.running) { return res.status(409).json({ error: 'Aktualisierung läuft. Skript kann derzeit nicht geändert werden.', @@ -1327,14 +2979,14 @@ app.delete('/api/maintenance/update-script', (req, res) => { }); }); -app.get('/api/maintenance/update-status', (req, res) => { +app.get('/api/maintenance/update-status', requirePermission('maintenance-update', 'read'), (req, res) => { res.json({ maintenance: getMaintenanceState(), update: getPortainerUpdateStatus() }); }); -app.post('/api/maintenance/portainer-update', async (req, res) => { +app.post('/api/maintenance/portainer-update', requirePermission('maintenance-update', 'full'), async (req, res) => { if (portainerUpdateState.running) { return res.status(409).json({ error: 'Ein Portainer-Update läuft bereits.', @@ -1400,7 +3052,11 @@ app.post('/api/maintenance/portainer-update', async (req, res) => { }); }); -app.get('/api/maintenance/duplicates', maintenanceGuard, async (req, res) => { +app.get( + '/api/maintenance/duplicates', + maintenanceGuard, + requirePermission('maintenance-duplicates', 'read'), + async (req, res) => { console.log("🧹 [Maintenance] GET /api/maintenance/duplicates: Abruf gestartet"); try { const { duplicates } = await loadStackCollections(); @@ -1435,7 +3091,11 @@ app.get('/api/maintenance/duplicates', maintenanceGuard, async (req, res) => { } }); -app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, res) => { +app.post( + '/api/maintenance/duplicates/cleanup', + maintenanceGuard, + requirePermission('maintenance-duplicates', 'full'), + async (req, res) => { const canonicalId = req.body?.canonicalId; const duplicateIdsInput = Array.isArray(req.body?.duplicateIds) ? req.body.duplicateIds : []; const duplicateIds = duplicateIdsInput @@ -1467,13 +3127,15 @@ app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, re return res.status(400).json({ error: 'Keine passenden Duplikate gefunden' }); } - logRedeployEvent({ + logStackEvent({ stackId: target.canonical.Id, stackName: target.canonical.Name, status: 'started', message: `Bereinigung doppelter Stacks gestartet (${duplicatesToDelete.length} Einträge)`, - endpoint: target.canonical.EndpointId, - redeployType: REDEPLOY_TYPES.MAINTENANCE + redeployType: REDEPLOY_TYPES.MAINTENANCE, + metadata: { + duplicateIds: duplicateIds + } }); const results = []; @@ -1488,7 +3150,6 @@ app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, re results.push({ id: stack.Id, name: stack.Name, - endpointId: stack.EndpointId, status: 'deleted' }); } catch (err) { @@ -1498,7 +3159,6 @@ app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, re results.push({ id: stack.Id, name: stack.Name, - endpointId: stack.EndpointId, status: 'error', message }); @@ -1507,41 +3167,43 @@ app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, re if (errors.length) { const failedIds = errors.map((entry) => entry.id).join(', '); - logRedeployEvent({ + logStackEvent({ stackId: target.canonical.Id, stackName: target.canonical.Name, status: 'error', message: `Bereinigung fehlgeschlagen für IDs: ${failedIds}`, - endpoint: target.canonical.EndpointId, - redeployType: REDEPLOY_TYPES.MAINTENANCE + redeployType: REDEPLOY_TYPES.MAINTENANCE, + metadata: { + duplicateIds: duplicateIds + } }); return res.status(500).json({ success: false, canonical: { id: target.canonical.Id, - name: target.canonical.Name, - endpointId: target.canonical.EndpointId + name: target.canonical.Name }, results }); } - logRedeployEvent({ + logStackEvent({ stackId: target.canonical.Id, stackName: target.canonical.Name, status: 'success', message: `Bereinigung abgeschlossen. Entfernte IDs: ${results.map((entry) => entry.id).join(', ')}`, - endpoint: target.canonical.EndpointId, - redeployType: REDEPLOY_TYPES.MAINTENANCE + redeployType: REDEPLOY_TYPES.MAINTENANCE, + metadata: { + removedDuplicates: results.filter((entry) => entry.status === 'deleted').map((entry) => entry.id) + } }); res.json({ success: true, canonical: { id: target.canonical.Id, - name: target.canonical.Name, - endpointId: target.canonical.EndpointId + name: target.canonical.Name }, removed: results.length, results @@ -1553,8 +3215,8 @@ app.post('/api/maintenance/duplicates/cleanup', maintenanceGuard, async (req, re } }); -// Redeploy-Logs abrufen -app.get('/api/logs', (req, res) => { +// Event-Logs abrufen +app.get('/api/logs', requirePermission('logs-access', 'read'), (req, res) => { const perPageParam = req.query.perPage ?? req.query.limit; const perPage = perPageParam === 'all' ? 'all' : Math.min(parseInt(perPageParam, 10) || 50, 500); const page = Math.max(parseInt(req.query.page, 10) || 1, 1); @@ -1562,25 +3224,36 @@ app.get('/api/logs', (req, res) => { const limit = perPage === 'all' ? undefined : perPage; const offset = perPage === 'all' ? 0 : (page - 1) * perPage; - const { whereClause, params } = buildLogFilter(req.query); + const { whereClause, params } = buildEventLogFilter(req.query); const baseQuery = ` SELECT id, timestamp, - stack_id AS stackId, - stack_name AS stackName, + category, + event_type AS eventType, + action, status, + severity, + entity_type AS entityType, + entity_id AS entityId, + entity_name AS entityName, + actor_type AS actorType, + actor_id AS actorId, + actor_name AS actorName, + source, + context_type AS contextType, + context_id AS contextId, + context_label AS contextLabel, message, - endpoint, - redeploy_type AS redeployType - FROM redeploy_logs + metadata + FROM event_logs ${whereClause} ORDER BY datetime(timestamp) DESC `; const countQuery = ` SELECT COUNT(*) as total - FROM redeploy_logs + FROM event_logs ${whereClause} `; @@ -1595,7 +3268,27 @@ app.get('/api/logs', (req, res) => { try { const stmt = db.prepare(query); - const logs = stmt.all(params); + const rawLogs = stmt.all(params); + const logs = rawLogs.map((row) => { + const metadata = parseJsonColumn(row.metadata); + const legacyStack = row.entityType === 'stack' ? (row.entityId ?? null) : null; + const legacyStackName = row.entityType === 'stack' ? (row.entityName ?? row.entityId ?? null) : null; + const serverContext = row.contextType === 'server' + ? (row.contextId ?? null) + : null; + + return { + ...row, + entityId: row.entityId ?? null, + actorId: row.actorId ?? null, + contextId: row.contextId ?? null, + metadata, + stackId: legacyStack, + stackName: legacyStackName, + redeployType: row.eventType ?? null, + server: serverContext + }; + }); const total = db.prepare(countQuery).get(params)?.total ?? logs.length; res.json({ @@ -1605,61 +3298,58 @@ app.get('/api/logs', (req, res) => { perPage: perPage === 'all' ? 'all' : limit }); } catch (err) { - console.error('❌ Fehler beim Abrufen der Redeploy-Logs:', err.message); - if (err.message.includes('no such table')) { - return res.status(500).json({ error: 'redeploy_logs table nicht gefunden. Bitte Migration ausführen.' }); - } - res.status(500).json({ error: 'Fehler beim Abrufen der Redeploy-Logs' }); + console.error('❌ Fehler beim Abrufen der Event-Logs:', err.message); + res.status(500).json({ error: 'Fehler beim Abrufen der Logs' }); } }); -app.delete('/api/logs/:id', (req, res) => { +app.delete('/api/logs/:id', requirePermission('logs-delete', 'full'), (req, res) => { const id = Number(req.params.id); if (Number.isNaN(id)) { return res.status(400).json({ error: 'Ungültige ID' }); } try { - const changes = deleteLogById(id); + const changes = deleteEventLogById(id); if (!changes) { return res.status(404).json({ error: 'Eintrag nicht gefunden' }); } res.json({ success: true, deleted: changes }); } catch (err) { - console.error('❌ Fehler beim Löschen des Redeploy-Logs:', err.message); - res.status(500).json({ error: 'Fehler beim Löschen des Redeploy-Logs' }); + console.error('❌ Fehler beim Löschen des Event-Logs:', err.message); + res.status(500).json({ error: 'Fehler beim Löschen des Logs' }); } }); -app.delete('/api/logs', (req, res) => { +app.delete('/api/logs', requirePermission('logs-delete', 'full'), (req, res) => { try { - const deleted = deleteLogsByFilters(req.query); + const deleted = deleteEventLogsByFilters(req.query); res.json({ success: true, deleted }); } catch (err) { - console.error('❌ Fehler beim Löschen der Redeploy-Logs:', err.message); - res.status(500).json({ error: 'Fehler beim Löschen der Redeploy-Logs' }); + console.error('❌ Fehler beim Löschen der Event-Logs:', err.message); + res.status(500).json({ error: 'Fehler beim Löschen der Logs' }); } }); -app.get('/api/logs/export', (req, res) => { +app.get('/api/logs/export', requirePermission('logs-export', 'full'), (req, res) => { const format = (req.query.format || 'txt').toLowerCase(); if (!['txt', 'sql'].includes(format)) { return res.status(400).json({ error: 'Ungültiges Export-Format' }); } try { - const payload = exportLogsByFilters(req.query, format); + const payload = exportEventLogsByFilters(req.query, format); res.setHeader('Content-Type', payload.contentType); res.setHeader('Content-Disposition', `attachment; filename="${payload.filename}"`); res.send(payload.content); } catch (err) { - console.error('❌ Fehler beim Export der Redeploy-Logs:', err.message); - res.status(500).json({ error: 'Fehler beim Export der Redeploy-Logs' }); + console.error('❌ Fehler beim Export der Event-Logs:', err.message); + res.status(500).json({ error: 'Fehler beim Export der Logs' }); } }); // Einzel-Redeploy -app.put('/api/stacks/:id/redeploy', async (req, res) => { +app.put('/api/stacks/:id/redeploy', requirePermission('stacks-redeploy-single', 'full'), async (req, res) => { const { id } = req.params; console.log(`🔄 PUT /api/stacks/${id}/redeploy: Redeploy gestartet`); @@ -1675,12 +3365,18 @@ app.put('/api/stacks/:id/redeploy', async (req, res) => { }); // Redeploy ALL -app.put('/api/stacks/redeploy-all', maintenanceGuard, async (req, res) => { +app.put( + '/api/stacks/redeploy-all', + maintenanceGuard, + requirePermission('stacks-redeploy-all', 'full'), + async (req, res) => { console.log(`🚀 PUT /api/stacks/redeploy-all: Redeploy ALL gestartet`); + const serverContextId = getActiveServerUrl() || null; + try { const stacksRes = await axiosInstance.get('/api/stacks'); - const filteredStacks = stacksRes.data.filter(stack => stack.EndpointId === ENDPOINT_ID); + const filteredStacks = Array.isArray(stacksRes.data) ? stacksRes.data : []; console.log("📦 Redeploy ALL für folgende Stacks:"); filteredStacks.forEach(s => console.log(` - ${s.Name}`)); @@ -1695,13 +3391,21 @@ app.put('/api/stacks/redeploy-all', maintenanceGuard, async (req, res) => { const stackSummaryList = eligibleStacks.map((stack) => `${stack.Name} (${stack.Id})`); const stackSummary = stackSummaryList.length ? stackSummaryList.join(', ') : 'keine Stacks'; - logRedeployEvent({ - stackId: '---', - stackName: '---', - status: 'started', - message: `Redeploy ALL gestartet für: ${stackSummary}`, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.ALL + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.ALL, + action: 'redeploy-alle', + status: 'gestartet', + entityType: 'bulk-operation', + entityId: 'redeploy-alle', + entityName: 'Redeploy ALLE', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, + message: `Redeploy ALLE gestartet für: ${stackSummary}`, + metadata: { + stacks: stackSummaryList + }, + source: 'system' }); if (!eligibleStacks.length) { @@ -1726,33 +3430,50 @@ app.put('/api/stacks/redeploy-all', maintenanceGuard, async (req, res) => { } } - logRedeployEvent({ - stackId: '---', - stackName: '---', - status: 'success', - message: 'Redeploy ALL abgeschlossen', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.ALL + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.ALL, + action: 'redeploy-alle', + status: 'erfolgreich', + entityType: 'bulk-operation', + entityId: 'redeploy-alle', + entityName: 'Redeploy ALLE', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, + message: 'Redeploy ALLE abgeschlossen', + metadata: { + processedStacks: stackSummaryList + }, + source: 'system' }); res.json({ success: true, message: 'Redeploy ALL abgeschlossen' }); } catch (err) { const message = err.response?.data?.message || err.message; - logRedeployEvent({ - stackId: '---', - stackName: '---', + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.ALL, + action: 'redeploy-alle', status: 'error', + entityType: 'bulk-operation', + entityId: 'redeploy-alle', + entityName: 'Redeploy ALLE', + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.ALL + source: 'system' }); - console.error('❌ Fehler bei Redeploy ALL:', message); + console.error('❌ Fehler bei Redeploy ALLE:', message); res.status(500).json({ error: message }); } }); // Redeploy selection -app.put('/api/stacks/redeploy-selection', maintenanceGuard, async (req, res) => { +app.put( + '/api/stacks/redeploy-selection', + maintenanceGuard, + requirePermission('stacks-redeploy-selection', 'full'), + async (req, res) => { const { stackIds } = req.body || {}; const totalCount = Array.isArray(stackIds) ? stackIds.length : 0; console.log(`🚀 PUT /api/stacks/redeploy-selection: Redeploy Auswahl gestartet (${totalCount} Stacks)`); @@ -1761,6 +3482,8 @@ app.put('/api/stacks/redeploy-selection', maintenanceGuard, async (req, res) => return res.status(400).json({ error: 'stackIds muss eine nicht leere Array sein' }); } + const serverContextId = getActiveServerUrl() || null; + try { const normalizedIds = stackIds.map((id) => String(id)); const { filteredStacks } = await loadStackCollections(); @@ -1787,23 +3510,40 @@ app.put('/api/stacks/redeploy-selection', maintenanceGuard, async (req, res) => const summaryList = eligibleStacks.map((stack) => `${stack.Name} (${stack.Id})`); const summaryText = summaryList.length ? summaryList.join(', ') : 'keine Stacks'; - logRedeployEvent({ - stackId: stackIds.join(','), - stackName: `Auswahl (${stackIds.length})`, - status: 'started', + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.SELECTION, + action: 'redeploy-auswahl', + status: 'gestartet', + entityType: 'bulk-operation', + entityId: 'redeploy-auswahl', + entityName: `Redeploy Auswahl (${stackIds.length})`, + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: `Redeploy Auswahl gestartet für: ${summaryText}`, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.SELECTION + metadata: { + requestedStackIds: normalizedIds + }, + source: 'system' }); if (!eligibleStacks.length) { - logRedeployEvent({ - stackId: stackIds.join(','), - stackName: `Auswahl (${stackIds.length})`, - status: 'success', + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.SELECTION, + action: 'redeploy-auswahl', + status: 'erfolgreich', + entityType: 'bulk-operation', + entityId: 'redeploy-auswahl', + entityName: `Redeploy Auswahl (${stackIds.length})`, + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: 'Redeploy Auswahl übersprungen: keine veralteten Stacks', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.SELECTION + metadata: { + requestedStackIds: normalizedIds, + skipped: true + }, + source: 'system' }); return res.json({ success: true, message: 'Keine veralteten Stacks in der Auswahl' }); } @@ -1825,25 +3565,42 @@ app.put('/api/stacks/redeploy-selection', maintenanceGuard, async (req, res) => } } - logRedeployEvent({ - stackId: stackIds.join(','), - stackName: `Auswahl (${stackIds.length})`, - status: 'success', + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.SELECTION, + action: 'redeploy-auswahl', + status: 'erfolgreich', + entityType: 'bulk-operation', + entityId: 'redeploy-auswahl', + entityName: `Redeploy Auswahl (${stackIds.length})`, + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message: 'Redeploy Auswahl abgeschlossen', - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.SELECTION + metadata: { + processedStackIds: eligibleStacks.map((stack) => String(stack.Id)) + }, + source: 'system' }); res.json({ success: true, message: 'Redeploy Auswahl abgeschlossen' }); } catch (err) { const message = err.response?.data?.message || err.message; - logRedeployEvent({ - stackId: Array.isArray(stackIds) ? stackIds.join(',') : String(stackIds ?? ''), - stackName: `Auswahl (${Array.isArray(stackIds) ? stackIds.length : 0})`, - status: 'error', + const normalized = Array.isArray(stackIds) ? stackIds.map((id) => String(id)) : []; + logEvent({ + category: 'stack', + eventType: REDEPLOY_TYPES.SELECTION, + action: 'redeploy-auswahl', + status: 'fehler', + entityType: 'bulk-operation', + entityId: 'redeploy-auswahl', + entityName: `Redeploy Auswahl (${Array.isArray(stackIds) ? stackIds.length : 0})`, + contextType: serverContextId ? 'server' : null, + contextId: serverContextId, message, - endpoint: ENDPOINT_ID, - redeployType: REDEPLOY_TYPES.SELECTION + metadata: { + requestedStackIds: normalized + }, + source: 'system' }); console.error('❌ Fehler bei Redeploy Auswahl:', message); res.status(500).json({ error: message }); @@ -1853,4 +3610,3 @@ app.put('/api/stacks/redeploy-selection', maintenanceGuard, async (req, res) => server.listen(PORT, () => { console.log(`🚀 Server läuft auf Port ${PORT}`); }); - diff --git a/backend/logging/eventLogs.js b/backend/logging/eventLogs.js new file mode 100644 index 0000000..b252845 --- /dev/null +++ b/backend/logging/eventLogs.js @@ -0,0 +1,331 @@ +import { db } from '../db/index.js'; + +const valueToArray = (value) => { + if (value === undefined || value === null) return []; + const base = Array.isArray(value) ? value : [value]; + return base + .flatMap((entry) => String(entry).split(',')) + .map((entry) => entry.trim()) + .filter((entry) => entry.length > 0); +}; + +const singleValue = (value) => { + if (value === undefined || value === null) return undefined; + return Array.isArray(value) ? value[0] : value; +}; + +const serializeJson = (value) => { + if (value === undefined || value === null || value === '') return null; + if (typeof value === 'string') return value; + try { + return JSON.stringify(value); + } catch (err) { + console.error('⚠️ Konnte JSON nicht serialisieren:', err.message); + return JSON.stringify({ serializationError: true }); + } +}; + +const appendInFilter = (filters, params, values, column, prefix) => { + if (!values.length) return; + const placeholders = values.map((_, idx) => { + const key = `${prefix}${idx}`; + params[key] = values[idx]; + return `@${key}`; + }); + filters.push(`${column} IN (${placeholders.join(', ')})`); +}; + +export function buildEventLogFilter(queryParams = {}) { + const filters = []; + const params = {}; + + const ids = valueToArray(queryParams.ids ?? queryParams.id) + .map((entry) => Number(entry)) + .filter((value) => Number.isFinite(value)); + if (ids.length) { + appendInFilter(filters, params, ids, 'id', 'id'); + } + + const categories = valueToArray(queryParams.categories ?? queryParams.category); + appendInFilter(filters, params, categories, 'category', 'category'); + + const statuses = valueToArray(queryParams.statuses ?? queryParams.status); + appendInFilter(filters, params, statuses, 'status', 'status'); + + const actions = valueToArray(queryParams.actions ?? queryParams.action); + appendInFilter(filters, params, actions, 'action', 'action'); + + const eventTypes = [ + ...valueToArray(queryParams.eventTypes ?? queryParams.eventType), + ...valueToArray(queryParams.redeployTypes ?? queryParams.redeployType) + ]; + if (eventTypes.length) { + const unique = Array.from(new Set(eventTypes)); + appendInFilter(filters, params, unique, 'event_type', 'eventType'); + } + + const severities = valueToArray(queryParams.severities ?? queryParams.severity); + appendInFilter(filters, params, severities, 'severity', 'severity'); + + const entityTypes = valueToArray(queryParams.entityTypes ?? queryParams.entityType); + appendInFilter(filters, params, entityTypes, 'entity_type', 'entityType'); + + const entityIds = valueToArray(queryParams.entityIds ?? queryParams.entityId); + appendInFilter(filters, params, entityIds, 'entity_id', 'entityId'); + + const actorTypes = valueToArray(queryParams.actorTypes ?? queryParams.actorType); + appendInFilter(filters, params, actorTypes, 'actor_type', 'actorType'); + + const actorIds = valueToArray(queryParams.actorIds ?? queryParams.actorId); + appendInFilter(filters, params, actorIds, 'actor_id', 'actorId'); + + const sources = valueToArray(queryParams.sources ?? queryParams.source); + appendInFilter(filters, params, sources, 'source', 'source'); + + const contextTypes = valueToArray(queryParams.contextTypes ?? queryParams.contextType); + appendInFilter(filters, params, contextTypes, 'context_type', 'contextType'); + + const contextIds = valueToArray(queryParams.contextIds ?? queryParams.contextId); + appendInFilter(filters, params, contextIds, 'context_id', 'contextId'); + + const legacyStackIds = valueToArray(queryParams.stackIds ?? queryParams.stackId); + if (legacyStackIds.length) { + const placeholders = legacyStackIds.map((_, idx) => { + const key = `legacyStackId${idx}`; + params[key] = legacyStackIds[idx]; + return `@${key}`; + }); + filters.push(`(entity_type = 'stack' AND entity_id IN (${placeholders.join(', ')}))`); + } + + const serverContexts = valueToArray(queryParams.servers ?? queryParams.server); + if (serverContexts.length) { + const placeholders = serverContexts.map((_, idx) => { + const key = `serverContext${idx}`; + params[key] = serverContexts[idx]; + return `@${key}`; + }); + filters.push(`(context_type = 'server' AND context_id IN (${placeholders.join(', ')}))`); + } + + const messageQuery = singleValue(queryParams.message ?? queryParams.text); + if (messageQuery && String(messageQuery).trim()) { + filters.push('message LIKE @message'); + params.message = `%${String(messageQuery).trim()}%`; + } + + const search = singleValue(queryParams.search ?? queryParams.q); + if (search && String(search).trim()) { + filters.push('(message LIKE @search OR entity_name LIKE @search OR metadata LIKE @search)'); + params.search = `%${String(search).trim()}%`; + } + + const from = singleValue(queryParams.from ?? queryParams.start); + if (from) { + filters.push('timestamp >= @from'); + params.from = from; + } + + const to = singleValue(queryParams.to ?? queryParams.end); + if (to) { + filters.push('timestamp <= @to'); + params.to = to; + } + + return { + whereClause: filters.length ? `WHERE ${filters.join(' AND ')}` : '', + params + }; +} + +const insertEventLogStmt = db.prepare(` + INSERT INTO event_logs ( + timestamp, + category, + event_type, + action, + status, + severity, + entity_type, + entity_id, + entity_name, + actor_type, + actor_id, + actor_name, + source, + context_type, + context_id, + context_label, + message, + metadata + ) + VALUES ( + COALESCE(@timestamp, CURRENT_TIMESTAMP), + @category, + @eventType, + @action, + @status, + @severity, + @entityType, + @entityId, + @entityName, + @actorType, + @actorId, + @actorName, + @source, + @contextType, + @contextId, + @contextLabel, + @message, + @metadata + ) +`); + +export function logEvent(event = {}) { + if (!event.category) { + console.error('⚠️ logEvent wurde ohne Kategorie aufgerufen'); + return; + } + + try { + insertEventLogStmt.run({ + timestamp: event.timestamp ?? null, + category: event.category, + eventType: event.eventType ?? null, + action: event.action ?? null, + status: event.status ?? null, + severity: event.severity ?? null, + entityType: event.entityType ?? null, + entityId: event.entityId !== undefined && event.entityId !== null ? String(event.entityId) : null, + entityName: event.entityName ?? null, + actorType: event.actorType ?? null, + actorId: event.actorId !== undefined && event.actorId !== null ? String(event.actorId) : null, + actorName: event.actorName ?? null, + source: event.source ?? null, + contextType: event.contextType ?? null, + contextId: event.contextId !== undefined && event.contextId !== null ? String(event.contextId) : null, + contextLabel: event.contextLabel ?? null, + message: event.message ?? null, + metadata: serializeJson(event.metadata) + }); + } catch (err) { + console.error('❌ Fehler beim Speichern des Event-Logs:', err.message); + } +} + +export function deleteEventLogById(id) { + const stmt = db.prepare('DELETE FROM event_logs WHERE id = ?'); + const info = stmt.run(id); + return info.changes || 0; +} + +export function deleteEventLogsByFilters(queryParams = {}) { + const { whereClause, params } = buildEventLogFilter(queryParams); + const stmt = db.prepare(`DELETE FROM event_logs ${whereClause}`); + const info = stmt.run(params); + return info.changes || 0; +} + +export function exportEventLogsByFilters(queryParams = {}, format = 'txt') { + const { whereClause, params } = buildEventLogFilter(queryParams); + const rows = db.prepare(` + SELECT + id, + timestamp, + category, + event_type AS eventType, + action, + status, + severity, + entity_type AS entityType, + entity_id AS entityId, + entity_name AS entityName, + actor_type AS actorType, + actor_id AS actorId, + actor_name AS actorName, + source, + context_type AS contextType, + context_id AS contextId, + context_label AS contextLabel, + message, + metadata + FROM event_logs + ${whereClause} + ORDER BY datetime(timestamp) DESC + `).all(params); + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + + if (format === 'sql') { + const columns = [ + 'id', + 'timestamp', + 'category', + 'event_type', + 'action', + 'status', + 'severity', + 'entity_type', + 'entity_id', + 'entity_name', + 'actor_type', + 'actor_id', + 'actor_name', + 'source', + 'context_type', + 'context_id', + 'context_label', + 'message', + 'metadata' + ]; + + const statements = rows.map((row) => { + const values = columns.map((column) => { + const key = { + event_type: 'eventType', + entity_type: 'entityType', + entity_id: 'entityId', + entity_name: 'entityName', + actor_type: 'actorType', + actor_id: 'actorId', + actor_name: 'actorName', + context_type: 'contextType', + context_id: 'contextId', + context_label: 'contextLabel' + }[column] ?? column; + const value = row[key]; + if (value === null || value === undefined) return 'NULL'; + return `'${String(value).replace(/'/g, "''")}'`; + }); + return `INSERT INTO event_logs (${columns.join(', ')}) VALUES (${values.join(', ')});`; + }); + + return { + filename: `event-logs-${timestamp}.sql`, + contentType: 'application/sql; charset=utf-8', + content: statements.join('\n') + }; + } + + const lines = rows.map((row) => { + const parts = [ + `[${row.id}]`, + row.timestamp, + `Kategorie: ${row.category}`, + row.eventType ? `Typ: ${row.eventType}` : null, + row.action ? `Aktion: ${row.action}` : null, + row.status ? `Status: ${row.status}` : null, + row.entityName ? `Entität: ${row.entityName}${row.entityId ? ` (#${row.entityId})` : ''}` : row.entityId ? `Entität-ID: ${row.entityId}` : null, + row.contextType ? `Kontext: ${row.contextType}${row.contextId ? ` (#${row.contextId}${row.contextLabel ? ` – ${row.contextLabel}` : ''})` : ''}` : null, + row.message ? `Nachricht: ${row.message}` : null, + row.metadata ? `Metadaten: ${row.metadata}` : null + ].filter(Boolean); + return parts.join(' | '); + }); + + return { + filename: `event-logs-${timestamp}.txt`, + contentType: 'text/plain; charset=utf-8', + content: lines.join('\n') + }; +} diff --git a/backend/maintenance/state.js b/backend/maintenance/state.js index 54bc0d0..fe00b91 100644 --- a/backend/maintenance/state.js +++ b/backend/maintenance/state.js @@ -1,4 +1,5 @@ import { getJsonSetting, setJsonSetting } from '../db/settings.js'; +import { logEvent } from '../logging/eventLogs.js'; const MAINTENANCE_KEY = 'maintenance_mode'; @@ -44,6 +45,19 @@ export function isMaintenanceModeActive() { } export function activateMaintenanceMode({ message = null, extra = null } = {}) { + logEvent({ + category: 'wartung', + eventType: 'Wartungsmodus', + action: 'aktivieren', + status: 'gestartet', + entityType: 'system', + entityId: 'wartung', + entityName: 'StackPulse Wartung', + contextType: 'System', + contextId: 'System', + message: 'Wartungsmodus aktiviert', + source: 'system' + }); const now = new Date().toISOString(); return persistState({ active: true, @@ -54,6 +68,19 @@ export function activateMaintenanceMode({ message = null, extra = null } = {}) { } export function deactivateMaintenanceMode({ message = null } = {}) { + logEvent({ + category: 'wartung', + eventType: 'wartungsmodus', + action: 'deaktivieren', + status: 'erfolgreich', + entityType: 'system', + entityId: 'wartung', + entityName: 'StackPulse Wartung', + contextType: 'System', + contextId: 'System', + message: 'Wartungsmodus deaktiviert', + source: 'system' + }); return persistState({ active: false, message, diff --git a/backend/package-lock.json b/backend/package-lock.json index 8d0c8a9..985d1fc 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -8,6 +8,7 @@ "name": "backend", "version": "1.0.0", "dependencies": { + "@scure/bip39": "^2.0.0", "axios": "^1.7.0", "better-sqlite3": "^9.6.0", "dockerode": "^4.0.7", @@ -59,6 +60,17 @@ "url": "https://opencollective.com/js-sdsl" } }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -113,6 +125,26 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@scure/base": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz", + "integrity": "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-2.0.1.tgz", + "integrity": "sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==", + "dependencies": { + "@noble/hashes": "2.0.1", + "@scure/base": "2.0.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", diff --git a/backend/package.json b/backend/package.json index 290f8ff..6be6190 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,7 +4,7 @@ "type": "module", "scripts": { "start": "node index.js", - "migrate": "node db/migrate.js" + "migrate": "node db/ensure.js" }, "dependencies": { "axios": "^1.7.0", @@ -12,6 +12,7 @@ "dockerode": "^4.0.7", "dotenv": "^16.0.0", "express": "^4.18.0", - "socket.io": "^4.8.1" + "socket.io": "^4.8.1", + "@scure/bip39": "^2.0.0" } } diff --git a/backend/permissions/index.js b/backend/permissions/index.js new file mode 100644 index 0000000..c448b1e --- /dev/null +++ b/backend/permissions/index.js @@ -0,0 +1,375 @@ +import { db } from '../db/index.js'; + +const LEVEL_PRIORITY = { + none: 0, + read: 1, + full: 2 +}; + +const selectSections = db.prepare(` + SELECT id, key, title, sort_order, has_navigation_flag + FROM permission_sections + ORDER BY sort_order ASC, id ASC +`); + +const selectGroups = db.prepare(` + SELECT id, section_id, key, title, sort_order + FROM permission_groups + ORDER BY section_id ASC, sort_order ASC, id ASC +`); + +const selectItems = db.prepare(` + SELECT + id, + section_id, + group_id, + key, + label, + sort_order, + default_level, + available_levels, + is_required + FROM permission_items + ORDER BY section_id ASC, COALESCE(group_id, 0) ASC, sort_order ASC, id ASC +`); + +const selectDependencies = db.prepare(` + SELECT permission_id, depends_on_permission_id, required_level + FROM permission_dependencies +`); + +const selectPermissionItemsForMap = db.prepare(` + SELECT id, key, available_levels, default_level + FROM permission_items +`); + +const selectGroupPermissionValues = db.prepare(` + SELECT gp.permission_id, gp.level, gp.effective_level, pi.key + FROM group_permission_values gp + JOIN permission_items pi ON pi.id = gp.permission_id + WHERE gp.group_id = ? +`); + +const deleteGroupPermissionValuesStmt = db.prepare(` + DELETE FROM group_permission_values + WHERE group_id = ? +`); + +const insertGroupPermissionValueStmt = db.prepare(` + INSERT INTO group_permission_values (group_id, permission_id, level, effective_level, created_at, updated_at) + VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +`); + +const parseAvailableLevels = (raw) => { + if (typeof raw !== 'string' || !raw.trim()) { + return ['full', 'read', 'none']; + } + try { + const parsed = JSON.parse(raw); + if (Array.isArray(parsed) && parsed.every((entry) => typeof entry === 'string')) { + return parsed; + } + } catch (error) { + console.warn('⚠️ Konnte available_levels nicht parsen:', error.message); + } + return ['full', 'read', 'none']; +}; + +const getLevelPriority = (level) => { + if (!level) return 0; + return LEVEL_PRIORITY[level] ?? 0; +}; + +let cachedPermissionItems = null; + +const getPermissionItems = () => { + if (!cachedPermissionItems) { + cachedPermissionItems = selectPermissionItemsForMap.all(); + } + return cachedPermissionItems; +}; + +const resetPermissionItemsCache = () => { + cachedPermissionItems = null; +}; + +export function getPermissionStructure() { + const sections = selectSections.all(); + const groups = selectGroups.all(); + const items = selectItems.all(); + const dependencies = selectDependencies.all(); + + const itemIdToKey = new Map(items.map((item) => [item.id, item.key])); + + const dependenciesByItemId = new Map(); + dependencies.forEach((dependency) => { + const list = dependenciesByItemId.get(dependency.permission_id) || []; + list.push(dependency); + dependenciesByItemId.set(dependency.permission_id, list); + }); + + const groupsBySectionId = new Map(); + groups.forEach((group) => { + const list = groupsBySectionId.get(group.section_id) || []; + list.push(group); + groupsBySectionId.set(group.section_id, list); + }); + + const itemsBySectionId = new Map(); + const itemsByGroupId = new Map(); + + items.forEach((item) => { + if (item.group_id) { + const list = itemsByGroupId.get(item.group_id) || []; + list.push(item); + itemsByGroupId.set(item.group_id, list); + } else { + const list = itemsBySectionId.get(item.section_id) || []; + list.push(item); + itemsBySectionId.set(item.section_id, list); + } + }); + + const formatItem = (item) => { + const availableLevels = parseAvailableLevels(item.available_levels); + + const dependencyEntries = dependenciesByItemId.get(item.id) || []; + const formattedDependencies = dependencyEntries + .map((dependency) => { + const dependsOnKey = itemIdToKey.get(dependency.depends_on_permission_id); + if (!dependsOnKey) { + return null; + } + return { + key: dependsOnKey, + requiredLevel: dependency.required_level || null + }; + }) + .filter(Boolean); + + return { + key: item.key, + label: item.label, + sortOrder: item.sort_order ?? 0, + defaultLevel: item.default_level || 'none', + availableLevels, + isRequired: Boolean(item.is_required), + dependencies: formattedDependencies + }; + }; + + const formattedSections = sections.map((section) => { + const sectionItems = (itemsBySectionId.get(section.id) || []).map(formatItem); + const sectionGroups = (groupsBySectionId.get(section.id) || []).map((group) => ({ + key: group.key, + title: group.title, + sortOrder: group.sort_order ?? 0, + items: (itemsByGroupId.get(group.id) || []).map(formatItem) + })); + + return { + key: section.key, + title: section.title, + sortOrder: section.sort_order ?? 0, + hasNavigation: Boolean(section.has_navigation_flag), + items: sectionItems, + groups: sectionGroups + }; + }); + + return formattedSections; +} + +export function getPermissionValuesByGroup(groupId) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + return {}; + } + + const rows = selectGroupPermissionValues.all(numericId); + const values = {}; + rows.forEach((row) => { + if (row?.key && typeof row.level === 'string') { + values[row.key] = row.level; + } + }); + return values; +} + +export function clearGroupPermissionValues(groupId) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + return; + } + deleteGroupPermissionValuesStmt.run(numericId); +} + +export function saveGroupPermissionValues(groupId, values = {}) { + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + const error = new Error('INVALID_GROUP_ID'); + error.code = 'INVALID_GROUP_ID'; + throw error; + } + + if (values === null || typeof values !== 'object' || Array.isArray(values)) { + const error = new Error('PERMISSION_INVALID_PAYLOAD'); + error.code = 'PERMISSION_INVALID_PAYLOAD'; + throw error; + } + + const items = getPermissionItems(); + const itemMap = new Map(); + items.forEach((item) => { + itemMap.set(item.key, { + id: item.id, + key: item.key, + defaultLevel: item.default_level || 'none', + availableLevels: parseAvailableLevels(item.available_levels) + }); + }); + + const entries = Object.entries(values); + const normalizedEntries = []; + + entries.forEach(([key, rawValue]) => { + const item = itemMap.get(key); + if (!item) { + const error = new Error('PERMISSION_UNKNOWN_KEY'); + error.code = 'PERMISSION_UNKNOWN_KEY'; + error.permissionKey = key; + throw error; + } + + let level = typeof rawValue === 'string' ? rawValue.trim() : String(rawValue ?? '').trim(); + if (!level) { + level = 'none'; + } + + if (!item.availableLevels.includes(level)) { + const error = new Error('PERMISSION_INVALID_LEVEL'); + error.code = 'PERMISSION_INVALID_LEVEL'; + error.permissionKey = key; + error.level = level; + throw error; + } + + normalizedEntries.push({ item, level }); + }); + + const getSubmittedLevel = (permissionKey) => { + const entry = normalizedEntries.find((entry) => entry.item.key === permissionKey); + if (entry) { + return entry.level; + } + const fallback = itemMap.get(permissionKey); + return fallback ? fallback.defaultLevel || 'none' : 'none'; + }; + + const serverManageLevel = getSubmittedLevel('maintenance-server-manage'); + const serverDeleteLevel = getSubmittedLevel('maintenance-server-delete'); + + if (getLevelPriority(serverDeleteLevel) >= getLevelPriority('full') && + getLevelPriority(serverManageLevel) < getLevelPriority('full')) { + const error = new Error('PERMISSION_DEPENDENCY_LEVEL'); + error.code = 'PERMISSION_DEPENDENCY_LEVEL'; + error.permissionKey = 'maintenance-server-delete'; + throw error; + } + + const runSave = db.transaction(() => { + deleteGroupPermissionValuesStmt.run(numericId); + normalizedEntries.forEach(({ item, level }) => { + if (level === (item.defaultLevel || 'none')) { + return; + } + insertGroupPermissionValueStmt.run(numericId, item.id, level, level); + }); + }); + + runSave(); + resetPermissionItemsCache(); + + return getPermissionValuesByGroup(numericId); +} + +export function getDefaultPermissionMap() { + const items = getPermissionItems(); + const defaults = {}; + items.forEach((item) => { + defaults[item.key] = item.default_level || 'none'; + }); + return defaults; +} + +export function getSuperuserPermissionMap() { + const items = getPermissionItems(); + const result = {}; + + items.forEach((item) => { + const available = parseAvailableLevels(item.available_levels); + let chosen = 'full'; + if (!available.includes('full')) { + chosen = available.reduce( + (best, candidate) => + getLevelPriority(candidate) > getLevelPriority(best) ? candidate : best, + 'none' + ); + } + result[item.key] = chosen; + }); + + return result; +} + +export function getEffectivePermissionsForGroup(groupId) { + const defaults = getDefaultPermissionMap(); + const numericId = Number(groupId); + if (!Number.isFinite(numericId) || numericId <= 0) { + return defaults; + } + + const overrides = getPermissionValuesByGroup(numericId); + const map = { ...defaults }; + + Object.keys(overrides).forEach((key) => { + const value = overrides[key]; + if (typeof value === 'string') { + map[key] = value; + } + }); + + return map; +} + +export function getEffectivePermissionsForGroups(groupIds = []) { + const defaults = getDefaultPermissionMap(); + const finalMap = { ...defaults }; + + const iterableIds = Array.isArray(groupIds) ? groupIds : []; + iterableIds + .map((value) => Number(value)) + .filter((value) => Number.isFinite(value) && value > 0) + .forEach((groupId) => { + const map = getEffectivePermissionsForGroup(groupId); + Object.entries(map).forEach(([key, level]) => { + if (getLevelPriority(level) > getLevelPriority(finalMap[key] ?? 'none')) { + finalMap[key] = level; + } + }); + }); + + return finalMap; +} + +export function hasRequiredPermission(permissions = {}, permissionKey, requiredLevel = 'full') { + if (!permissionKey) { + return true; + } + if (requiredLevel === 'none' || requiredLevel === null || requiredLevel === undefined) { + return true; + } + const current = typeof permissions[permissionKey] === 'string' ? permissions[permissionKey] : 'none'; + const required = typeof requiredLevel === 'string' ? requiredLevel : 'full'; + return getLevelPriority(current) >= getLevelPriority(required); +} diff --git a/backend/public/assets/index-12a5cbeb.js b/backend/public/assets/index-12a5cbeb.js deleted file mode 100644 index 85cbcf6..0000000 --- a/backend/public/assets/index-12a5cbeb.js +++ /dev/null @@ -1,90 +0,0 @@ -function PN(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();function xx(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Ts(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}),r}var _x={exports:{}},sd={},Tx={exports:{}},it={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Cs=Symbol.for("react.element"),kN=Symbol.for("react.portal"),EN=Symbol.for("react.fragment"),RN=Symbol.for("react.strict_mode"),NN=Symbol.for("react.profiler"),jN=Symbol.for("react.provider"),AN=Symbol.for("react.context"),MN=Symbol.for("react.forward_ref"),IN=Symbol.for("react.suspense"),DN=Symbol.for("react.memo"),LN=Symbol.for("react.lazy"),jm=Symbol.iterator;function FN(e){return e===null||typeof e!="object"?null:(e=jm&&e[jm]||e["@@iterator"],typeof e=="function"?e:null)}var Cx={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ox=Object.assign,Sx={};function Vi(e,t,r){this.props=e,this.context=t,this.refs=Sx,this.updater=r||Cx}Vi.prototype.isReactComponent={};Vi.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Vi.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Px(){}Px.prototype=Vi.prototype;function Ch(e,t,r){this.props=e,this.context=t,this.refs=Sx,this.updater=r||Cx}var Oh=Ch.prototype=new Px;Oh.constructor=Ch;Ox(Oh,Vi.prototype);Oh.isPureReactComponent=!0;var Am=Array.isArray,kx=Object.prototype.hasOwnProperty,Sh={current:null},Ex={key:!0,ref:!0,__self:!0,__source:!0};function Rx(e,t,r){var n,o={},a=null,i=null;if(t!=null)for(n in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(a=""+t.key),t)kx.call(t,n)&&!Ex.hasOwnProperty(n)&&(o[n]=t[n]);var c=arguments.length-2;if(c===1)o.children=r;else if(1>>1,Q=H[K];if(0>>1;Ko(le,U))reo(be,le)?(H[K]=be,H[re]=U,K=re):(H[K]=le,H[ue]=U,K=ue);else if(reo(be,U))H[K]=be,H[re]=U,K=re;else break e}}return B}function o(H,B){var U=H.sortIndex-B.sortIndex;return U!==0?U:H.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var i=Date,c=i.now();e.unstable_now=function(){return i.now()-c}}var p=[],g=[],v=1,_=null,O=3,C=!1,T=!1,x=!1,b=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,l=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function u(H){for(var B=r(g);B!==null;){if(B.callback===null)n(g);else if(B.startTime<=H)n(g),B.sortIndex=B.expirationTime,t(p,B);else break;B=r(g)}}function s(H){if(x=!1,u(H),!T)if(r(p)!==null)T=!0,G(h);else{var B=r(g);B!==null&&X(s,B.startTime-H)}}function h(H,B){T=!1,x&&(x=!1,d(E),E=-1),C=!0;var U=O;try{for(u(B),_=r(p);_!==null&&(!(_.expirationTime>B)||H&&!N());){var K=_.callback;if(typeof K=="function"){_.callback=null,O=_.priorityLevel;var Q=K(_.expirationTime<=B);B=e.unstable_now(),typeof Q=="function"?_.callback=Q:_===r(p)&&n(p),u(B)}else n(p);_=r(p)}if(_!==null)var ne=!0;else{var ue=r(g);ue!==null&&X(s,ue.startTime-B),ne=!1}return ne}finally{_=null,O=U,C=!1}}var m=!1,w=null,E=-1,k=5,P=-1;function N(){return!(e.unstable_now()-PH||125K?(H.sortIndex=U,t(g,H),r(p)===null&&H===r(g)&&(x?(d(E),E=-1):x=!0,X(s,U-K))):(H.sortIndex=Q,t(p,H),T||C||(T=!0,G(h))),H},e.unstable_shouldYield=N,e.unstable_wrapCallback=function(H){var B=O;return function(){var U=O;O=B;try{return H.apply(this,arguments)}finally{O=U}}}})(Mx);Ax.exports=Mx;var YN=Ax.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ix=A,Hr=YN;function me(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),$p=Object.prototype.hasOwnProperty,XN=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Im={},Dm={};function QN(e){return $p.call(Dm,e)?!0:$p.call(Im,e)?!1:XN.test(e)?Dm[e]=!0:(Im[e]=!0,!1)}function JN(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ZN(e,t,r,n){if(t===null||typeof t>"u"||JN(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Cr(e,t,r,n,o,a,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var cr={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){cr[e]=new Cr(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];cr[t]=new Cr(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){cr[e]=new Cr(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){cr[e]=new Cr(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){cr[e]=new Cr(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){cr[e]=new Cr(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){cr[e]=new Cr(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){cr[e]=new Cr(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){cr[e]=new Cr(e,5,!1,e.toLowerCase(),null,!1,!1)});var Eh=/[\-:]([a-z])/g;function Rh(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Eh,Rh);cr[t]=new Cr(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Eh,Rh);cr[t]=new Cr(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Eh,Rh);cr[t]=new Cr(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){cr[e]=new Cr(e,1,!1,e.toLowerCase(),null,!1,!1)});cr.xlinkHref=new Cr("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){cr[e]=new Cr(e,1,!1,e.toLowerCase(),null,!0,!0)});function Nh(e,t,r,n){var o=cr.hasOwnProperty(t)?cr[t]:null;(o!==null?o.type!==0:n||!(2c||o[i]!==a[c]){var p=` -`+o[i].replace(" at new "," at ");return e.displayName&&p.includes("")&&(p=p.replace("",e.displayName)),p}while(1<=i&&0<=c);break}}}finally{qf=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Pl(e):""}function e2(e){switch(e.tag){case 5:return Pl(e.type);case 16:return Pl("Lazy");case 13:return Pl("Suspense");case 19:return Pl("SuspenseList");case 0:case 2:case 15:return e=Gf(e.type,!1),e;case 11:return e=Gf(e.type.render,!1),e;case 1:return e=Gf(e.type,!0),e;default:return""}}function Yp(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Za:return"Fragment";case Ja:return"Portal";case qp:return"Profiler";case jh:return"StrictMode";case Gp:return"Suspense";case Kp:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Fx:return(e.displayName||"Context")+".Consumer";case Lx:return(e._context.displayName||"Context")+".Provider";case Ah:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Mh:return t=e.displayName||null,t!==null?t:Yp(e.type)||"Memo";case So:t=e._payload,e=e._init;try{return Yp(e(t))}catch{}}return null}function t2(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Yp(t);case 8:return t===jh?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function $o(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function zx(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function r2(e){var t=zx(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(i){n=""+i,a.call(this,i)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(i){n=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function su(e){e._valueTracker||(e._valueTracker=r2(e))}function Bx(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=zx(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function fc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Xp(e,t){var r=t.checked;return Vt({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Fm(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=$o(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Wx(e,t){t=t.checked,t!=null&&Nh(e,"checked",t,!1)}function Qp(e,t){Wx(e,t);var r=$o(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Jp(e,t.type,r):t.hasOwnProperty("defaultValue")&&Jp(e,t.type,$o(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Vm(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Jp(e,t,r){(t!=="number"||fc(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var kl=Array.isArray;function fi(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=uu.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Xl(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Il={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},n2=["Webkit","ms","Moz","O"];Object.keys(Il).forEach(function(e){n2.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Il[t]=Il[e]})});function qx(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Il.hasOwnProperty(e)&&Il[e]?(""+t).trim():t+"px"}function Gx(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=qx(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var o2=Vt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function t0(e,t){if(t){if(o2[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(me(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(me(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(me(61))}if(t.style!=null&&typeof t.style!="object")throw Error(me(62))}}function r0(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var n0=null;function Ih(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var o0=null,pi=null,hi=null;function Wm(e){if(e=Ps(e)){if(typeof o0!="function")throw Error(me(280));var t=e.stateNode;t&&(t=pd(t),o0(e.stateNode,e.type,t))}}function Kx(e){pi?hi?hi.push(e):hi=[e]:pi=e}function Yx(){if(pi){var e=pi,t=hi;if(hi=pi=null,Wm(e),t)for(e=0;e>>=0,e===0?32:31-(g2(e)/b2|0)|0}var cu=64,du=4194304;function El(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function bc(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,o=e.suspendedLanes,a=e.pingedLanes,i=r&268435455;if(i!==0){var c=i&~o;c!==0?n=El(c):(a&=i,a!==0&&(n=El(a)))}else i=r&~o,i!==0?n=El(i):a!==0&&(n=El(a));if(n===0)return 0;if(t!==0&&t!==n&&!(t&o)&&(o=n&-n,a=t&-t,o>=a||o===16&&(a&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function Os(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-_n(t),e[t]=r}function w2(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Ll),Qm=String.fromCharCode(32),Jm=!1;function g_(e,t){switch(e){case"keyup":return K2.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function b_(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var ei=!1;function X2(e,t){switch(e){case"compositionend":return b_(t);case"keypress":return t.which!==32?null:(Jm=!0,Qm);case"textInput":return e=t.data,e===Qm&&Jm?null:e;default:return null}}function Q2(e,t){if(ei)return e==="compositionend"||!Uh&&g_(e,t)?(e=p_(),Fu=zh=No=null,ei=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=ry(r)}}function w_(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?w_(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function x_(){for(var e=window,t=fc();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=fc(e.document)}return t}function Hh(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function ij(e){var t=x_(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&w_(r.ownerDocument.documentElement,r)){if(n!==null&&Hh(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=r.textContent.length,a=Math.min(n.start,o);n=n.end===void 0?a:Math.min(n.end,o),!e.extend&&a>n&&(o=n,n=a,a=o),o=ny(r,a);var i=ny(r,n);o&&i&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),a>n?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,ti=null,c0=null,Vl=null,d0=!1;function oy(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;d0||ti==null||ti!==fc(n)||(n=ti,"selectionStart"in n&&Hh(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Vl&&rs(Vl,n)||(Vl=n,n=yc(c0,"onSelect"),0oi||(e.current=v0[oi],v0[oi]=null,oi--)}function _t(e,t){oi++,v0[oi]=e.current,e.current=t}var qo={},mr=Yo(qo),Ar=Yo(!1),wa=qo;function Oi(e,t){var r=e.type.contextTypes;if(!r)return qo;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},a;for(a in r)o[a]=t[a];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Mr(e){return e=e.childContextTypes,e!=null}function xc(){St(Ar),St(mr)}function dy(e,t,r){if(mr.current!==qo)throw Error(me(168));_t(mr,t),_t(Ar,r)}function R_(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in t))throw Error(me(108,t2(e)||"Unknown",o));return Vt({},r,n)}function _c(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||qo,wa=mr.current,_t(mr,e),_t(Ar,Ar.current),!0}function fy(e,t,r){var n=e.stateNode;if(!n)throw Error(me(169));r?(e=R_(e,t,wa),n.__reactInternalMemoizedMergedChildContext=e,St(Ar),St(mr),_t(mr,e)):St(Ar),_t(Ar,r)}var Kn=null,hd=!1,lp=!1;function N_(e){Kn===null?Kn=[e]:Kn.push(e)}function mj(e){hd=!0,N_(e)}function Xo(){if(!lp&&Kn!==null){lp=!0;var e=0,t=mt;try{var r=Kn;for(mt=1;e>=i,o-=i,Yn=1<<32-_n(t)+o|r<E?(k=w,w=null):k=w.sibling;var P=O(d,w,u[E],s);if(P===null){w===null&&(w=k);break}e&&w&&P.alternate===null&&t(d,w),l=a(P,l,E),m===null?h=P:m.sibling=P,m=P,w=k}if(E===u.length)return r(d,w),Rt&&ca(d,E),h;if(w===null){for(;EE?(k=w,w=null):k=w.sibling;var N=O(d,w,P.value,s);if(N===null){w===null&&(w=k);break}e&&w&&N.alternate===null&&t(d,w),l=a(N,l,E),m===null?h=N:m.sibling=N,m=N,w=k}if(P.done)return r(d,w),Rt&&ca(d,E),h;if(w===null){for(;!P.done;E++,P=u.next())P=_(d,P.value,s),P!==null&&(l=a(P,l,E),m===null?h=P:m.sibling=P,m=P);return Rt&&ca(d,E),h}for(w=n(d,w);!P.done;E++,P=u.next())P=C(w,d,E,P.value,s),P!==null&&(e&&P.alternate!==null&&w.delete(P.key===null?E:P.key),l=a(P,l,E),m===null?h=P:m.sibling=P,m=P);return e&&w.forEach(function(j){return t(d,j)}),Rt&&ca(d,E),h}function b(d,l,u,s){if(typeof u=="object"&&u!==null&&u.type===Za&&u.key===null&&(u=u.props.children),typeof u=="object"&&u!==null){switch(u.$$typeof){case lu:e:{for(var h=u.key,m=l;m!==null;){if(m.key===h){if(h=u.type,h===Za){if(m.tag===7){r(d,m.sibling),l=o(m,u.props.children),l.return=d,d=l;break e}}else if(m.elementType===h||typeof h=="object"&&h!==null&&h.$$typeof===So&&yy(h)===m.type){r(d,m.sibling),l=o(m,u.props),l.ref=yl(d,m,u),l.return=d,d=l;break e}r(d,m);break}else t(d,m);m=m.sibling}u.type===Za?(l=ma(u.props.children,d.mode,s,u.key),l.return=d,d=l):(s=qu(u.type,u.key,u.props,null,d.mode,s),s.ref=yl(d,l,u),s.return=d,d=s)}return i(d);case Ja:e:{for(m=u.key;l!==null;){if(l.key===m)if(l.tag===4&&l.stateNode.containerInfo===u.containerInfo&&l.stateNode.implementation===u.implementation){r(d,l.sibling),l=o(l,u.children||[]),l.return=d,d=l;break e}else{r(d,l);break}else t(d,l);l=l.sibling}l=gp(u,d.mode,s),l.return=d,d=l}return i(d);case So:return m=u._init,b(d,l,m(u._payload),s)}if(kl(u))return T(d,l,u,s);if(hl(u))return x(d,l,u,s);mu(d,u)}return typeof u=="string"&&u!==""||typeof u=="number"?(u=""+u,l!==null&&l.tag===6?(r(d,l.sibling),l=o(l,u),l.return=d,d=l):(r(d,l),l=hp(u,d.mode,s),l.return=d,d=l),i(d)):r(d,l)}return b}var Pi=V_(!0),z_=V_(!1),ks={},Vn=Yo(ks),is=Yo(ks),ls=Yo(ks);function ha(e){if(e===ks)throw Error(me(174));return e}function Zh(e,t){switch(_t(ls,t),_t(is,e),_t(Vn,ks),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:e0(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=e0(t,e)}St(Vn),_t(Vn,t)}function ki(){St(Vn),St(is),St(ls)}function B_(e){ha(ls.current);var t=ha(Vn.current),r=e0(t,e.type);t!==r&&(_t(is,e),_t(Vn,r))}function eg(e){is.current===e&&(St(Vn),St(is))}var It=Yo(0);function kc(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var sp=[];function tg(){for(var e=0;er?r:4,e(!0);var n=up.transition;up.transition={};try{e(!1),t()}finally{mt=r,up.transition=n}}function nT(){return dn().memoizedState}function _j(e,t,r){var n=zo(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},oT(e))aT(t,r);else if(r=I_(e,t,r,n),r!==null){var o=_r();Tn(r,e,n,o),iT(r,t,n)}}function Tj(e,t,r){var n=zo(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(oT(e))aT(t,o);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var i=t.lastRenderedState,c=a(i,r);if(o.hasEagerState=!0,o.eagerState=c,Sn(c,i)){var p=t.interleaved;p===null?(o.next=o,Qh(t)):(o.next=p.next,p.next=o),t.interleaved=o;return}}catch{}finally{}r=I_(e,t,o,n),r!==null&&(o=_r(),Tn(r,e,n,o),iT(r,t,n))}}function oT(e){var t=e.alternate;return e===Lt||t!==null&&t===Lt}function aT(e,t){zl=Ec=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function iT(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Lh(e,r)}}var Rc={readContext:cn,useCallback:fr,useContext:fr,useEffect:fr,useImperativeHandle:fr,useInsertionEffect:fr,useLayoutEffect:fr,useMemo:fr,useReducer:fr,useRef:fr,useState:fr,useDebugValue:fr,useDeferredValue:fr,useTransition:fr,useMutableSource:fr,useSyncExternalStore:fr,useId:fr,unstable_isNewReconciler:!1},Cj={readContext:cn,useCallback:function(e,t){return Dn().memoizedState=[e,t===void 0?null:t],e},useContext:cn,useEffect:xy,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Wu(4194308,4,J_.bind(null,t,e),r)},useLayoutEffect:function(e,t){return Wu(4194308,4,e,t)},useInsertionEffect:function(e,t){return Wu(4,2,e,t)},useMemo:function(e,t){var r=Dn();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=Dn();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=_j.bind(null,Lt,e),[n.memoizedState,e]},useRef:function(e){var t=Dn();return e={current:e},t.memoizedState=e},useState:wy,useDebugValue:ig,useDeferredValue:function(e){return Dn().memoizedState=e},useTransition:function(){var e=wy(!1),t=e[0];return e=xj.bind(null,e[1]),Dn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=Lt,o=Dn();if(Rt){if(r===void 0)throw Error(me(407));r=r()}else{if(r=t(),ar===null)throw Error(me(349));_a&30||H_(n,t,r)}o.memoizedState=r;var a={value:r,getSnapshot:t};return o.queue=a,xy(q_.bind(null,n,a,e),[e]),n.flags|=2048,cs(9,$_.bind(null,n,a,r,t),void 0,null),r},useId:function(){var e=Dn(),t=ar.identifierPrefix;if(Rt){var r=Xn,n=Yn;r=(n&~(1<<32-_n(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=ss++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=i.createElement(r,{is:n.is}):(e=i.createElement(r),r==="select"&&(i=e,n.multiple?i.multiple=!0:n.size&&(i.size=n.size))):e=i.createElementNS(e,r),e[Ln]=t,e[as]=n,gT(e,t,!1,!1),t.stateNode=e;e:{switch(i=r0(r,n),r){case"dialog":Ct("cancel",e),Ct("close",e),o=n;break;case"iframe":case"object":case"embed":Ct("load",e),o=n;break;case"video":case"audio":for(o=0;oRi&&(t.flags|=128,n=!0,wl(a,!1),t.lanes=4194304)}else{if(!n)if(e=kc(i),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),wl(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!Rt)return pr(t),null}else 2*Ut()-a.renderingStartTime>Ri&&r!==1073741824&&(t.flags|=128,n=!0,wl(a,!1),t.lanes=4194304);a.isBackwards?(i.sibling=t.child,t.child=i):(r=a.last,r!==null?r.sibling=i:t.child=i,a.last=i)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=Ut(),t.sibling=null,r=It.current,_t(It,n?r&1|2:r&1),t):(pr(t),null);case 22:case 23:return fg(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?Fr&1073741824&&(pr(t),t.subtreeFlags&6&&(t.flags|=8192)):pr(t),null;case 24:return null;case 25:return null}throw Error(me(156,t.tag))}function jj(e,t){switch(qh(t),t.tag){case 1:return Mr(t.type)&&xc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ki(),St(Ar),St(mr),tg(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return eg(t),null;case 13:if(St(It),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(me(340));Si()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return St(It),null;case 4:return ki(),null;case 10:return Xh(t.type._context),null;case 22:case 23:return fg(),null;case 24:return null;default:return null}}var wu=!1,br=!1,Aj=typeof WeakSet=="function"?WeakSet:Set,Ee=null;function si(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){Bt(e,t,n)}else r.current=null}function E0(e,t,r){try{r()}catch(n){Bt(e,t,n)}}var Ry=!1;function Mj(e,t){if(f0=vc,e=x_(),Hh(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var o=n.anchorOffset,a=n.focusNode;n=n.focusOffset;try{r.nodeType,a.nodeType}catch{r=null;break e}var i=0,c=-1,p=-1,g=0,v=0,_=e,O=null;t:for(;;){for(var C;_!==r||o!==0&&_.nodeType!==3||(c=i+o),_!==a||n!==0&&_.nodeType!==3||(p=i+n),_.nodeType===3&&(i+=_.nodeValue.length),(C=_.firstChild)!==null;)O=_,_=C;for(;;){if(_===e)break t;if(O===r&&++g===o&&(c=i),O===a&&++v===n&&(p=i),(C=_.nextSibling)!==null)break;_=O,O=_.parentNode}_=C}r=c===-1||p===-1?null:{start:c,end:p}}else r=null}r=r||{start:0,end:0}}else r=null;for(p0={focusedElem:e,selectionRange:r},vc=!1,Ee=t;Ee!==null;)if(t=Ee,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Ee=e;else for(;Ee!==null;){t=Ee;try{var T=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(T!==null){var x=T.memoizedProps,b=T.memoizedState,d=t.stateNode,l=d.getSnapshotBeforeUpdate(t.elementType===t.type?x:bn(t.type,x),b);d.__reactInternalSnapshotBeforeUpdate=l}break;case 3:var u=t.stateNode.containerInfo;u.nodeType===1?u.textContent="":u.nodeType===9&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(me(163))}}catch(s){Bt(t,t.return,s)}if(e=t.sibling,e!==null){e.return=t.return,Ee=e;break}Ee=t.return}return T=Ry,Ry=!1,T}function Bl(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,a!==void 0&&E0(t,r,a)}o=o.next}while(o!==n)}}function vd(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function R0(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function mT(e){var t=e.alternate;t!==null&&(e.alternate=null,mT(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ln],delete t[as],delete t[b0],delete t[bj],delete t[vj])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function yT(e){return e.tag===5||e.tag===3||e.tag===4}function Ny(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||yT(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function N0(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=wc));else if(n!==4&&(e=e.child,e!==null))for(N0(e,t,r),e=e.sibling;e!==null;)N0(e,t,r),e=e.sibling}function j0(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(j0(e,t,r),e=e.sibling;e!==null;)j0(e,t,r),e=e.sibling}var sr=null,vn=!1;function _o(e,t,r){for(r=r.child;r!==null;)wT(e,t,r),r=r.sibling}function wT(e,t,r){if(Fn&&typeof Fn.onCommitFiberUnmount=="function")try{Fn.onCommitFiberUnmount(ud,r)}catch{}switch(r.tag){case 5:br||si(r,t);case 6:var n=sr,o=vn;sr=null,_o(e,t,r),sr=n,vn=o,sr!==null&&(vn?(e=sr,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):sr.removeChild(r.stateNode));break;case 18:sr!==null&&(vn?(e=sr,r=r.stateNode,e.nodeType===8?ip(e.parentNode,r):e.nodeType===1&&ip(e,r),es(e)):ip(sr,r.stateNode));break;case 4:n=sr,o=vn,sr=r.stateNode.containerInfo,vn=!0,_o(e,t,r),sr=n,vn=o;break;case 0:case 11:case 14:case 15:if(!br&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){o=n=n.next;do{var a=o,i=a.destroy;a=a.tag,i!==void 0&&(a&2||a&4)&&E0(r,t,i),o=o.next}while(o!==n)}_o(e,t,r);break;case 1:if(!br&&(si(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(c){Bt(r,t,c)}_o(e,t,r);break;case 21:_o(e,t,r);break;case 22:r.mode&1?(br=(n=br)||r.memoizedState!==null,_o(e,t,r),br=n):_o(e,t,r);break;default:_o(e,t,r)}}function jy(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Aj),t.forEach(function(n){var o=Uj.bind(null,e,n);r.has(n)||(r.add(n),n.then(o,o))})}}function hn(e,t){var r=t.deletions;if(r!==null)for(var n=0;no&&(o=i),n&=~a}if(n=o,n=Ut()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Dj(n/1960))-n,10e?16:e,jo===null)var n=!1;else{if(e=jo,jo=null,Ac=0,ft&6)throw Error(me(331));var o=ft;for(ft|=4,Ee=e.current;Ee!==null;){var a=Ee,i=a.child;if(Ee.flags&16){var c=a.deletions;if(c!==null){for(var p=0;pUt()-cg?va(e,0):ug|=r),Ir(e,t)}function kT(e,t){t===0&&(e.mode&1?(t=du,du<<=1,!(du&130023424)&&(du=4194304)):t=1);var r=_r();e=no(e,t),e!==null&&(Os(e,t,r),Ir(e,r))}function Wj(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),kT(e,r)}function Uj(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;o!==null&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(me(314))}n!==null&&n.delete(t),kT(e,r)}var ET;ET=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ar.current)Nr=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Nr=!1,Rj(e,t,r);Nr=!!(e.flags&131072)}else Nr=!1,Rt&&t.flags&1048576&&j_(t,Cc,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Uu(e,t),e=t.pendingProps;var o=Oi(t,mr.current);bi(t,r),o=ng(null,t,n,e,o,r);var a=og();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Mr(n)?(a=!0,_c(t)):a=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Jh(t),o.updater=gd,t.stateNode=o,o._reactInternals=t,_0(t,n,e,r),t=O0(null,t,n,!0,a,r)):(t.tag=0,Rt&&a&&$h(t),xr(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(Uu(e,t),e=t.pendingProps,o=n._init,n=o(n._payload),t.type=n,o=t.tag=$j(n),e=bn(n,e),o){case 0:t=C0(null,t,n,e,r);break e;case 1:t=Py(null,t,n,e,r);break e;case 11:t=Oy(null,t,n,e,r);break e;case 14:t=Sy(null,t,n,bn(n.type,e),r);break e}throw Error(me(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bn(n,o),C0(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bn(n,o),Py(e,t,n,o,r);case 3:e:{if(fT(t),e===null)throw Error(me(387));n=t.pendingProps,a=t.memoizedState,o=a.element,D_(e,t),Pc(t,n,null,r);var i=t.memoizedState;if(n=i.element,a.isDehydrated)if(a={element:n,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=a,t.memoizedState=a,t.flags&256){o=Ei(Error(me(423)),t),t=ky(e,t,n,r,o);break e}else if(n!==o){o=Ei(Error(me(424)),t),t=ky(e,t,n,r,o);break e}else for(Vr=Lo(t.stateNode.containerInfo.firstChild),zr=t,Rt=!0,yn=null,r=z_(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Si(),n===o){t=oo(e,t,r);break e}xr(e,t,n,r)}t=t.child}return t;case 5:return B_(t),e===null&&y0(t),n=t.type,o=t.pendingProps,a=e!==null?e.memoizedProps:null,i=o.children,h0(n,o)?i=null:a!==null&&h0(n,a)&&(t.flags|=32),dT(e,t),xr(e,t,i,r),t.child;case 6:return e===null&&y0(t),null;case 13:return pT(e,t,r);case 4:return Zh(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Pi(t,null,n,r):xr(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bn(n,o),Oy(e,t,n,o,r);case 7:return xr(e,t,t.pendingProps,r),t.child;case 8:return xr(e,t,t.pendingProps.children,r),t.child;case 12:return xr(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,a=t.memoizedProps,i=o.value,_t(Oc,n._currentValue),n._currentValue=i,a!==null)if(Sn(a.value,i)){if(a.children===o.children&&!Ar.current){t=oo(e,t,r);break e}}else for(a=t.child,a!==null&&(a.return=t);a!==null;){var c=a.dependencies;if(c!==null){i=a.child;for(var p=c.firstContext;p!==null;){if(p.context===n){if(a.tag===1){p=Jn(-1,r&-r),p.tag=2;var g=a.updateQueue;if(g!==null){g=g.shared;var v=g.pending;v===null?p.next=p:(p.next=v.next,v.next=p),g.pending=p}}a.lanes|=r,p=a.alternate,p!==null&&(p.lanes|=r),w0(a.return,r,t),c.lanes|=r;break}p=p.next}}else if(a.tag===10)i=a.type===t.type?null:a.child;else if(a.tag===18){if(i=a.return,i===null)throw Error(me(341));i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),w0(i,r,t),i=a.sibling}else i=a.child;if(i!==null)i.return=a;else for(i=a;i!==null;){if(i===t){i=null;break}if(a=i.sibling,a!==null){a.return=i.return,i=a;break}i=i.return}a=i}xr(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,bi(t,r),o=cn(o),n=n(o),t.flags|=1,xr(e,t,n,r),t.child;case 14:return n=t.type,o=bn(n,t.pendingProps),o=bn(n.type,o),Sy(e,t,n,o,r);case 15:return uT(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:bn(n,o),Uu(e,t),t.tag=1,Mr(n)?(e=!0,_c(t)):e=!1,bi(t,r),F_(t,n,o),_0(t,n,o,r),O0(null,t,n,!0,e,r);case 19:return hT(e,t,r);case 22:return cT(e,t,r)}throw Error(me(156,t.tag))};function RT(e,t){return r_(e,t)}function Hj(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function an(e,t,r,n){return new Hj(e,t,r,n)}function hg(e){return e=e.prototype,!(!e||!e.isReactComponent)}function $j(e){if(typeof e=="function")return hg(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ah)return 11;if(e===Mh)return 14}return 2}function Bo(e,t){var r=e.alternate;return r===null?(r=an(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function qu(e,t,r,n,o,a){var i=2;if(n=e,typeof e=="function")hg(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Za:return ma(r.children,o,a,t);case jh:i=8,o|=8;break;case qp:return e=an(12,r,t,o|2),e.elementType=qp,e.lanes=a,e;case Gp:return e=an(13,r,t,o),e.elementType=Gp,e.lanes=a,e;case Kp:return e=an(19,r,t,o),e.elementType=Kp,e.lanes=a,e;case Vx:return yd(r,o,a,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Lx:i=10;break e;case Fx:i=9;break e;case Ah:i=11;break e;case Mh:i=14;break e;case So:i=16,n=null;break e}throw Error(me(130,e==null?e:typeof e,""))}return t=an(i,r,t,o),t.elementType=e,t.type=n,t.lanes=a,t}function ma(e,t,r,n){return e=an(7,e,n,t),e.lanes=r,e}function yd(e,t,r,n){return e=an(22,e,n,t),e.elementType=Vx,e.lanes=r,e.stateNode={isHidden:!1},e}function hp(e,t,r){return e=an(6,e,null,t),e.lanes=r,e}function gp(e,t,r){return t=an(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function qj(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Yf(0),this.expirationTimes=Yf(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Yf(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function gg(e,t,r,n,o,a,i,c,p){return e=new qj(e,t,r,c,p),t===1?(t=1,a===!0&&(t|=8)):t=0,a=an(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Jh(a),e}function Gj(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(MT)}catch(e){console.error(e)}}MT(),jx.exports=qr;var ao=jx.exports,zy=ao;Hp.createRoot=zy.createRoot,Hp.hydrateRoot=zy.hydrateRoot;/** - * @remix-run/router v1.10.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function fs(){return fs=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function yg(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Zj(){return Math.random().toString(36).substr(2,8)}function Wy(e,t){return{usr:e.state,key:e.key,idx:t}}function L0(e,t,r,n){return r===void 0&&(r=null),fs({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Wi(t):t,{state:r,key:t&&t.key||n||Zj()})}function Dc(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Wi(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function eA(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:a=!1}=n,i=o.history,c=Ao.Pop,p=null,g=v();g==null&&(g=0,i.replaceState(fs({},i.state,{idx:g}),""));function v(){return(i.state||{idx:null}).idx}function _(){c=Ao.Pop;let b=v(),d=b==null?null:b-g;g=b,p&&p({action:c,location:x.location,delta:d})}function O(b,d){c=Ao.Push;let l=L0(x.location,b,d);r&&r(l,b),g=v()+1;let u=Wy(l,g),s=x.createHref(l);try{i.pushState(u,"",s)}catch(h){if(h instanceof DOMException&&h.name==="DataCloneError")throw h;o.location.assign(s)}a&&p&&p({action:c,location:x.location,delta:1})}function C(b,d){c=Ao.Replace;let l=L0(x.location,b,d);r&&r(l,b),g=v();let u=Wy(l,g),s=x.createHref(l);i.replaceState(u,"",s),a&&p&&p({action:c,location:x.location,delta:0})}function T(b){let d=o.location.origin!=="null"?o.location.origin:o.location.href,l=typeof b=="string"?b:Dc(b);return Ft(d,"No window.location.(origin|href) available to create URL for href: "+l),new URL(l,d)}let x={get action(){return c},get location(){return e(o,i)},listen(b){if(p)throw new Error("A history only accepts one active listener");return o.addEventListener(By,_),p=b,()=>{o.removeEventListener(By,_),p=null}},createHref(b){return t(o,b)},createURL:T,encodeLocation(b){let d=T(b);return{pathname:d.pathname,search:d.search,hash:d.hash}},push:O,replace:C,go(b){return i.go(b)}};return x}var Uy;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Uy||(Uy={}));function tA(e,t,r){r===void 0&&(r="/");let n=typeof t=="string"?Wi(t):t,o=ps(n.pathname||"/",r);if(o==null)return null;let a=IT(e);rA(a);let i=null;for(let c=0;i==null&&c{let p={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:i,route:a};p.relativePath.startsWith("/")&&(Ft(p.relativePath.startsWith(n),'Absolute route path "'+p.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),p.relativePath=p.relativePath.slice(n.length));let g=Wo([n,p.relativePath]),v=r.concat(p);a.children&&a.children.length>0&&(Ft(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+g+'".')),IT(a.children,t,v,g)),!(a.path==null&&!a.index)&&t.push({path:g,score:uA(g,a.index),routesMeta:v})};return e.forEach((a,i)=>{var c;if(a.path===""||!((c=a.path)!=null&&c.includes("?")))o(a,i);else for(let p of DT(a.path))o(a,i,p)}),t}function DT(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return o?[a,""]:[a];let i=DT(n.join("/")),c=[];return c.push(...i.map(p=>p===""?a:[a,p].join("/"))),o&&c.push(...i),c.map(p=>e.startsWith("/")&&p===""?"/":p)}function rA(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:cA(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const nA=/^:\w+$/,oA=3,aA=2,iA=1,lA=10,sA=-2,Hy=e=>e==="*";function uA(e,t){let r=e.split("/"),n=r.length;return r.some(Hy)&&(n+=sA),t&&(n+=aA),r.filter(o=>!Hy(o)).reduce((o,a)=>o+(nA.test(a)?oA:a===""?iA:lA),n)}function cA(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function dA(e,t){let{routesMeta:r}=e,n={},o="/",a=[];for(let i=0;i{if(v==="*"){let O=c[_]||"";i=a.slice(0,a.length-O.length).replace(/(.)\/+$/,"$1")}return g[v]=hA(c[_]||"",v),g},{}),pathname:a,pathnameBase:i,pattern:e}}function fA(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),yg(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(i,c)=>(n.push(c),"/([^\\/]+)"));return e.endsWith("*")?(n.push("*"),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function pA(e){try{return decodeURI(e)}catch(t){return yg(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function hA(e,t){try{return decodeURIComponent(e)}catch(r){return yg(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+r+").")),e}}function ps(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function gA(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?Wi(e):e;return{pathname:r?r.startsWith("/")?r:bA(r,t):t,search:mA(n),hash:yA(o)}}function bA(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function bp(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function wg(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function xg(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=Wi(e):(o=fs({},e),Ft(!o.pathname||!o.pathname.includes("?"),bp("?","pathname","search",o)),Ft(!o.pathname||!o.pathname.includes("#"),bp("#","pathname","hash",o)),Ft(!o.search||!o.search.includes("#"),bp("#","search","hash",o)));let a=e===""||o.pathname==="",i=a?"/":o.pathname,c;if(n||i==null)c=r;else{let _=t.length-1;if(i.startsWith("..")){let O=i.split("/");for(;O[0]==="..";)O.shift(),_-=1;o.pathname=O.join("/")}c=_>=0?t[_]:"/"}let p=gA(o,c),g=i&&i!=="/"&&i.endsWith("/"),v=(a||i===".")&&r.endsWith("/");return!p.pathname.endsWith("/")&&(g||v)&&(p.pathname+="/"),p}const Wo=e=>e.join("/").replace(/\/\/+/g,"/"),vA=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),mA=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,yA=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function wA(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const LT=["post","put","patch","delete"];new Set(LT);const xA=["get",...LT];new Set(xA);/** - * React Router v6.17.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Lc(){return Lc=Object.assign?Object.assign.bind():function(e){for(var t=1;tp.pathnameBase)),i=A.useRef(!1);return zT(()=>{i.current=!0}),A.useCallback(function(p,g){if(g===void 0&&(g={}),!i.current)return;if(typeof p=="number"){r.go(p);return}let v=xg(p,JSON.parse(a),o,g.relative==="path");e==null&&t!=="/"&&(v.pathname=v.pathname==="/"?t:Wo([t,v.pathname])),(g.replace?r.replace:r.push)(v,g.state,g)},[t,r,a,o,e])}function Sd(e,t){let{relative:r}=t===void 0?{}:t,{matches:n}=A.useContext(Qo),{pathname:o}=Aa(),a=JSON.stringify(wg(n).map(i=>i.pathnameBase));return A.useMemo(()=>xg(e,JSON.parse(a),o,r==="path"),[e,a,o,r])}function CA(e,t){return OA(e,t)}function OA(e,t,r){Ui()||Ft(!1);let{navigator:n}=A.useContext(ja),{matches:o}=A.useContext(Qo),a=o[o.length-1],i=a?a.params:{};a&&a.pathname;let c=a?a.pathnameBase:"/";a&&a.route;let p=Aa(),g;if(t){var v;let x=typeof t=="string"?Wi(t):t;c==="/"||(v=x.pathname)!=null&&v.startsWith(c)||Ft(!1),g=x}else g=p;let _=g.pathname||"/",O=c==="/"?_:_.slice(c.length)||"/",C=tA(e,{pathname:O}),T=RA(C&&C.map(x=>Object.assign({},x,{params:Object.assign({},i,x.params),pathname:Wo([c,n.encodeLocation?n.encodeLocation(x.pathname).pathname:x.pathname]),pathnameBase:x.pathnameBase==="/"?c:Wo([c,n.encodeLocation?n.encodeLocation(x.pathnameBase).pathname:x.pathnameBase])})),o,r);return t&&T?A.createElement(Od.Provider,{value:{location:Lc({pathname:"/",search:"",hash:"",state:null,key:"default"},g),navigationType:Ao.Pop}},T):T}function SA(){let e=MA(),t=wA(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},a=null;return A.createElement(A.Fragment,null,A.createElement("h2",null,"Unexpected Application Error!"),A.createElement("h3",{style:{fontStyle:"italic"}},t),r?A.createElement("pre",{style:o},r):null,a)}const PA=A.createElement(SA,null);class kA extends A.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error||r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error?A.createElement(Qo.Provider,{value:this.props.routeContext},A.createElement(VT.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function EA(e){let{routeContext:t,match:r,children:n}=e,o=A.useContext(Cd);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),A.createElement(Qo.Provider,{value:t},n)}function RA(e,t,r){var n;if(t===void 0&&(t=[]),r===void 0&&(r=null),e==null){var o;if((o=r)!=null&&o.errors)e=r.matches;else return null}let a=e,i=(n=r)==null?void 0:n.errors;if(i!=null){let c=a.findIndex(p=>p.route.id&&(i==null?void 0:i[p.route.id]));c>=0||Ft(!1),a=a.slice(0,Math.min(a.length,c+1))}return a.reduceRight((c,p,g)=>{let v=p.route.id?i==null?void 0:i[p.route.id]:null,_=null;r&&(_=p.route.errorElement||PA);let O=t.concat(a.slice(0,g+1)),C=()=>{let T;return v?T=_:p.route.Component?T=A.createElement(p.route.Component,null):p.route.element?T=p.route.element:T=c,A.createElement(EA,{match:p,routeContext:{outlet:c,matches:O,isDataRoute:r!=null},children:T})};return r&&(p.route.ErrorBoundary||p.route.errorElement||g===0)?A.createElement(kA,{location:r.location,revalidation:r.revalidation,component:_,error:v,children:C(),routeContext:{outlet:null,matches:O,isDataRoute:!0}}):C()},null)}var WT=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(WT||{}),Fc=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Fc||{});function NA(e){let t=A.useContext(Cd);return t||Ft(!1),t}function jA(e){let t=A.useContext(FT);return t||Ft(!1),t}function AA(e){let t=A.useContext(Qo);return t||Ft(!1),t}function UT(e){let t=AA(),r=t.matches[t.matches.length-1];return r.route.id||Ft(!1),r.route.id}function MA(){var e;let t=A.useContext(VT),r=jA(Fc.UseRouteError),n=UT(Fc.UseRouteError);return t||((e=r.errors)==null?void 0:e[n])}function IA(){let{router:e}=NA(WT.UseNavigateStable),t=UT(Fc.UseNavigateStable),r=A.useRef(!1);return zT(()=>{r.current=!0}),A.useCallback(function(o,a){a===void 0&&(a={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Lc({fromRouteId:t},a)))},[e,t])}function DA(e){let{to:t,replace:r,state:n,relative:o}=e;Ui()||Ft(!1);let{matches:a}=A.useContext(Qo),{pathname:i}=Aa(),c=BT(),p=xg(t,wg(a).map(v=>v.pathnameBase),i,o==="path"),g=JSON.stringify(p);return A.useEffect(()=>c(JSON.parse(g),{replace:r,state:n,relative:o}),[c,g,o,r,n]),null}function mi(e){Ft(!1)}function LA(e){let{basename:t="/",children:r=null,location:n,navigationType:o=Ao.Pop,navigator:a,static:i=!1}=e;Ui()&&Ft(!1);let c=t.replace(/^\/*/,"/"),p=A.useMemo(()=>({basename:c,navigator:a,static:i}),[c,a,i]);typeof n=="string"&&(n=Wi(n));let{pathname:g="/",search:v="",hash:_="",state:O=null,key:C="default"}=n,T=A.useMemo(()=>{let x=ps(g,c);return x==null?null:{location:{pathname:x,search:v,hash:_,state:O,key:C},navigationType:o}},[c,g,v,_,O,C,o]);return T==null?null:A.createElement(ja.Provider,{value:p},A.createElement(Od.Provider,{children:r,value:T}))}function _g(e){let{children:t,location:r}=e;return CA(V0(t),r)}new Promise(()=>{});function V0(e,t){t===void 0&&(t=[]);let r=[];return A.Children.forEach(e,(n,o)=>{if(!A.isValidElement(n))return;let a=[...t,o];if(n.type===A.Fragment){r.push.apply(r,V0(n.props.children,a));return}n.type!==mi&&Ft(!1),!n.props.index||!n.props.children||Ft(!1);let i={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=V0(n.props.children,a)),r.push(i)}),r}/** - * React Router DOM v6.17.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Vc(){return Vc=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}function FA(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function VA(e,t){return e.button===0&&(!t||t==="_self")&&!FA(e)}const zA=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],BA=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],WA=A.createContext({isTransitioning:!1}),UA="startTransition",$y=kh[UA];function HA(e){let{basename:t,children:r,future:n,window:o}=e,a=A.useRef();a.current==null&&(a.current=Jj({window:o,v5Compat:!0}));let i=a.current,[c,p]=A.useState({action:i.action,location:i.location}),{v7_startTransition:g}=n||{},v=A.useCallback(_=>{g&&$y?$y(()=>p(_)):p(_)},[p,g]);return A.useLayoutEffect(()=>i.listen(v),[i,v]),A.createElement(LA,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:i})}const $A=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",qA=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,GA=A.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:a,replace:i,state:c,target:p,to:g,preventScrollReset:v,unstable_viewTransition:_}=t,O=HT(t,zA),{basename:C}=A.useContext(ja),T,x=!1;if(typeof g=="string"&&qA.test(g)&&(T=g,$A))try{let u=new URL(window.location.href),s=g.startsWith("//")?new URL(u.protocol+g):new URL(g),h=ps(s.pathname,C);s.origin===u.origin&&h!=null?g=h+s.search+s.hash:x=!0}catch{}let b=_A(g,{relative:o}),d=XA(g,{replace:i,state:c,target:p,preventScrollReset:v,relative:o,unstable_viewTransition:_});function l(u){n&&n(u),u.defaultPrevented||d(u)}return A.createElement("a",Vc({},O,{href:T||b,onClick:x||a?n:l,ref:r,target:p}))}),KA=A.forwardRef(function(t,r){let{"aria-current":n="page",caseSensitive:o=!1,className:a="",end:i=!1,style:c,to:p,unstable_viewTransition:g,children:v}=t,_=HT(t,BA),O=Sd(p,{relative:_.relative}),C=Aa(),T=A.useContext(FT),{navigator:x}=A.useContext(ja),b=T!=null&&QA(O)&&g===!0,d=x.encodeLocation?x.encodeLocation(O).pathname:O.pathname,l=C.pathname,u=T&&T.navigation&&T.navigation.location?T.navigation.location.pathname:null;o||(l=l.toLowerCase(),u=u?u.toLowerCase():null,d=d.toLowerCase());let s=l===d||!i&&l.startsWith(d)&&l.charAt(d.length)==="/",h=u!=null&&(u===d||!i&&u.startsWith(d)&&u.charAt(d.length)==="/"),m={isActive:s,isPending:h,isTransitioning:b},w=s?n:void 0,E;typeof a=="function"?E=a(m):E=[a,s?"active":null,h?"pending":null,b?"transitioning":null].filter(Boolean).join(" ");let k=typeof c=="function"?c(m):c;return A.createElement(GA,Vc({},_,{"aria-current":w,className:E,ref:r,style:k,to:p,unstable_viewTransition:g}),typeof v=="function"?v(m):v)});var z0;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(z0||(z0={}));var qy;(function(e){e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(qy||(qy={}));function YA(e){let t=A.useContext(Cd);return t||Ft(!1),t}function XA(e,t){let{target:r,replace:n,state:o,preventScrollReset:a,relative:i,unstable_viewTransition:c}=t===void 0?{}:t,p=BT(),g=Aa(),v=Sd(e,{relative:i});return A.useCallback(_=>{if(VA(_,r)){_.preventDefault();let O=n!==void 0?n:Dc(g)===Dc(v);p(e,{replace:O,state:o,preventScrollReset:a,relative:i,unstable_viewTransition:c})}},[g,p,v,n,o,r,e,a,i,c])}function QA(e,t){t===void 0&&(t={});let r=A.useContext(WA);r==null&&Ft(!1);let{basename:n}=YA(z0.useViewTransitionState),o=Sd(e,{relative:t.relative});if(!r.isTransitioning)return!1;let a=ps(r.currentLocation.pathname,n)||r.currentLocation.pathname,i=ps(r.nextLocation.pathname,n)||r.nextLocation.pathname;return F0(o.pathname,i)!=null||F0(o.pathname,a)!=null}function JA({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{fillRule:"evenodd",d:"M3 6.75A.75.75 0 013.75 6h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.75zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 5.25a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z",clipRule:"evenodd"}))}const ZA=A.forwardRef(JA),eM=ZA;function tM({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{fillRule:"evenodd",d:"M11.078 2.25c-.917 0-1.699.663-1.85 1.567L9.05 4.889c-.02.12-.115.26-.297.348a7.493 7.493 0 00-.986.57c-.166.115-.334.126-.45.083L6.3 5.508a1.875 1.875 0 00-2.282.819l-.922 1.597a1.875 1.875 0 00.432 2.385l.84.692c.095.078.17.229.154.43a7.598 7.598 0 000 1.139c.015.2-.059.352-.153.43l-.841.692a1.875 1.875 0 00-.432 2.385l.922 1.597a1.875 1.875 0 002.282.818l1.019-.382c.115-.043.283-.031.45.082.312.214.641.405.985.57.182.088.277.228.297.35l.178 1.071c.151.904.933 1.567 1.85 1.567h1.844c.916 0 1.699-.663 1.85-1.567l.178-1.072c.02-.12.114-.26.297-.349.344-.165.673-.356.985-.57.167-.114.335-.125.45-.082l1.02.382a1.875 1.875 0 002.28-.819l.923-1.597a1.875 1.875 0 00-.432-2.385l-.84-.692c-.095-.078-.17-.229-.154-.43a7.614 7.614 0 000-1.139c-.016-.2.059-.352.153-.43l.84-.692c.708-.582.891-1.59.433-2.385l-.922-1.597a1.875 1.875 0 00-2.282-.818l-1.02.382c-.114.043-.282.031-.449-.083a7.49 7.49 0 00-.985-.57c-.183-.087-.277-.227-.297-.348l-.179-1.072a1.875 1.875 0 00-1.85-1.567h-1.843zM12 15.75a3.75 3.75 0 100-7.5 3.75 3.75 0 000 7.5z",clipRule:"evenodd"}))}const rM=A.forwardRef(tM),$T=rM;function nM({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{fillRule:"evenodd",d:"M2.625 6.75a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zm4.875 0A.75.75 0 018.25 6h12a.75.75 0 010 1.5h-12a.75.75 0 01-.75-.75zM2.625 12a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zM7.5 12a.75.75 0 01.75-.75h12a.75.75 0 010 1.5h-12A.75.75 0 017.5 12zm-4.875 5.25a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zm4.875 0a.75.75 0 01.75-.75h12a.75.75 0 010 1.5h-12a.75.75 0 01-.75-.75z",clipRule:"evenodd"}))}const oM=A.forwardRef(nM),aM=oM;function iM({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{d:"M11.644 1.59a.75.75 0 01.712 0l9.75 5.25a.75.75 0 010 1.32l-9.75 5.25a.75.75 0 01-.712 0l-9.75-5.25a.75.75 0 010-1.32l9.75-5.25z"}),A.createElement("path",{d:"M3.265 10.602l7.668 4.129a2.25 2.25 0 002.134 0l7.668-4.13 1.37.739a.75.75 0 010 1.32l-9.75 5.25a.75.75 0 01-.71 0l-9.75-5.25a.75.75 0 010-1.32l1.37-.738z"}),A.createElement("path",{d:"M10.933 19.231l-7.668-4.13-1.37.739a.75.75 0 000 1.32l9.75 5.25c.221.12.489.12.71 0l9.75-5.25a.75.75 0 000-1.32l-1.37-.738-7.668 4.13a2.25 2.25 0 01-2.134-.001z"}))}const lM=A.forwardRef(iM),sM=lM;function uM({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{fillRule:"evenodd",d:"M12 6.75a5.25 5.25 0 016.775-5.025.75.75 0 01.313 1.248l-3.32 3.319c.063.475.276.934.641 1.299.365.365.824.578 1.3.64l3.318-3.319a.75.75 0 011.248.313 5.25 5.25 0 01-5.472 6.756c-1.018-.086-1.87.1-2.309.634L7.344 21.3A3.298 3.298 0 112.7 16.657l8.684-7.151c.533-.44.72-1.291.634-2.309A5.342 5.342 0 0112 6.75zM4.117 19.125a.75.75 0 01.75-.75h.008a.75.75 0 01.75.75v.008a.75.75 0 01-.75.75h-.008a.75.75 0 01-.75-.75v-.008z",clipRule:"evenodd"}),A.createElement("path",{d:"M10.076 8.64l-2.201-2.2V4.874a.75.75 0 00-.364-.643l-3.75-2.25a.75.75 0 00-.916.113l-.75.75a.75.75 0 00-.113.916l2.25 3.75a.75.75 0 00.643.364h1.564l2.062 2.062 1.575-1.297z"}),A.createElement("path",{fillRule:"evenodd",d:"M12.556 17.329l4.183 4.182a3.375 3.375 0 004.773-4.773l-3.306-3.305a6.803 6.803 0 01-1.53.043c-.394-.034-.682-.006-.867.042a.589.589 0 00-.167.063l-3.086 3.748zm3.414-1.36a.75.75 0 011.06 0l1.875 1.876a.75.75 0 11-1.06 1.06L15.97 17.03a.75.75 0 010-1.06z",clipRule:"evenodd"}))}const cM=A.forwardRef(uM),dM=cM;var xe={},qT={},GT={exports:{}};/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/(function(e){(function(){var t={}.hasOwnProperty;function r(){for(var n=[],o=0;oe&&(t=0,n=r,r=new Map)}return{get:function(a){var i=r.get(a);return i!==void 0?i:(i=n.get(a))!==void 0?(o(a,i),i):void 0},set:function(a,i){r.has(a)?r.set(a,i):o(a,i)}}}function hM(e){var t=e.separator||":";return function(r){for(var n=0,o=[],a=0,i=0;i1?t-1:0),n=1;np.length)&&(g=p.length);for(var v=0,_=new Array(g);vb.length)&&(d=b.length);for(var l=0,u=new Array(d);ll.length)&&(u=l.length);for(var s=0,h=new Array(u);sl.length)&&(u=l.length);for(var s=0,h=new Array(u);sw.length)&&(E=w.length);for(var k=0,P=new Array(E);ks.length)&&(h=s.length);for(var m=0,w=new Array(h);md.length)&&(l=d.length);for(var u=0,s=new Array(l);uh.length)&&(m=h.length);for(var w=0,E=new Array(m);wu.length)&&(s=u.length);for(var h=0,m=new Array(s);hC.length)&&(T=C.length);for(var x=0,b=new Array(T);xx.length)&&(b=x.length);for(var d=0,l=new Array(b);d"u"?c[g]=i.cloneUnlessOtherwiseSpecified(p,i):i.isMergeableObject(p)?c[g]=(0,t.default)(o[g],p,i):o.indexOf(p)===-1&&c.push(p)}),c}})(b5);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{MaterialTailwindTheme:function(){return v},ThemeProvider:function(){return _},useTheme:function(){return O}});var r=g(A),n=c(Fe),o=c(dr),a=c(Cg),i=c(b5);function c(C){return C&&C.__esModule?C:{default:C}}function p(C){if(typeof WeakMap!="function")return null;var T=new WeakMap,x=new WeakMap;return(p=function(b){return b?x:T})(C)}function g(C,T){if(!T&&C&&C.__esModule)return C;if(C===null||typeof C!="object"&&typeof C!="function")return{default:C};var x=p(T);if(x&&x.has(C))return x.get(C);var b={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in C)if(l!=="default"&&Object.prototype.hasOwnProperty.call(C,l)){var u=d?Object.getOwnPropertyDescriptor(C,l):null;u&&(u.get||u.set)?Object.defineProperty(b,l,u):b[l]=C[l]}return b.default=C,x&&x.set(C,b),b}var v=(0,r.createContext)(a.default);v.displayName="MaterialTailwindThemeProvider";function _(C){var T=C.value,x=T===void 0?a.default:T,b=C.children,d=(0,o.default)(a.default,x,{arrayMerge:i.default});return r.default.createElement(v.Provider,{value:d},b)}var O=function(){return(0,r.useContext)(v)};_.propTypes={value:n.default.instanceOf(Object),children:n.default.node.isRequired}})(Ne);var kd={},Ns={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(O,C){for(var T in C)Object.defineProperty(O,T,{enumerable:!0,get:C[T]})}t(e,{propTypesOpen:function(){return a},propTypesIcon:function(){return i},propTypesAnimate:function(){return c},propTypesDisabled:function(){return p},propTypesClassName:function(){return g},propTypesValue:function(){return v},propTypesChildren:function(){return _}});var r=o(Fe),n=Pt;function o(O){return O&&O.__esModule?O:{default:O}}var a=r.default.bool.isRequired,i=r.default.node,c=n.propTypesAnimation,p=r.default.bool,g=r.default.string,v=r.default.instanceOf(Object).isRequired,_=r.default.node.isRequired})(Ns);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(p,g){for(var v in g)Object.defineProperty(p,v,{enumerable:!0,get:g[v]})}t(e,{AccordionContext:function(){return a},useAccordion:function(){return i},AccordionContextProvider:function(){return c}});var r=o(A),n=Ns;function o(p){return p&&p.__esModule?p:{default:p}}var a=r.default.createContext(null);a.displayName="MaterialTailwind.AccordionContext";function i(){var p=r.default.useContext(a);if(!p)throw new Error("useAccordion() must be used within an Accordion. It happens when you use AccordionHeader or AccordionBody components outside the Accordion component.");return p}var c=function(p){var g=p.value,v=p.children;return r.default.createElement(a.Provider,{value:g},v)};c.propTypes={value:n.propTypesValue,children:n.propTypesChildren},c.displayName="MaterialTailwind.AccordionContextProvider"})(kd);var v5={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{AccordionHeader:function(){return T},default:function(){return x}});var r=_(A),n=_(He),o=Le,a=_(Ie),i=kd,c=Ne,p=Ns;function g(b,d,l){return d in b?Object.defineProperty(b,d,{value:l,enumerable:!0,configurable:!0,writable:!0}):b[d]=l,b}function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.className,u=b.children,s=O(b,["className","children"]),h=(0,i.useAccordion)(),m=h.open,w=h.icon,E=h.disabled,k=(0,c.useTheme)().accordion,P=k.styles.base;l=l??"";var N=(0,o.twMerge)((0,n.default)((0,a.default)(P.header.initial),g({},(0,a.default)(P.header.active),m)),l),j=(0,n.default)((0,a.default)(P.header.icon));return r.default.createElement("button",v({},s,{ref:d,type:"button",disabled:E,className:N}),u,r.default.createElement("span",{className:j},w??(m?r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M5 10a1 1 0 011-1h8a1 1 0 110 2H6a1 1 0 01-1-1z",clipRule:"evenodd"})):r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M10 5a1 1 0 011 1v3h3a1 1 0 110 2h-3v3a1 1 0 11-2 0v-3H6a1 1 0 110-2h3V6a1 1 0 011-1z",clipRule:"evenodd"})))))});T.propTypes={className:p.propTypesClassName,children:p.propTypesChildren},T.displayName="MaterialTailwind.AccordionHeader";var x=T})(v5);var m5={},ir={},H0=function(e,t){return H0=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},H0(e,t)};function y5(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");H0(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var Bc=function(){return Bc=Object.assign||function(t){for(var r,n=1,o=arguments.length;n=0;c--)(i=e[c])&&(a=(o<3?i(a):o>3?i(t,r,a):i(t,r))||a);return o>3&&a&&Object.defineProperty(t,r,a),a}function x5(e,t){return function(r,n){t(r,n,e)}}function _5(e,t,r,n,o,a){function i(d){if(d!==void 0&&typeof d!="function")throw new TypeError("Function expected");return d}for(var c=n.kind,p=c==="getter"?"get":c==="setter"?"set":"value",g=!t&&e?n.static?e:e.prototype:null,v=t||(g?Object.getOwnPropertyDescriptor(g,n.name):{}),_,O=!1,C=r.length-1;C>=0;C--){var T={};for(var x in n)T[x]=x==="access"?{}:n[x];for(var x in n.access)T.access[x]=n.access[x];T.addInitializer=function(d){if(O)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(d||null))};var b=(0,r[C])(c==="accessor"?{get:v.get,set:v.set}:v[p],T);if(c==="accessor"){if(b===void 0)continue;if(b===null||typeof b!="object")throw new TypeError("Object expected");(_=i(b.get))&&(v.get=_),(_=i(b.set))&&(v.set=_),(_=i(b.init))&&o.unshift(_)}else(_=i(b))&&(c==="field"?o.unshift(_):v[p]=_)}g&&Object.defineProperty(g,n.name,v),O=!0}function T5(e,t,r){for(var n=arguments.length>2,o=0;o0&&a[a.length-1])&&(g[0]===6||g[0]===2)){r=0;continue}if(g[0]===3&&(!a||g[1]>a[0]&&g[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function zg(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,a=[],i;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)a.push(o.value)}catch(c){i={error:c}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return a}function R5(){for(var e=[],t=0;t1||p(C,x)})},T&&(o[C]=T(o[C])))}function p(C,T){try{g(n[C](T))}catch(x){O(a[0][3],x)}}function g(C){C.value instanceof ji?Promise.resolve(C.value.v).then(v,_):O(a[0][2],C)}function v(C){p("next",C)}function _(C){p("throw",C)}function O(C,T){C(T),a.shift(),a.length&&p(a[0][0],a[0][1])}}function M5(e){var t,r;return t={},n("next"),n("throw",function(o){throw o}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(o,a){t[o]=e[o]?function(i){return(r=!r)?{value:ji(e[o](i)),done:!1}:a?a(i):i}:a}}function I5(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Wc=="function"?Wc(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(a){r[a]=e[a]&&function(i){return new Promise(function(c,p){i=e[a](i),o(c,p,i.done,i.value)})}}function o(a,i,c,p){Promise.resolve(p).then(function(g){a({value:g,done:c})},i)}}function D5(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var $M=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},$0=function(e){return $0=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},$0(e)};function L5(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=$0(e),n=0;nr=>Math.max(Math.min(r,t),e),Hl=e=>e%1?Number(e.toFixed(5)):e,gs=/(-)?([\d]*\.?[\d])+/g,q0=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,QM=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function js(e){return typeof e=="string"}const As={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Bg=Object.assign(Object.assign({},As),{transform:K5(0,1)}),JM=Object.assign(Object.assign({},As),{default:1}),Ms=e=>({test:t=>js(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),ZM=Ms("deg"),yi=Ms("%"),eI=Ms("px"),tI=Ms("vh"),rI=Ms("vw"),nI=Object.assign(Object.assign({},yi),{parse:e=>yi.parse(e)/100,transform:e=>yi.transform(e*100)}),Wg=(e,t)=>r=>!!(js(r)&&QM.test(r)&&r.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(r,t)),Y5=(e,t,r)=>n=>{if(!js(n))return n;const[o,a,i,c]=n.match(gs);return{[e]:parseFloat(o),[t]:parseFloat(a),[r]:parseFloat(i),alpha:c!==void 0?parseFloat(c):1}},Nl={test:Wg("hsl","hue"),parse:Y5("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:r,alpha:n=1})=>"hsla("+Math.round(e)+", "+yi.transform(Hl(t))+", "+yi.transform(Hl(r))+", "+Hl(Bg.transform(n))+")"},oI=K5(0,255),Ku=Object.assign(Object.assign({},As),{transform:e=>Math.round(oI(e))}),ci={test:Wg("rgb","red"),parse:Y5("red","green","blue"),transform:({red:e,green:t,blue:r,alpha:n=1})=>"rgba("+Ku.transform(e)+", "+Ku.transform(t)+", "+Ku.transform(r)+", "+Hl(Bg.transform(n))+")"};function aI(e){let t="",r="",n="",o="";return e.length>5?(t=e.substr(1,2),r=e.substr(3,2),n=e.substr(5,2),o=e.substr(7,2)):(t=e.substr(1,1),r=e.substr(2,1),n=e.substr(3,1),o=e.substr(4,1),t+=t,r+=r,n+=n,o+=o),{red:parseInt(t,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:o?parseInt(o,16)/255:1}}const G0={test:Wg("#"),parse:aI,transform:ci.transform},Ug={test:e=>ci.test(e)||G0.test(e)||Nl.test(e),parse:e=>ci.test(e)?ci.parse(e):Nl.test(e)?Nl.parse(e):G0.parse(e),transform:e=>js(e)?e:e.hasOwnProperty("red")?ci.transform(e):Nl.transform(e)},X5="${c}",Q5="${n}";function iI(e){var t,r,n,o;return isNaN(e)&&js(e)&&((r=(t=e.match(gs))===null||t===void 0?void 0:t.length)!==null&&r!==void 0?r:0)+((o=(n=e.match(q0))===null||n===void 0?void 0:n.length)!==null&&o!==void 0?o:0)>0}function J5(e){typeof e=="number"&&(e=`${e}`);const t=[];let r=0;const n=e.match(q0);n&&(r=n.length,e=e.replace(q0,X5),t.push(...n.map(Ug.parse)));const o=e.match(gs);return o&&(e=e.replace(gs,Q5),t.push(...o.map(As.parse))),{values:t,numColors:r,tokenised:e}}function Z5(e){return J5(e).values}function eO(e){const{values:t,numColors:r,tokenised:n}=J5(e),o=t.length;return a=>{let i=n;for(let c=0;ctypeof e=="number"?0:e;function sI(e){const t=Z5(e);return eO(e)(t.map(lI))}const tO={test:iI,parse:Z5,createTransformer:eO,getAnimatableNone:sI},uI=new Set(["brightness","contrast","saturate","opacity"]);function cI(e){let[t,r]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[n]=r.match(gs)||[];if(!n)return e;const o=r.replace(n,"");let a=uI.has(t)?1:0;return n!==r&&(a*=100),t+"("+a+o+")"}const dI=/([a-z-]*)\(.*?\)/g,fI=Object.assign(Object.assign({},tO),{getAnimatableNone:e=>{const t=e.match(dI);return t?t.map(cI).join(" "):e}});Jt.alpha=Bg;Jt.color=Ug;Jt.complex=tO;Jt.degrees=ZM;Jt.filter=fI;Jt.hex=G0;Jt.hsla=Nl;Jt.number=As;Jt.percent=yi;Jt.progressPercentage=nI;Jt.px=eI;Jt.rgbUnit=Ku;Jt.rgba=ci;Jt.scale=JM;Jt.vh=tI;Jt.vw=rI;var Be={},La={};Object.defineProperty(La,"__esModule",{value:!0});const rO=1/60*1e3,pI=typeof performance<"u"?()=>performance.now():()=>Date.now(),nO=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(pI()),rO);function hI(e){let t=[],r=[],n=0,o=!1,a=!1;const i=new WeakSet,c={schedule:(p,g=!1,v=!1)=>{const _=v&&o,O=_?t:r;return g&&i.add(p),O.indexOf(p)===-1&&(O.push(p),_&&o&&(n=t.length)),p},cancel:p=>{const g=r.indexOf(p);g!==-1&&r.splice(g,1),i.delete(p)},process:p=>{if(o){a=!0;return}if(o=!0,[t,r]=[r,t],r.length=0,n=t.length,n)for(let g=0;g(e[t]=hI(()=>bs=!0),e),{}),bI=Is.reduce((e,t)=>{const r=Rd[t];return e[t]=(n,o=!1,a=!1)=>(bs||wI(),r.schedule(n,o,a)),e},{}),vI=Is.reduce((e,t)=>(e[t]=Rd[t].cancel,e),{}),mI=Is.reduce((e,t)=>(e[t]=()=>Rd[t].process(wi),e),{}),yI=e=>Rd[e].process(wi),oO=e=>{bs=!1,wi.delta=K0?rO:Math.max(Math.min(e-wi.timestamp,gI),1),wi.timestamp=e,Y0=!0,Is.forEach(yI),Y0=!1,bs&&(K0=!1,nO(oO))},wI=()=>{bs=!0,K0=!0,Y0||nO(oO)},xI=()=>wi;La.cancelSync=vI;La.default=bI;La.flushSync=mI;La.getFrameData=xI;Object.defineProperty(Be,"__esModule",{value:!0});var aO=$5,Ai=G5,wn=Jt,Nd=La;function _I(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var TI=_I(Nd);const vs=(e,t,r)=>Math.min(Math.max(r,e),t),vp=.001,CI=.01,Qy=10,OI=.05,SI=1;function PI({duration:e=800,bounce:t=.25,velocity:r=0,mass:n=1}){let o,a;Ai.warning(e<=Qy*1e3,"Spring duration must be 10 seconds or less");let i=1-t;i=vs(OI,SI,i),e=vs(CI,Qy,e/1e3),i<1?(o=g=>{const v=g*i,_=v*e,O=v-r,C=X0(g,i),T=Math.exp(-_);return vp-O/C*T},a=g=>{const _=g*i*e,O=_*r+r,C=Math.pow(i,2)*Math.pow(g,2)*e,T=Math.exp(-_),x=X0(Math.pow(g,2),i);return(-o(g)+vp>0?-1:1)*((O-C)*T)/x}):(o=g=>{const v=Math.exp(-g*e),_=(g-r)*e+1;return-vp+v*_},a=g=>{const v=Math.exp(-g*e),_=(r-g)*(e*e);return v*_});const c=5/e,p=EI(o,a,c);if(e=e*1e3,isNaN(p))return{stiffness:100,damping:10,duration:e};{const g=Math.pow(p,2)*n;return{stiffness:g,damping:i*2*Math.sqrt(n*g),duration:e}}}const kI=12;function EI(e,t,r){let n=r;for(let o=1;oe[r]!==void 0)}function jI(e){let t=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},e);if(!Jy(e,NI)&&Jy(e,RI)){const r=PI(e);t=Object.assign(Object.assign(Object.assign({},t),r),{velocity:0,mass:1}),t.isResolvedFromDuration=!0}return t}function jd(e){var{from:t=0,to:r=1,restSpeed:n=2,restDelta:o}=e,a=aO.__rest(e,["from","to","restSpeed","restDelta"]);const i={done:!1,value:t};let{stiffness:c,damping:p,mass:g,velocity:v,duration:_,isResolvedFromDuration:O}=jI(a),C=Zy,T=Zy;function x(){const b=v?-(v/1e3):0,d=r-t,l=p/(2*Math.sqrt(c*g)),u=Math.sqrt(c/g)/1e3;if(o===void 0&&(o=Math.min(Math.abs(r-t)/100,.4)),l<1){const s=X0(u,l);C=h=>{const m=Math.exp(-l*u*h);return r-m*((b+l*u*d)/s*Math.sin(s*h)+d*Math.cos(s*h))},T=h=>{const m=Math.exp(-l*u*h);return l*u*m*(Math.sin(s*h)*(b+l*u*d)/s+d*Math.cos(s*h))-m*(Math.cos(s*h)*(b+l*u*d)-s*d*Math.sin(s*h))}}else if(l===1)C=s=>r-Math.exp(-u*s)*(d+(b+u*d)*s);else{const s=u*Math.sqrt(l*l-1);C=h=>{const m=Math.exp(-l*u*h),w=Math.min(s*h,300);return r-m*((b+l*u*d)*Math.sinh(w)+s*d*Math.cosh(w))/s}}}return x(),{next:b=>{const d=C(b);if(O)i.done=b>=_;else{const l=T(b)*1e3,u=Math.abs(l)<=n,s=Math.abs(r-d)<=o;i.done=u&&s}return i.value=i.done?r:d,i},flipTarget:()=>{v=-v,[t,r]=[r,t],x()}}}jd.needsInterpolation=(e,t)=>typeof e=="string"||typeof t=="string";const Zy=e=>0,Hg=(e,t,r)=>{const n=t-e;return n===0?1:(r-e)/n},Ad=(e,t,r)=>-r*e+r*t+e;function mp(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function ew({hue:e,saturation:t,lightness:r,alpha:n}){e/=360,t/=100,r/=100;let o=0,a=0,i=0;if(!t)o=a=i=r;else{const c=r<.5?r*(1+t):r+t-r*t,p=2*r-c;o=mp(p,c,e+1/3),a=mp(p,c,e),i=mp(p,c,e-1/3)}return{red:Math.round(o*255),green:Math.round(a*255),blue:Math.round(i*255),alpha:n}}const AI=(e,t,r)=>{const n=e*e,o=t*t;return Math.sqrt(Math.max(0,r*(o-n)+n))},MI=[wn.hex,wn.rgba,wn.hsla],tw=e=>MI.find(t=>t.test(e)),rw=e=>`'${e}' is not an animatable color. Use the equivalent color code instead.`,$g=(e,t)=>{let r=tw(e),n=tw(t);Ai.invariant(!!r,rw(e)),Ai.invariant(!!n,rw(t));let o=r.parse(e),a=n.parse(t);r===wn.hsla&&(o=ew(o),r=wn.rgba),n===wn.hsla&&(a=ew(a),n=wn.rgba);const i=Object.assign({},o);return c=>{for(const p in i)p!=="alpha"&&(i[p]=AI(o[p],a[p],c));return i.alpha=Ad(o.alpha,a.alpha,c),r.transform(i)}},II={x:0,y:0,z:0},Q0=e=>typeof e=="number",DI=(e,t)=>r=>t(e(r)),qg=(...e)=>e.reduce(DI);function iO(e,t){return Q0(e)?r=>Ad(e,t,r):wn.color.test(e)?$g(e,t):Gg(e,t)}const lO=(e,t)=>{const r=[...e],n=r.length,o=e.map((a,i)=>iO(a,t[i]));return a=>{for(let i=0;i{const r=Object.assign(Object.assign({},e),t),n={};for(const o in r)e[o]!==void 0&&t[o]!==void 0&&(n[o]=iO(e[o],t[o]));return o=>{for(const a in n)r[a]=n[a](o);return r}};function nw(e){const t=wn.complex.parse(e),r=t.length;let n=0,o=0,a=0;for(let i=0;i{const r=wn.complex.createTransformer(t),n=nw(e),o=nw(t);return n.numHSL===o.numHSL&&n.numRGB===o.numRGB&&n.numNumbers>=o.numNumbers?qg(lO(n.parsed,o.parsed),r):(Ai.warning(!0,`Complex values '${e}' and '${t}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),i=>`${i>0?t:e}`)},FI=(e,t)=>r=>Ad(e,t,r);function VI(e){if(typeof e=="number")return FI;if(typeof e=="string")return wn.color.test(e)?$g:Gg;if(Array.isArray(e))return lO;if(typeof e=="object")return LI}function zI(e,t,r){const n=[],o=r||VI(e[0]),a=e.length-1;for(let i=0;ir(Hg(e,t,n))}function WI(e,t){const r=e.length,n=r-1;return o=>{let a=0,i=!1;if(o<=e[0]?i=!0:o>=e[n]&&(a=n-1,i=!0),!i){let p=1;for(;po||p===n);p++);a=p-1}const c=Hg(e[a],e[a+1],o);return t[a](c)}}function Kg(e,t,{clamp:r=!0,ease:n,mixer:o}={}){const a=e.length;Ai.invariant(a===t.length,"Both input and output ranges must be the same length"),Ai.invariant(!n||!Array.isArray(n)||n.length===a-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),e[0]>e[a-1]&&(e=[].concat(e),t=[].concat(t),e.reverse(),t.reverse());const i=zI(t,n,o),c=a===2?BI(e,i):WI(e,i);return r?p=>c(vs(e[0],e[a-1],p)):c}const Ds=e=>t=>1-e(1-t),Md=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,sO=e=>t=>Math.pow(t,e),Yg=e=>t=>t*t*((e+1)*t-e),uO=e=>{const t=Yg(e);return r=>(r*=2)<1?.5*t(r):.5*(2-Math.pow(2,-10*(r-1)))},cO=1.525,UI=4/11,HI=8/11,$I=9/10,dO=e=>e,Xg=sO(2),qI=Ds(Xg),fO=Md(Xg),pO=e=>1-Math.sin(Math.acos(e)),hO=Ds(pO),GI=Md(hO),Qg=Yg(cO),KI=Ds(Qg),YI=Md(Qg),XI=uO(cO),QI=4356/361,JI=35442/1805,ZI=16061/1805,Uc=e=>{if(e===1||e===0)return e;const t=e*e;return ee<.5?.5*(1-Uc(1-e*2)):.5*Uc(e*2-1)+.5;function rD(e,t){return e.map(()=>t||fO).splice(0,e.length-1)}function nD(e){const t=e.length;return e.map((r,n)=>n!==0?n/(t-1):0)}function oD(e,t){return e.map(r=>r*t)}function $l({from:e=0,to:t=1,ease:r,offset:n,duration:o=300}){const a={done:!1,value:e},i=Array.isArray(t)?t:[e,t],c=oD(n&&n.length===i.length?n:nD(i),o);function p(){return Kg(c,i,{ease:Array.isArray(r)?r:rD(i,r)})}let g=p();return{next:v=>(a.value=g(v),a.done=v>=o,a),flipTarget:()=>{i.reverse(),g=p()}}}function gO({velocity:e=0,from:t=0,power:r=.8,timeConstant:n=350,restDelta:o=.5,modifyTarget:a}){const i={done:!1,value:t};let c=r*e;const p=t+c,g=a===void 0?p:a(p);return g!==p&&(c=g-t),{next:v=>{const _=-c*Math.exp(-v/n);return i.done=!(_>o||_<-o),i.value=i.done?g:g+_,i},flipTarget:()=>{}}}const ow={keyframes:$l,spring:jd,decay:gO};function aD(e){if(Array.isArray(e.to))return $l;if(ow[e.type])return ow[e.type];const t=new Set(Object.keys(e));return t.has("ease")||t.has("duration")&&!t.has("dampingRatio")?$l:t.has("dampingRatio")||t.has("stiffness")||t.has("mass")||t.has("damping")||t.has("restSpeed")||t.has("restDelta")?jd:$l}function bO(e,t,r=0){return e-t-r}function iD(e,t,r=0,n=!0){return n?bO(t+-e,t,r):t-(e-t)+r}function lD(e,t,r,n){return n?e>=t+r:e<=-r}const sD=e=>{const t=({delta:r})=>e(r);return{start:()=>TI.default.update(t,!0),stop:()=>Nd.cancelSync.update(t)}};function vO(e){var t,r,{from:n,autoplay:o=!0,driver:a=sD,elapsed:i=0,repeat:c=0,repeatType:p="loop",repeatDelay:g=0,onPlay:v,onStop:_,onComplete:O,onRepeat:C,onUpdate:T}=e,x=aO.__rest(e,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let{to:b}=x,d,l=0,u=x.duration,s,h=!1,m=!0,w;const E=aD(x);!((r=(t=E).needsInterpolation)===null||r===void 0)&&r.call(t,n,b)&&(w=Kg([0,100],[n,b],{clamp:!1}),n=0,b=100);const k=E(Object.assign(Object.assign({},x),{from:n,to:b}));function P(){l++,p==="reverse"?(m=l%2===0,i=iD(i,u,g,m)):(i=bO(i,u,g),p==="mirror"&&k.flipTarget()),h=!1,C&&C()}function N(){d.stop(),O&&O()}function j(F){if(m||(F=-F),i+=F,!h){const W=k.next(Math.max(0,i));s=W.value,w&&(s=w(s)),h=m?W.done:i<=0}T==null||T(s),h&&(l===0&&(u??(u=i)),l{_==null||_(),d.stop()}}}function mO(e,t){return t?e*(1e3/t):0}function uD({from:e=0,velocity:t=0,min:r,max:n,power:o=.8,timeConstant:a=750,bounceStiffness:i=500,bounceDamping:c=10,restDelta:p=1,modifyTarget:g,driver:v,onUpdate:_,onComplete:O,onStop:C}){let T;function x(u){return r!==void 0&&un}function b(u){return r===void 0?n:n===void 0||Math.abs(r-u){var h;_==null||_(s),(h=u.onUpdate)===null||h===void 0||h.call(u,s)},onComplete:O,onStop:C}))}function l(u){d(Object.assign({type:"spring",stiffness:i,damping:c,restDelta:p},u))}if(x(e))l({from:e,velocity:t,to:b(e)});else{let u=o*t+e;typeof g<"u"&&(u=g(u));const s=b(u),h=s===r?-1:1;let m,w;const E=k=>{m=w,w=k,t=mO(k-m,Nd.getFrameData().delta),(h===1&&k>s||h===-1&&kT==null?void 0:T.stop()}}const yO=e=>e*180/Math.PI,cD=(e,t=II)=>yO(Math.atan2(t.y-e.y,t.x-e.x)),dD=(e,t)=>{let r=!0;return t===void 0&&(t=e,r=!1),n=>r?n-e+t:(e=n,r=!0,t)},fD=e=>e,Jg=(e=fD)=>(t,r,n)=>{const o=r-n,a=-(0-t+1)*(0-e(Math.abs(o)));return o<=0?r+a:r-a},pD=Jg(),hD=Jg(Math.sqrt),wO=e=>e*Math.PI/180,Hc=e=>e.hasOwnProperty("x")&&e.hasOwnProperty("y"),J0=e=>Hc(e)&&e.hasOwnProperty("z"),Tu=(e,t)=>Math.abs(e-t);function gD(e,t){if(Q0(e)&&Q0(t))return Tu(e,t);if(Hc(e)&&Hc(t)){const r=Tu(e.x,t.x),n=Tu(e.y,t.y),o=J0(e)&&J0(t)?Tu(e.z,t.z):0;return Math.sqrt(Math.pow(r,2)+Math.pow(n,2)+Math.pow(o,2))}}const bD=(e,t,r)=>(t=wO(t),{x:r*Math.cos(t)+e.x,y:r*Math.sin(t)+e.y}),xO=(e,t=2)=>(t=Math.pow(10,t),Math.round(e*t)/t),_O=(e,t,r,n=0)=>xO(e+r*(t-e)/Math.max(n,r)),vD=(e=50)=>{let t=0,r=0;return n=>{const o=Nd.getFrameData().timestamp,a=o!==r?o-r:0,i=a?_O(t,n,a,e):t;return r=o,t=i,i}},mD=e=>{if(typeof e=="number")return t=>Math.round(t/e)*e;{let t=0;const r=e.length;return n=>{let o=Math.abs(e[0]-n);for(t=1;to)return e[t-1];if(t===r-1)return a;o=i}}}};function yD(e,t){return e/(1e3/t)}const wD=(e,t,r)=>{const n=t-e;return((r-e)%n+n)%n+e},TO=(e,t)=>1-3*t+3*e,CO=(e,t)=>3*t-6*e,OO=e=>3*e,$c=(e,t,r)=>((TO(t,r)*e+CO(t,r))*e+OO(t))*e,SO=(e,t,r)=>3*TO(t,r)*e*e+2*CO(t,r)*e+OO(t),xD=1e-7,_D=10;function TD(e,t,r,n,o){let a,i,c=0;do i=t+(r-t)/2,a=$c(i,n,o)-e,a>0?r=i:t=i;while(Math.abs(a)>xD&&++c<_D);return i}const CD=8,OD=.001;function SD(e,t,r,n){for(let o=0;o=OD?SD(i,_,e,r):O===0?_:TD(i,c,c+Cu,e,r)}return i=>i===0||i===1?i:$c(a(i),t,n)}const kD=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);const n=r*e,o=t==="end"?Math.floor(n):Math.ceil(n);return vs(0,1,o/e)};Be.angle=cD;Be.animate=vO;Be.anticipate=XI;Be.applyOffset=dD;Be.attract=pD;Be.attractExpo=hD;Be.backIn=Qg;Be.backInOut=YI;Be.backOut=KI;Be.bounceIn=eD;Be.bounceInOut=tD;Be.bounceOut=Uc;Be.circIn=pO;Be.circInOut=GI;Be.circOut=hO;Be.clamp=vs;Be.createAnticipate=uO;Be.createAttractor=Jg;Be.createBackIn=Yg;Be.createExpoIn=sO;Be.cubicBezier=PD;Be.decay=gO;Be.degreesToRadians=wO;Be.distance=gD;Be.easeIn=Xg;Be.easeInOut=fO;Be.easeOut=qI;Be.inertia=uD;Be.interpolate=Kg;Be.isPoint=Hc;Be.isPoint3D=J0;Be.keyframes=$l;Be.linear=dO;Be.mirrorEasing=Md;Be.mix=Ad;Be.mixColor=$g;Be.mixComplex=Gg;Be.pipe=qg;Be.pointFromVector=bD;Be.progress=Hg;Be.radiansToDegrees=yO;Be.reverseEasing=Ds;Be.smooth=vD;Be.smoothFrame=_O;Be.snap=mD;Be.spring=jd;Be.steps=kD;Be.toDecimal=xO;Be.velocityPerFrame=yD;Be.velocityPerSecond=mO;Be.wrap=wD;class ED{setAnimation(t){this.animation=t,t==null||t.finished.then(()=>this.clearAnimation()).catch(()=>{})}clearAnimation(){this.animation=this.generator=void 0}}const yp=new WeakMap;function Zg(e){return yp.has(e)||yp.set(e,{transforms:[],values:new Map}),yp.get(e)}function RD(e,t){return e.has(t)||e.set(t,new ED),e.get(t)}function PO(e,t){e.indexOf(t)===-1&&e.push(t)}function kO(e,t){const r=e.indexOf(t);r>-1&&e.splice(r,1)}const EO=(e,t,r)=>Math.min(Math.max(r,e),t),Rr={duration:.3,delay:0,endDelay:0,repeat:0,easing:"ease"},io=e=>typeof e=="number",ms=e=>Array.isArray(e)&&!io(e[0]),ND=(e,t,r)=>{const n=t-e;return((r-e)%n+n)%n+e};function RO(e,t){return ms(e)?e[ND(0,e.length,t)]:e}const eb=(e,t,r)=>-r*e+r*t+e,tb=()=>{},Zn=e=>e,Id=(e,t,r)=>t-e===0?1:(r-e)/(t-e);function rb(e,t){const r=e[e.length-1];for(let n=1;n<=t;n++){const o=Id(0,t,n);e.push(eb(r,1,o))}}function nb(e){const t=[0];return rb(t,e-1),t}function NO(e,t=nb(e.length),r=Zn){const n=e.length,o=n-t.length;return o>0&&rb(t,o),a=>{let i=0;for(;iArray.isArray(e)&&io(e[0]),qc=e=>typeof e=="object"&&!!e.createAnimation,jD=e=>typeof e=="function",ob=e=>typeof e=="string",ya={ms:e=>e*1e3,s:e=>e/1e3};function AO(e,t){return t?e*(1e3/t):0}const AD=["","X","Y","Z"],MD=["translate","scale","rotate","skew"],Mi={x:"translateX",y:"translateY",z:"translateZ"},aw={syntax:"",initialValue:"0deg",toDefaultUnit:e=>e+"deg"},ID={translate:{syntax:"",initialValue:"0px",toDefaultUnit:e=>e+"px"},rotate:aw,scale:{syntax:"",initialValue:1,toDefaultUnit:Zn},skew:aw},Ii=new Map,Dd=e=>`--motion-${e}`,Gc=["x","y","z"];MD.forEach(e=>{AD.forEach(t=>{Gc.push(e+t),Ii.set(Dd(e+t),ID[e])})});const DD=(e,t)=>Gc.indexOf(e)-Gc.indexOf(t),LD=new Set(Gc),Ld=e=>LD.has(e),FD=(e,t)=>{Mi[t]&&(t=Mi[t]);const{transforms:r}=Zg(e);PO(r,t),e.style.transform=MO(r)},MO=e=>e.sort(DD).reduce(VD,"").trim(),VD=(e,t)=>`${e} ${t}(var(${Dd(t)}))`,Z0=e=>e.startsWith("--"),iw=new Set;function zD(e){if(!iw.has(e)){iw.add(e);try{const{syntax:t,initialValue:r}=Ii.has(e)?Ii.get(e):{};CSS.registerProperty({name:e,inherits:!1,syntax:t,initialValue:r})}catch{}}}const IO=(e,t,r)=>(((1-3*r+3*t)*e+(3*r-6*t))*e+3*t)*e,BD=1e-7,WD=12;function UD(e,t,r,n,o){let a,i,c=0;do i=t+(r-t)/2,a=IO(i,n,o)-e,a>0?r=i:t=i;while(Math.abs(a)>BD&&++cUD(a,0,1,e,r);return a=>a===0||a===1?a:IO(o(a),t,n)}const HD=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);const n=r*e,o=t==="end"?Math.floor(n):Math.ceil(n);return EO(0,1,o/e)},$D={ease:jl(.25,.1,.25,1),"ease-in":jl(.42,0,1,1),"ease-in-out":jl(.42,0,.58,1),"ease-out":jl(0,0,.58,1)},qD=/\((.*?)\)/;function eh(e){if(jD(e))return e;if(jO(e))return jl(...e);const t=$D[e];if(t)return t;if(e.startsWith("steps")){const r=qD.exec(e);if(r){const n=r[1].split(",");return HD(parseFloat(n[0]),n[1].trim())}}return Zn}class GD{constructor(t,r=[0,1],{easing:n,duration:o=Rr.duration,delay:a=Rr.delay,endDelay:i=Rr.endDelay,repeat:c=Rr.repeat,offset:p,direction:g="normal",autoplay:v=!0}={}){if(this.startTime=null,this.rate=1,this.t=0,this.cancelTimestamp=null,this.easing=Zn,this.duration=0,this.totalDuration=0,this.repeat=0,this.playState="idle",this.finished=new Promise((O,C)=>{this.resolve=O,this.reject=C}),n=n||Rr.easing,qc(n)){const O=n.createAnimation(r);n=O.easing,r=O.keyframes||r,o=O.duration||o}this.repeat=c,this.easing=ms(n)?Zn:eh(n),this.updateDuration(o);const _=NO(r,p,ms(n)?n.map(eh):Zn);this.tick=O=>{var C;a=a;let T=0;this.pauseTime!==void 0?T=this.pauseTime:T=(O-this.startTime)*this.rate,this.t=T,T/=1e3,T=Math.max(T-a,0),this.playState==="finished"&&this.pauseTime===void 0&&(T=this.totalDuration);const x=T/this.duration;let b=Math.floor(x),d=x%1;!d&&x>=1&&(d=1),d===1&&b--;const l=b%2;(g==="reverse"||g==="alternate"&&l||g==="alternate-reverse"&&!l)&&(d=1-d);const u=T>=this.totalDuration?1:Math.min(d,1),s=_(this.easing(u));t(s),this.pauseTime===void 0&&(this.playState==="finished"||T>=this.totalDuration+i)?(this.playState="finished",(C=this.resolve)===null||C===void 0||C.call(this,s)):this.playState!=="idle"&&(this.frameRequestId=requestAnimationFrame(this.tick))},v&&this.play()}play(){const t=performance.now();this.playState="running",this.pauseTime!==void 0?this.startTime=t-this.pauseTime:this.startTime||(this.startTime=t),this.cancelTimestamp=this.startTime,this.pauseTime=void 0,this.frameRequestId=requestAnimationFrame(this.tick)}pause(){this.playState="paused",this.pauseTime=this.t}finish(){this.playState="finished",this.tick(0)}stop(){var t;this.playState="idle",this.frameRequestId!==void 0&&cancelAnimationFrame(this.frameRequestId),(t=this.reject)===null||t===void 0||t.call(this,!1)}cancel(){this.stop(),this.tick(this.cancelTimestamp)}reverse(){this.rate*=-1}commitStyles(){}updateDuration(t){this.duration=t,this.totalDuration=t*(this.repeat+1)}get currentTime(){return this.t}set currentTime(t){this.pauseTime!==void 0||this.rate===0?this.pauseTime=t:this.startTime=performance.now()-t/this.rate}get playbackRate(){return this.rate}set playbackRate(t){this.rate=t}}const lw=e=>jO(e)?KD(e):e,KD=([e,t,r,n])=>`cubic-bezier(${e}, ${t}, ${r}, ${n})`,sw=e=>document.createElement("div").animate(e,{duration:.001}),uw={cssRegisterProperty:()=>typeof CSS<"u"&&Object.hasOwnProperty.call(CSS,"registerProperty"),waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate"),partialKeyframes:()=>{try{sw({opacity:[1]})}catch{return!1}return!0},finished:()=>!!sw({opacity:[0,1]}).finished},wp={},Xu={};for(const e in uw)Xu[e]=()=>(wp[e]===void 0&&(wp[e]=uw[e]()),wp[e]);function YD(e,t){for(let r=0;rArray.isArray(e)?e:[e];function Kc(e){return Mi[e]&&(e=Mi[e]),Ld(e)?Dd(e):e}const di={get:(e,t)=>{t=Kc(t);let r=Z0(t)?e.style.getPropertyValue(t):getComputedStyle(e)[t];if(!r&&r!==0){const n=Ii.get(t);n&&(r=n.initialValue)}return r},set:(e,t,r)=>{t=Kc(t),Z0(t)?e.style.setProperty(t,r):e.style[t]=r}};function LO(e,t=!0){if(!(!e||e.playState==="finished"))try{e.stop?e.stop():(t&&e.commitStyles(),e.cancel())}catch{}}function XD(){return window.__MOTION_DEV_TOOLS_RECORD}function Fd(e,t,r,n={}){const o=XD(),a=n.record!==!1&&o;let i,{duration:c=Rr.duration,delay:p=Rr.delay,endDelay:g=Rr.endDelay,repeat:v=Rr.repeat,easing:_=Rr.easing,direction:O,offset:C,allowWebkitAcceleration:T=!1}=n;const x=Zg(e);let b=Xu.waapi();const d=Ld(t);d&&FD(e,t);const l=Kc(t),u=RD(x.values,l),s=Ii.get(l);return LO(u.animation,!(qc(_)&&u.generator)&&n.record!==!1),()=>{const h=()=>{var w,E;return(E=(w=di.get(e,l))!==null&&w!==void 0?w:s==null?void 0:s.initialValue)!==null&&E!==void 0?E:0};let m=YD(DO(r),h);if(qc(_)){const w=_.createAnimation(m,h,d,l,u);_=w.easing,w.keyframes!==void 0&&(m=w.keyframes),w.duration!==void 0&&(c=w.duration)}if(Z0(l)&&(Xu.cssRegisterProperty()?zD(l):b=!1),b){s&&(m=m.map(k=>io(k)?s.toDefaultUnit(k):k)),m.length===1&&(!Xu.partialKeyframes()||a)&&m.unshift(h());const w={delay:ya.ms(p),duration:ya.ms(c),endDelay:ya.ms(g),easing:ms(_)?void 0:lw(_),direction:O,iterations:v+1,fill:"both"};i=e.animate({[l]:m,offset:C,easing:ms(_)?_.map(lw):void 0},w),i.finished||(i.finished=new Promise((k,P)=>{i.onfinish=k,i.oncancel=P}));const E=m[m.length-1];i.finished.then(()=>{di.set(e,l,E),i.cancel()}).catch(tb),T||(i.playbackRate=1.000001)}else if(d){m=m.map(E=>typeof E=="string"?parseFloat(E):E),m.length===1&&m.unshift(parseFloat(h()));const w=E=>{s&&(E=s.toDefaultUnit(E)),di.set(e,l,E)};i=new GD(w,m,Object.assign(Object.assign({},n),{duration:c,easing:_}))}else{const w=m[m.length-1];di.set(e,l,s&&io(w)?s.toDefaultUnit(w):w)}return a&&o(e,t,m,{duration:c,delay:p,easing:_,repeat:v,offset:C},"motion-one"),u.setAnimation(i),i}}const ab=(e,t)=>e[t]?Object.assign(Object.assign({},e),e[t]):Object.assign({},e);function Vd(e,t){var r;return typeof e=="string"?t?((r=t[e])!==null&&r!==void 0||(t[e]=document.querySelectorAll(e)),e=t[e]):e=document.querySelectorAll(e):e instanceof Element&&(e=[e]),Array.from(e||[])}const QD=e=>e(),ib=(e,t,r=Rr.duration)=>new Proxy({animations:e.map(QD).filter(Boolean),duration:r,options:t},ZD),JD=e=>e.animations[0],ZD={get:(e,t)=>{const r=JD(e);switch(t){case"duration":return e.duration;case"currentTime":return ya.s((r==null?void 0:r[t])||0);case"playbackRate":case"playState":return r==null?void 0:r[t];case"finished":return e.finished||(e.finished=Promise.all(e.animations.map(eL)).catch(tb)),e.finished;case"stop":return()=>{e.animations.forEach(n=>LO(n))};case"forEachNative":return n=>{e.animations.forEach(o=>n(o,e))};default:return typeof(r==null?void 0:r[t])>"u"?void 0:()=>e.animations.forEach(n=>n[t]())}},set:(e,t,r)=>{switch(t){case"currentTime":r=ya.ms(r);case"currentTime":case"playbackRate":for(let n=0;ne.finished;function tL(e=.1,{start:t=0,from:r=0,easing:n}={}){return(o,a)=>{const i=io(r)?r:rL(r,a),c=Math.abs(i-o);let p=e*c;if(n){const g=a*e;p=eh(n)(p/g)*g}return t+p}}function rL(e,t){if(e==="first")return 0;{const r=t-1;return e==="last"?r:r/2}}function FO(e,t,r){return typeof e=="function"?e(t,r):e}function nL(e,t,r={}){e=Vd(e);const n=e.length,o=[];for(let a=0;at&&o.atFd(...a)).filter(Boolean);return ib(o,t,(r=n[0])===null||r===void 0?void 0:r[3].duration)}function sL(e,t={}){var{defaultOptions:r={}}=t,n=$i(t,["defaultOptions"]);const o=[],a=new Map,i={},c=new Map;let p=0,g=0,v=0;for(let _=0;_"0",X);N=H.easing,H.keyframes!==void 0&&(E=H.keyframes),H.duration!==void 0&&(P=H.duration)}const j=FO(x.delay,u,l)||0,I=g+j,F=I+P;let{offset:W=nb(E.length)}=k;W.length===1&&W[0]===0&&(W[1]=1);const G=length-E.length;G>0&&rb(W,G),E.length===1&&E.unshift(null),aL(w,E,N,W,I,F),b=Math.max(j+P,b),v=Math.max(F,v)}}p=g,g+=b}return a.forEach((_,O)=>{for(const C in _){const T=_[C];T.sort(iL);const x=[],b=[],d=[];for(let l=0;lt/(2*Math.sqrt(e*r));function pL(e,t,r){return e=t||e>t&&r<=t}const VO=({stiffness:e=xi.stiffness,damping:t=xi.damping,mass:r=xi.mass,from:n=0,to:o=1,velocity:a=0,restSpeed:i,restDistance:c}={})=>{a=a?ya.s(a):0;const p={done:!1,hasReachedTarget:!1,current:n,target:o},g=o-n,v=Math.sqrt(e/r)/1e3,_=fL(e,t,r),O=Math.abs(g)<5;i||(i=O?.01:2),c||(c=O?.005:.5);let C;if(_<1){const T=v*Math.sqrt(1-_*_);C=x=>o-Math.exp(-_*v*x)*((-a+_*v*g)/T*Math.sin(T*x)+g*Math.cos(T*x))}else C=T=>o-Math.exp(-v*T)*(g+(-a+v*g)*T);return T=>{p.current=C(T);const x=T===0?a:lb(C,T,p.current),b=Math.abs(x)<=i,d=Math.abs(o-p.current)<=c;return p.done=b&&d,p.hasReachedTarget=pL(n,o,p.current),p}},hL=({from:e=0,velocity:t=0,power:r=.8,decay:n=.325,bounceDamping:o,bounceStiffness:a,changeTarget:i,min:c,max:p,restDistance:g=.5,restSpeed:v})=>{n=ya.ms(n);const _={hasReachedTarget:!1,done:!1,current:e,target:e},O=w=>c!==void 0&&wp,C=w=>c===void 0?p:p===void 0||Math.abs(c-w)-T*Math.exp(-w/n),l=w=>b+d(w),u=w=>{const E=d(w),k=l(w);_.done=Math.abs(E)<=g,_.current=_.done?b:k};let s,h;const m=w=>{O(_.current)&&(s=w,h=VO({from:_.current,to:C(_.current),velocity:lb(l,w,_.current),damping:o,stiffness:a,restDistance:g,restSpeed:v}))};return m(0),w=>{let E=!1;return!h&&s===void 0&&(E=!0,u(w),m(w)),s!==void 0&&w>s?(_.hasReachedTarget=!0,h(w-s)):(_.hasReachedTarget=!1,!E&&u(w),_)}},xp=10,gL=1e4;function bL(e,t=Zn){let r,n=xp,o=e(0);const a=[t(o.current)];for(;!o.done&&n{const n=new Map,o=(i=0,c=100,p=0,g=!1)=>{const v=`${i}-${c}-${p}-${g}`;return n.has(v)||n.set(v,e(Object.assign({from:i,to:c,velocity:p,restSpeed:g?.05:2,restDistance:g?.01:.5},r))),n.get(v)},a=i=>(t.has(i)||t.set(i,bL(i)),t.get(i));return{createAnimation:(i,c,p,g,v)=>{var _,O;let C;const T=i.length;if(p&&T<=2&&i.every(vL)){const b=i[T-1],d=T===1?null:i[0];let l=0,u=0;const s=v==null?void 0:v.generator;if(s){const{animation:w,generatorStartTime:E}=v,k=(w==null?void 0:w.startTime)||E||0,P=(w==null?void 0:w.currentTime)||performance.now()-k,N=s(P).current;u=(_=d)!==null&&_!==void 0?_:N,(T===1||T===2&&i[0]===null)&&(l=lb(j=>s(j).current,P,N))}else u=(O=d)!==null&&O!==void 0?O:parseFloat(c());const h=o(u,b,l,g==null?void 0:g.includes("scale")),m=a(h);C=Object.assign(Object.assign({},m),{easing:"linear"}),v&&(v.generator=h,v.generatorStartTime=performance.now())}else C={easing:"ease",duration:a(o(0,100)).overshootDuration};return C}}}}const vL=e=>typeof e!="string",mL=zO(VO),yL=zO(hL),wL={any:0,all:1};function BO(e,t,{root:r,margin:n,amount:o="any"}={}){if(typeof IntersectionObserver>"u")return()=>{};const a=Vd(e),i=new WeakMap,c=g=>{g.forEach(v=>{const _=i.get(v.target);if(v.isIntersecting!==!!_)if(v.isIntersecting){const O=t(v);typeof O=="function"?i.set(v.target,O):p.unobserve(v.target)}else _&&(_(v),i.delete(v.target))})},p=new IntersectionObserver(c,{root:r,rootMargin:n,threshold:typeof o=="number"?o:wL[o]});return a.forEach(g=>p.observe(g)),()=>p.disconnect()}const Qu=new WeakMap;let Co;function xL(e,t){if(t){const{inlineSize:r,blockSize:n}=t[0];return{width:r,height:n}}else return e instanceof SVGElement&&"getBBox"in e?e.getBBox():{width:e.offsetWidth,height:e.offsetHeight}}function _L({target:e,contentRect:t,borderBoxSize:r}){var n;(n=Qu.get(e))===null||n===void 0||n.forEach(o=>{o({target:e,contentSize:t,get size(){return xL(e,r)}})})}function TL(e){e.forEach(_L)}function CL(){typeof ResizeObserver>"u"||(Co=new ResizeObserver(TL))}function OL(e,t){Co||CL();const r=Vd(e);return r.forEach(n=>{let o=Qu.get(n);o||(o=new Set,Qu.set(n,o)),o.add(t),Co==null||Co.observe(n)}),()=>{r.forEach(n=>{const o=Qu.get(n);o==null||o.delete(t),o!=null&&o.size||Co==null||Co.unobserve(n)})}}const Ju=new Set;let ql;function SL(){ql=()=>{const e={width:window.innerWidth,height:window.innerHeight},t={target:window,size:e,contentSize:e};Ju.forEach(r=>r(t))},window.addEventListener("resize",ql)}function PL(e){return Ju.add(e),ql||SL(),()=>{Ju.delete(e),!Ju.size&&ql&&(ql=void 0)}}function WO(e,t){return typeof e=="function"?PL(e):OL(e,t)}const kL=50,dw=()=>({current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}),EL=()=>({time:0,x:dw(),y:dw()}),RL={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function fw(e,t,r,n){const o=r[t],{length:a,position:i}=RL[t],c=o.current,p=r.time;o.current=e["scroll"+i],o.scrollLength=e["scroll"+a]-e["client"+a],o.offset.length=0,o.offset[0]=0,o.offset[1]=o.scrollLength,o.progress=Id(0,o.scrollLength,o.current);const g=n-p;o.velocity=g>kL?0:AO(o.current-c,g)}function NL(e,t,r){fw(e,"x",t,r),fw(e,"y",t,r),t.time=r}function jL(e,t){let r={x:0,y:0},n=e;for(;n&&n!==t;)if(n instanceof HTMLElement)r.x+=n.offsetLeft,r.y+=n.offsetTop,n=n.offsetParent;else if(n instanceof SVGGraphicsElement&&"getBBox"in n){const{top:o,left:a}=n.getBBox();for(r.x+=a,r.y+=o;n&&n.tagName!=="svg";)n=n.parentNode}return r}const UO={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},th={start:0,center:.5,end:1};function pw(e,t,r=0){let n=0;if(th[e]!==void 0&&(e=th[e]),ob(e)){const o=parseFloat(e);e.endsWith("px")?n=o:e.endsWith("%")?e=o/100:e.endsWith("vw")?n=o/100*document.documentElement.clientWidth:e.endsWith("vh")?n=o/100*document.documentElement.clientHeight:e=o}return io(e)&&(n=t*e),r+n}const AL=[0,0];function ML(e,t,r,n){let o=Array.isArray(e)?e:AL,a=0,i=0;return io(e)?o=[e,e]:ob(e)&&(e=e.trim(),e.includes(" ")?o=e.split(" "):o=[e,th[e]?e:"0"]),a=pw(o[0],r,n),i=pw(o[1],t),a-i}const IL={x:0,y:0};function DL(e,t,r){let{offset:n=UO.All}=r;const{target:o=e,axis:a="y"}=r,i=a==="y"?"height":"width",c=o!==e?jL(o,e):IL,p=o===e?{width:e.scrollWidth,height:e.scrollHeight}:{width:o.clientWidth,height:o.clientHeight},g={width:e.clientWidth,height:e.clientHeight};t[a].offset.length=0;let v=!t[a].interpolate;const _=n.length;for(let O=0;O<_;O++){const C=ML(n[O],g[i],p[i],c[a]);!v&&C!==t[a].interpolatorOffsets[O]&&(v=!0),t[a].offset[O]=C}v&&(t[a].interpolate=NO(nb(_),t[a].offset),t[a].interpolatorOffsets=[...t[a].offset]),t[a].progress=t[a].interpolate(t[a].current)}function LL(e,t=e,r){if(r.x.targetOffset=0,r.y.targetOffset=0,t!==e){let n=t;for(;n&&n!=e;)r.x.targetOffset+=n.offsetLeft,r.y.targetOffset+=n.offsetTop,n=n.offsetParent}r.x.targetLength=t===e?t.scrollWidth:t.clientWidth,r.y.targetLength=t===e?t.scrollHeight:t.clientHeight,r.x.containerLength=e.clientWidth,r.y.containerLength=e.clientHeight}function FL(e,t,r,n={}){const o=n.axis||"y";return{measure:()=>LL(e,n.target,r),update:a=>{NL(e,r,a),(n.offset||n.target)&&DL(e,r,n)},notify:typeof t=="function"?()=>t(r):VL(t,r[o])}}function VL(e,t){return e.pause(),e.forEachNative((r,{easing:n})=>{var o,a;if(r.updateDuration)n||(r.easing=Zn),r.updateDuration(1);else{const i={duration:1e3};n||(i.easing="linear"),(a=(o=r.effect)===null||o===void 0?void 0:o.updateTiming)===null||a===void 0||a.call(o,i)}}),()=>{e.currentTime=t.progress}}const _l=new WeakMap,hw=new WeakMap,_p=new WeakMap,gw=e=>e===document.documentElement?window:e;function zL(e,t={}){var{container:r=document.documentElement}=t,n=$i(t,["container"]);let o=_p.get(r);o||(o=new Set,_p.set(r,o));const a=EL(),i=FL(r,e,a,n);if(o.add(i),!_l.has(r)){const g=()=>{const _=performance.now();for(const O of o)O.measure();for(const O of o)O.update(_);for(const O of o)O.notify()};_l.set(r,g);const v=gw(r);window.addEventListener("resize",g,{passive:!0}),r!==document.documentElement&&hw.set(r,WO(r,g)),v.addEventListener("scroll",g,{passive:!0})}const c=_l.get(r),p=requestAnimationFrame(c);return()=>{var g;typeof e!="function"&&e.stop(),cancelAnimationFrame(p);const v=_p.get(r);if(!v||(v.delete(i),v.size))return;const _=_l.get(r);_l.delete(r),_&&(gw(r).removeEventListener("scroll",_),(g=hw.get(r))===null||g===void 0||g(),window.removeEventListener("resize",_))}}function BL(e,t){return typeof e!=typeof t?!0:Array.isArray(e)&&Array.isArray(t)?!WL(e,t):e!==t}function WL(e,t){const r=t.length;if(r!==e.length)return!1;for(let n=0;ne.getDepth()-t.getDepth(),GL=e=>e.animateUpdates(),vw=e=>e.next(),mw=(e,t)=>new CustomEvent(e,{detail:{target:t}});function rh(e,t,r){e.dispatchEvent(new CustomEvent(t,{detail:{originalEvent:r}}))}function yw(e,t,r){e.dispatchEvent(new CustomEvent(t,{detail:{originalEntry:r}}))}const KL={isActive:e=>!!e.inView,subscribe:(e,{enable:t,disable:r},{inViewOptions:n={}})=>{const{once:o}=n,a=$i(n,["once"]);return BO(e,i=>{if(t(),yw(e,"viewenter",i),!o)return c=>{r(),yw(e,"viewleave",c)}},a)}},ww=(e,t,r)=>n=>{n.pointerType&&n.pointerType!=="mouse"||(r(),rh(e,t,n))},YL={isActive:e=>!!e.hover,subscribe:(e,{enable:t,disable:r})=>{const n=ww(e,"hoverstart",t),o=ww(e,"hoverend",r);return e.addEventListener("pointerenter",n),e.addEventListener("pointerleave",o),()=>{e.removeEventListener("pointerenter",n),e.removeEventListener("pointerleave",o)}}},XL={isActive:e=>!!e.press,subscribe:(e,{enable:t,disable:r})=>{const n=a=>{r(),rh(e,"pressend",a),window.removeEventListener("pointerup",n)},o=a=>{t(),rh(e,"pressstart",a),window.addEventListener("pointerup",n)};return e.addEventListener("pointerdown",o),()=>{e.removeEventListener("pointerdown",o),window.removeEventListener("pointerup",n)}}},Zu={inView:KL,hover:YL,press:XL},xw=["initial","animate",...Object.keys(Zu),"exit"],nh=new WeakMap;function QL(e={},t){let r,n=t?t.getDepth()+1:0;const o={initial:!0,animate:!0},a={},i={};for(const x of xw)i[x]=typeof e[x]=="string"?e[x]:t==null?void 0:t.getContext()[x];const c=e.initial===!1?"animate":"initial";let p=bw(e[c]||i[c],e.variants)||{},g=$i(p,["transition"]);const v=Object.assign({},g);function*_(){var x,b;const d=g;g={};const l={};for(const w of xw){if(!o[w])continue;const E=bw(e[w]);if(E)for(const k in E)k!=="transition"&&(g[k]=E[k],l[k]=ab((b=(x=E.transition)!==null&&x!==void 0?x:e.transition)!==null&&b!==void 0?b:{},k))}const u=new Set([...Object.keys(g),...Object.keys(d)]),s=[];u.forEach(w=>{var E;g[w]===void 0&&(g[w]=v[w]),BL(d[w],g[w])&&((E=v[w])!==null&&E!==void 0||(v[w]=di.get(r,w)),s.push(Fd(r,w,g[w],l[w])))}),yield;const h=s.map(w=>w()).filter(Boolean);if(!h.length)return;const m=g;r.dispatchEvent(mw("motionstart",m)),Promise.all(h.map(w=>w.finished)).then(()=>{r.dispatchEvent(mw("motioncomplete",m))}).catch(tb)}const O=(x,b)=>()=>{o[x]=b,Tp(T)},C=()=>{for(const x in Zu){const b=Zu[x].isActive(e),d=a[x];b&&!d?a[x]=Zu[x].subscribe(r,{enable:O(x,!0),disable:O(x,!1)},e):!b&&d&&(d(),delete a[x])}},T={update:x=>{r&&(e=x,C(),Tp(T))},setActive:(x,b)=>{r&&(o[x]=b,Tp(T))},animateUpdates:_,getDepth:()=>n,getTarget:()=>g,getOptions:()=>e,getContext:()=>i,mount:x=>(r=x,nh.set(r,T),C(),()=>{nh.delete(r),$L(T);for(const b in a)a[b]()}),isMounted:()=>!!r};return T}function HO(e){const t={},r=[];for(let n in e){const o=e[n];Ld(n)&&(Mi[n]&&(n=Mi[n]),r.push(n),n=Dd(n));let a=Array.isArray(o)?o[0]:o;const i=Ii.get(n);i&&(a=io(o)?i.toDefaultUnit(o):o),t[n]=a}return r.length&&(t.transform=MO(r)),t}const JL=e=>`-${e.toLowerCase()}`,ZL=e=>e.replace(/[A-Z]/g,JL);function e4(e={}){const t=HO(e);let r="";for(const n in t)r+=n.startsWith("--")?n:ZL(n),r+=`: ${t[n]}; `;return r}const t4=Object.freeze(Object.defineProperty({__proto__:null,ScrollOffset:UO,animate:nL,animateStyle:Fd,createMotionState:QL,createStyleString:e4,createStyles:HO,getAnimationData:Zg,getStyleName:Kc,glide:yL,inView:BO,mountedStates:nh,resize:WO,scroll:zL,spring:mL,stagger:tL,style:di,timeline:lL,withControls:ib},Symbol.toStringTag,{value:"Module"})),r4=Ts(t4);function n4(e){var t={};return function(r){return t[r]===void 0&&(t[r]=e(r)),t[r]}}var o4=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,a4=n4(function(e){return o4.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91});const i4=Object.freeze(Object.defineProperty({__proto__:null,default:a4},Symbol.toStringTag,{value:"Module"})),l4=Ts(i4);(function(e){Object.defineProperty(e,"__esModule",{value:!0});var t=$5,r=A,n=G5,o=Jt,a=Be,i=La,c=r4;function p(f){return f&&typeof f=="object"&&"default"in f?f:{default:f}}function g(f){if(f&&f.__esModule)return f;var y=Object.create(null);return f&&Object.keys(f).forEach(function(S){if(S!=="default"){var R=Object.getOwnPropertyDescriptor(f,S);Object.defineProperty(y,S,R.get?R:{enumerable:!0,get:function(){return f[S]}})}}),y.default=f,Object.freeze(y)}var v=g(r),_=p(r),O=p(i),C="production",T=typeof process>"u"||process.env===void 0?C:"production",x=function(f){return{isEnabled:function(y){return f.some(function(S){return!!y[S]})}}},b={measureLayout:x(["layout","layoutId","drag"]),animation:x(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:x(["exit"]),drag:x(["drag","dragControls"]),focus:x(["whileFocus"]),hover:x(["whileHover","onHoverStart","onHoverEnd"]),tap:x(["whileTap","onTap","onTapStart","onTapCancel"]),pan:x(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:x(["whileInView","onViewportEnter","onViewportLeave"])};function d(f){for(var y in f)f[y]!==null&&(y==="projectionNodeConstructor"?b.projectionNodeConstructor=f[y]:b[y].Component=f[y])}var l=r.createContext({strict:!1}),u=Object.keys(b),s=u.length;function h(f,y,S){var R=[],M=r.useContext(l);if(!y)return null;T!=="production"&&S&&M.strict&&n.invariant(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var V=0;V"u")return y;var S=new Map;return new Proxy(y,{get:function(R,M){return S.has(M)||S.set(M,y(M)),S.get(M)}})}var We=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function xt(f){return typeof f!="string"||f.includes("-")?!1:!!(We.indexOf(f)>-1||/[A-Z]/.test(f))}var Ke={};function ae(f){Object.assign(Ke,f)}var ge=["","X","Y","Z"],Ae=["translate","scale","rotate","skew"],Me=["transformPerspective","x","y","z"];Ae.forEach(function(f){return ge.forEach(function(y){return Me.push(f+y)})});function ve(f,y){return Me.indexOf(f)-Me.indexOf(y)}var Te=new Set(Me);function $e(f){return Te.has(f)}var lt=new Set(["originX","originY","originZ"]);function ht(f){return lt.has(f)}function zt(f,y){var S=y.layout,R=y.layoutId;return $e(f)||ht(f)||(S||R!==void 0)&&(!!Ke[f]||f==="opacity")}var Xe=function(f){return!!(f!==null&&typeof f=="object"&&f.getVelocity)},Wt={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function lr(f,y,S,R){var M=f.transform,V=f.transformKeys,z=y.enableHardwareAcceleration,L=z===void 0?!0:z,$=y.allowTransformNone,q=$===void 0?!0:$,Y="";V.sort(ve);for(var J=!1,Z=V.length,ee=0;ee"u"?Wk:Bk;q($,L.current,y,z)}var zk={some:0,all:1};function Bk(f,y,S,R){var M=R.root,V=R.margin,z=R.amount,L=z===void 0?"some":z,$=R.once;r.useEffect(function(){if(f){var q={root:M==null?void 0:M.current,rootMargin:V,threshold:typeof L=="number"?L:zk[L]},Y=function(J){var Z,ee=J.isIntersecting;if(y.isInView!==ee&&(y.isInView=ee,!($&&!ee&&y.hasEnteredView))){ee&&(y.hasEnteredView=!0),(Z=S.animationState)===null||Z===void 0||Z.setActive(e.AnimationType.InView,ee);var te=S.getProps(),se=ee?te.onViewportEnter:te.onViewportLeave;se==null||se(J)}};return Fk(S.getInstance(),q,Y)}},[f,M,V,L])}function Wk(f,y,S,R){var M=R.fallback,V=M===void 0?!0:M;r.useEffect(function(){!f||!V||(T!=="production"&&df(!1,"IntersectionObserver not available on this device. whileInView animations will trigger on mount."),requestAnimationFrame(function(){var z;y.hasEnteredView=!0;var L=S.getProps().onViewportEnter;L==null||L(null),(z=S.animationState)===null||z===void 0||z.setActive(e.AnimationType.InView,!0)}))},[f])}var go=function(f){return function(y){return f(y),null}},Qb={inView:go(Vk),tap:go(Mk),focus:go(qt),hover:go(Ak)},Uk=0,Hk=function(){return Uk++},Jb=function(){return ce(Hk)};function hf(){var f=r.useContext(k);if(f===null)return[!0,null];var y=f.isPresent,S=f.onExitComplete,R=f.register,M=Jb();r.useEffect(function(){return R(M)},[]);var V=function(){return S==null?void 0:S(M)};return!y&&S?[!1,V]:[!0]}function $k(){return qk(r.useContext(k))}function qk(f){return f===null?!0:f.isPresent}function Zb(f,y){if(!Array.isArray(y))return!1;var S=y.length;if(S!==f.length)return!1;for(var R=0;R-1&&f.splice(S,1)}function aE(f,y,S){var R=t.__read(f),M=R.slice(0),V=y<0?M.length+y:y;if(V>=0&&VDe&&Jr,xo=Array.isArray(Et)?Et:[Et],Zr=xo.reduce(V,{});yr===!1&&(Zr={});var fl=dt.prevResolvedValues,Ga=fl===void 0?{}:fl,ou=t.__assign(t.__assign({},Ga),Zr),Ka=function(Ue){wo=!0,we.delete(Ue),dt.needsAnimating[Ue]=!0};for(var Sr in ou){var vt=Zr[Sr],Re=Ga[Sr];Pe.hasOwnProperty(Sr)||(vt!==Re?fn(vt)&&fn(Re)?!Zb(vt,Re)||yo?Ka(Sr):dt.protectedKeys[Sr]=!0:vt!==void 0?Ka(Sr):we.add(Sr):vt!==void 0&&we.has(Sr)?Ka(Sr):dt.protectedKeys[Sr]=!0)}dt.prevProp=Et,dt.prevResolvedValues=Zr,dt.isActive&&(Pe=t.__assign(t.__assign({},Pe),Zr)),M&&f.blockInitialAnimation&&(wo=!1),wo&&!Lr&&se.push.apply(se,t.__spreadArray([],t.__read(xo.map(function(Ue){return{animation:Ue,options:t.__assign({type:rt},Y)}})),!1))},Ye=0;Ye=3;if(!(!ee&&!te)){var se=Z.point,we=i.getFrameData().timestamp;M.history.push(t.__assign(t.__assign({},se),{timestamp:we}));var Pe=M.handlers,De=Pe.onStart,qe=Pe.onMove;ee||(De&&De(M.lastMoveEvent,Z),M.startEvent=M.lastMoveEvent),qe&&qe(M.lastMoveEvent,Z)}}},this.handlePointerMove=function(Z,ee){if(M.lastMoveEvent=Z,M.lastMoveEventInfo=Ef(ee,M.transformPagePoint),At(Z)&&Z.buttons===0){M.handlePointerUp(Z,ee);return}O.default.update(M.updatePoint,!0)},this.handlePointerUp=function(Z,ee){M.end();var te=M.handlers,se=te.onEnd,we=te.onSessionEnd,Pe=Rf(Ef(ee,M.transformPagePoint),M.history);M.startEvent&&se&&se(Z,Pe),we&&we(Z,Pe)},!(jn(y)&&y.touches.length>1)){this.handlers=S,this.transformPagePoint=z;var L=sf(y),$=Ef(L,this.transformPagePoint),q=$.point,Y=i.getFrameData().timestamp;this.history=[t.__assign(t.__assign({},q),{timestamp:Y})];var J=S.onSessionStart;J&&J(y,Rf($,this.history)),this.removeListeners=a.pipe(aa(window,"pointermove",this.handlePointerMove),aa(window,"pointerup",this.handlePointerUp),aa(window,"pointercancel",this.handlePointerUp))}}return f.prototype.updateHandlers=function(y){this.handlers=y},f.prototype.end=function(){this.removeListeners&&this.removeListeners(),i.cancelSync.update(this.updatePoint)},f}();function Ef(f,y){return y?{point:y(f.point)}:f}function pv(f,y){return{x:f.x-y.x,y:f.y-y.y}}function Rf(f,y){var S=f.point;return{point:S,delta:pv(S,hv(y)),offset:pv(S,TE(y)),velocity:CE(y,.1)}}function TE(f){return f[0]}function hv(f){return f[f.length-1]}function CE(f,y){if(f.length<2)return{x:0,y:0};for(var S=f.length-1,R=null,M=hv(f);S>=0&&(R=f[S],!(M.timestamp-R.timestamp>Ks(y)));)S--;if(!R)return{x:0,y:0};var V=(M.timestamp-R.timestamp)/1e3;if(V===0)return{x:0,y:0};var z={x:(M.x-R.x)/V,y:(M.y-R.y)/V};return z.x===1/0&&(z.x=0),z.y===1/0&&(z.y=0),z}function An(f){return f.max-f.min}function gv(f,y,S){return y===void 0&&(y=0),S===void 0&&(S=.01),a.distance(f,y)M&&(f=S?a.mix(M,f,S.max):Math.min(f,M)),f}function yv(f,y,S){return{min:y!==void 0?f.min+y:void 0,max:S!==void 0?f.max+S-(f.max-f.min):void 0}}function PE(f,y){var S=y.top,R=y.left,M=y.bottom,V=y.right;return{x:yv(f.x,R,V),y:yv(f.y,S,M)}}function wv(f,y){var S,R=y.min-f.min,M=y.max-f.max;return y.max-y.minR?S=a.progress(y.min,y.max-R,f.min):R>M&&(S=a.progress(f.min,f.max-M,y.min)),a.clamp(0,1,S)}function RE(f,y){var S={};return y.min!==void 0&&(S.min=y.min-f.min),y.max!==void 0&&(S.max=y.max-f.min),S}var Nf=.35;function NE(f){return f===void 0&&(f=Nf),f===!1?f=0:f===!0&&(f=Nf),{x:xv(f,"left","right"),y:xv(f,"top","bottom")}}function xv(f,y,S){return{min:_v(f,y),max:_v(f,S)}}function _v(f,y){var S;return typeof f=="number"?f:(S=f[y])!==null&&S!==void 0?S:0}var Tv=function(){return{translate:0,scale:1,origin:0,originPoint:0}},cl=function(){return{x:Tv(),y:Tv()}},Cv=function(){return{min:0,max:0}},rr=function(){return{x:Cv(),y:Cv()}};function Mn(f){return[f("x"),f("y")]}function Ov(f){var y=f.top,S=f.left,R=f.right,M=f.bottom;return{x:{min:S,max:R},y:{min:y,max:M}}}function jE(f){var y=f.x,S=f.y;return{top:S.min,right:y.max,bottom:S.max,left:y.min}}function AE(f,y){if(!y)return f;var S=y({x:f.left,y:f.top}),R=y({x:f.right,y:f.bottom});return{top:S.y,left:S.x,bottom:R.y,right:R.x}}function jf(f){return f===void 0||f===1}function Sv(f){var y=f.scale,S=f.scaleX,R=f.scaleY;return!jf(y)||!jf(S)||!jf(R)}function bo(f){return Sv(f)||Pv(f.x)||Pv(f.y)||f.z||f.rotate||f.rotateX||f.rotateY}function Pv(f){return f&&f!=="0%"}function Qs(f,y,S){var R=f-S,M=y*R;return S+M}function kv(f,y,S,R,M){return M!==void 0&&(f=Qs(f,M,R)),Qs(f,S,R)+y}function Af(f,y,S,R,M){y===void 0&&(y=0),S===void 0&&(S=1),f.min=kv(f.min,y,S,R,M),f.max=kv(f.max,y,S,R,M)}function Ev(f,y){var S=y.x,R=y.y;Af(f.x,S.translate,S.scale,S.originPoint),Af(f.y,R.translate,R.scale,R.originPoint)}function ME(f,y,S,R){var M,V;R===void 0&&(R=!1);var z=S.length;if(z){y.x=y.y=1;for(var L,$,q=0;qy?S="y":Math.abs(f.x)>y&&(S="x"),S}function BE(f){var y=f.dragControls,S=f.visualElement,R=ce(function(){return new VE(S)});r.useEffect(function(){return y&&y.subscribe(R)},[R,y]),r.useEffect(function(){return R.addListeners()},[R])}function WE(f){var y=f.onPan,S=f.onPanStart,R=f.onPanEnd,M=f.onPanSessionStart,V=f.visualElement,z=y||S||R||M,L=r.useRef(null),$=r.useContext(m).transformPagePoint,q={onSessionStart:M,onStart:S,onMove:y,onEnd:function(J,Z){L.current=null,R&&R(J,Z)}};r.useEffect(function(){L.current!==null&&L.current.updateHandlers(q)});function Y(J){L.current=new fv(J,q,{transformPagePoint:$})}qs(V,"pointerdown",z&&Y),Gs(function(){return L.current&&L.current.end()})}var jv={pan:go(WE),drag:go(BE)},Zs=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"];function UE(){var f=Zs.map(function(){return new il}),y={},S={clearAllListeners:function(){return f.forEach(function(R){return R.clear()})},updatePropListeners:function(R){Zs.forEach(function(M){var V,z="on"+M,L=R[z];(V=y[M])===null||V===void 0||V.call(y),L&&(y[M]=S[z](L))})}};return f.forEach(function(R,M){S["on"+Zs[M]]=function(V){return R.add(V)},S["notify"+Zs[M]]=function(){for(var V=[],z=0;z=0?window.pageYOffset:null,q=eR(y,f,L);return V.length&&V.forEach(function(Y){var J=t.__read(Y,2),Z=J[0],ee=J[1];f.getValue(Z).set(ee)}),f.syncRender(),$!==null&&window.scrollTo({top:$}),{target:q,transitionEnd:R}}else return{target:y,transitionEnd:R}};function rR(f,y,S,R){return XE(y)?tR(f,y,S,R):{target:y,transitionEnd:R}}var nR=function(f,y,S,R){var M=KE(f,y,R);return y=M.target,R=M.transitionEnd,rR(f,y,S,R)};function oR(f){return window.getComputedStyle(f)}var Bv={treeType:"dom",readValueFromInstance:function(f,y){if($e(y)){var S=bf(y);return S&&S.default||0}else{var R=oR(f);return(Kr(y)?R.getPropertyValue(y):R[y])||0}},sortNodePosition:function(f,y){return f.compareDocumentPosition(y)&2?1:-1},getBaseTarget:function(f,y){var S;return(S=f.style)===null||S===void 0?void 0:S[y]},measureViewportBox:function(f,y){var S=y.transformPagePoint;return Nv(f,S)},resetTransform:function(f,y,S){var R=S.transformTemplate;y.style.transform=R?R({},""):"none",f.scheduleRender()},restoreTransform:function(f,y){f.style.transform=y.style.transform},removeValueFromRenderState:function(f,y){var S=y.vars,R=y.style;delete S[f],delete R[f]},makeTargetAnimatable:function(f,y,S,R){var M=S.transformValues;R===void 0&&(R=!0);var V=y.transition,z=y.transitionEnd,L=t.__rest(y,["transition","transitionEnd"]),$=cv(L,V||{},f);if(M&&(z&&(z=M(z)),L&&(L=M(L)),$&&($=M($))),R){Of(f,L,$);var q=nR(f,L,$,z);z=q.transitionEnd,L=q.target}return t.__assign({transition:V,transitionEnd:z},L)},scrapeMotionValuesFromProps:tr,build:function(f,y,S,R,M){f.isVisible!==void 0&&(y.style.visibility=f.isVisible?"visible":"hidden"),Je(y,S,R,M.transformTemplate)},render:$t},aR=eu(Bv),iR=eu(t.__assign(t.__assign({},Bv),{getBaseTarget:function(f,y){return f[y]},readValueFromInstance:function(f,y){var S;return $e(y)?((S=bf(y))===null||S===void 0?void 0:S.default)||0:(y=jt.has(y)?y:bt(y),f.getAttribute(y))},scrapeMotionValuesFromProps:Xr,build:function(f,y,S,R,M){fo(y,S,R,M.transformTemplate)},render:Dr})),Df=function(f,y){return xt(f)?iR(y,{enableHardwareAcceleration:!1}):aR(y,{enableHardwareAcceleration:!0})};function Wv(f,y){return y.max===y.min?0:f/(y.max-y.min)*100}var dl={correct:function(f,y){if(!y.target)return f;if(typeof f=="string")if(o.px.test(f))f=parseFloat(f);else return f;var S=Wv(f,y.target.x),R=Wv(f,y.target.y);return"".concat(S,"% ").concat(R,"%")}},Uv="_$css",lR={correct:function(f,y){var S=y.treeScale,R=y.projectionDelta,M=f,V=f.includes("var("),z=[];V&&(f=f.replace(Mv,function(se){return z.push(se),Uv}));var L=o.complex.parse(f);if(L.length>5)return M;var $=o.complex.createTransformer(f),q=typeof L[0]!="number"?1:0,Y=R.x.scale*S.x,J=R.y.scale*S.y;L[0+q]/=Y,L[1+q]/=J;var Z=a.mix(Y,J,.5);typeof L[2+q]=="number"&&(L[2+q]/=Z),typeof L[3+q]=="number"&&(L[3+q]/=Z);var ee=$(L);if(V){var te=0;ee=ee.replace(Uv,function(){var se=z[te];return te++,se})}return ee}},sR=function(f){t.__extends(y,f);function y(){return f!==null&&f.apply(this,arguments)||this}return y.prototype.componentDidMount=function(){var S=this,R=this.props,M=R.visualElement,V=R.layoutGroup,z=R.switchLayoutGroup,L=R.layoutId,$=M.projection;ae(cR),$&&(V!=null&&V.group&&V.group.add($),z!=null&&z.register&&L&&z.register($),$.root.didUpdate(),$.addEventListener("animationComplete",function(){S.safeToRemove()}),$.setOptions(t.__assign(t.__assign({},$.options),{onExitComplete:function(){return S.safeToRemove()}}))),Oe.hasEverUpdated=!0},y.prototype.getSnapshotBeforeUpdate=function(S){var R=this,M=this.props,V=M.layoutDependency,z=M.visualElement,L=M.drag,$=M.isPresent,q=z.projection;return q&&(q.isPresent=$,L||S.layoutDependency!==V||V===void 0?q.willUpdate():this.safeToRemove(),S.isPresent!==$&&($?q.promote():q.relegate()||O.default.postRender(function(){var Y;!((Y=q.getStack())===null||Y===void 0)&&Y.members.length||R.safeToRemove()}))),null},y.prototype.componentDidUpdate=function(){var S=this.props.visualElement.projection;S&&(S.root.didUpdate(),!S.currentAnimation&&S.isLead()&&this.safeToRemove())},y.prototype.componentWillUnmount=function(){var S=this.props,R=S.visualElement,M=S.layoutGroup,V=S.switchLayoutGroup,z=R.projection;z&&(z.scheduleCheckAfterUnmount(),M!=null&&M.group&&M.group.remove(z),V!=null&&V.deregister&&V.deregister(z))},y.prototype.safeToRemove=function(){var S=this.props.safeToRemove;S==null||S()},y.prototype.render=function(){return null},y}(_.default.Component);function uR(f){var y=t.__read(hf(),2),S=y[0],R=y[1],M=r.useContext(_e);return _.default.createElement(sR,t.__assign({},f,{layoutGroup:M,switchLayoutGroup:r.useContext(je),isPresent:S,safeToRemove:R}))}var cR={borderRadius:t.__assign(t.__assign({},dl),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:dl,borderTopRightRadius:dl,borderBottomLeftRadius:dl,borderBottomRightRadius:dl,boxShadow:lR},Hv={measureLayout:uR};function $v(f,y,S){S===void 0&&(S={});var R=Xe(f)?f:Qr(f);return wf("",R,y,S),{stop:function(){return R.stop()},isAnimating:function(){return R.isAnimating()}}}var qv=["TopLeft","TopRight","BottomLeft","BottomRight"],dR=qv.length,Gv=function(f){return typeof f=="string"?parseFloat(f):f},Kv=function(f){return typeof f=="number"||o.px.test(f)};function fR(f,y,S,R,M,V){var z,L,$,q;M?(f.opacity=a.mix(0,(z=S.opacity)!==null&&z!==void 0?z:1,pR(R)),f.opacityExit=a.mix((L=y.opacity)!==null&&L!==void 0?L:1,0,hR(R))):V&&(f.opacity=a.mix(($=y.opacity)!==null&&$!==void 0?$:1,(q=S.opacity)!==null&&q!==void 0?q:1,R));for(var Y=0;Yy?1:S(a.progress(f,y,R))}}function Qv(f,y){f.min=y.min,f.max=y.max}function pn(f,y){Qv(f.x,y.x),Qv(f.y,y.y)}function Jv(f,y,S,R,M){return f-=y,f=Qs(f,1/S,R),M!==void 0&&(f=Qs(f,1/M,R)),f}function gR(f,y,S,R,M,V,z){if(y===void 0&&(y=0),S===void 0&&(S=1),R===void 0&&(R=.5),V===void 0&&(V=f),z===void 0&&(z=f),o.percent.test(y)){y=parseFloat(y);var L=a.mix(z.min,z.max,y/100);y=L-z.min}if(typeof y=="number"){var $=a.mix(V.min,V.max,R);f===V&&($-=y),f.min=Jv(f.min,y,S,$,M),f.max=Jv(f.max,y,S,$,M)}}function Zv(f,y,S,R,M){var V=t.__read(S,3),z=V[0],L=V[1],$=V[2];gR(f,y[z],y[L],y[$],y.scale,R,M)}var bR=["x","scaleX","originX"],vR=["y","scaleY","originY"];function em(f,y,S,R){Zv(f.x,y,bR,S==null?void 0:S.x,R==null?void 0:R.x),Zv(f.y,y,vR,S==null?void 0:S.y,R==null?void 0:R.y)}function tm(f){return f.translate===0&&f.scale===1}function rm(f){return tm(f.x)&&tm(f.y)}function nm(f,y){return f.x.min===y.x.min&&f.x.max===y.x.max&&f.y.min===y.y.min&&f.y.max===y.y.max}var mR=function(){function f(){this.members=[]}return f.prototype.add=function(y){xf(this.members,y),y.scheduleRender()},f.prototype.remove=function(y){if(_f(this.members,y),y===this.prevLead&&(this.prevLead=void 0),y===this.lead){var S=this.members[this.members.length-1];S&&this.promote(S)}},f.prototype.relegate=function(y){var S=this.members.findIndex(function(z){return y===z});if(S===0)return!1;for(var R,M=S;M>=0;M--){var V=this.members[M];if(V.isPresent!==!1){R=V;break}}return R?(this.promote(R),!0):!1},f.prototype.promote=function(y,S){var R,M=this.lead;if(y!==M&&(this.prevLead=M,this.lead=y,y.show(),M)){M.instance&&M.scheduleRender(),y.scheduleRender(),y.resumeFrom=M,S&&(y.resumeFrom.preserveOpacity=!0),M.snapshot&&(y.snapshot=M.snapshot,y.snapshot.latestValues=M.animationValues||M.latestValues,y.snapshot.isShared=!0),!((R=y.root)===null||R===void 0)&&R.isUpdating&&(y.isLayoutDirty=!0);var V=y.options.crossfade;V===!1&&M.hide()}},f.prototype.exitAnimationComplete=function(){this.members.forEach(function(y){var S,R,M,V,z;(R=(S=y.options).onExitComplete)===null||R===void 0||R.call(S),(z=(M=y.resumingFrom)===null||M===void 0?void 0:(V=M.options).onExitComplete)===null||z===void 0||z.call(V)})},f.prototype.scheduleRender=function(){this.members.forEach(function(y){y.instance&&y.scheduleRender(!1)})},f.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},f}(),yR="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function om(f,y,S){var R=f.x.translate/y.x,M=f.y.translate/y.y,V="translate3d(".concat(R,"px, ").concat(M,"px, 0) ");if(V+="scale(".concat(1/y.x,", ").concat(1/y.y,") "),S){var z=S.rotate,L=S.rotateX,$=S.rotateY;z&&(V+="rotate(".concat(z,"deg) ")),L&&(V+="rotateX(".concat(L,"deg) ")),$&&(V+="rotateY(".concat($,"deg) "))}var q=f.x.scale*y.x,Y=f.y.scale*y.y;return V+="scale(".concat(q,", ").concat(Y,")"),V===yR?"none":V}var wR=function(f,y){return f.depth-y.depth},am=function(){function f(){this.children=[],this.isDirty=!1}return f.prototype.add=function(y){xf(this.children,y),this.isDirty=!0},f.prototype.remove=function(y){_f(this.children,y),this.isDirty=!0},f.prototype.forEach=function(y){this.isDirty&&this.children.sort(wR),this.isDirty=!1,this.children.forEach(y)},f}(),im=1e3;function lm(f){var y=f.attachResizeListener,S=f.defaultParent,R=f.measureScroll,M=f.checkIsScrollRoot,V=f.resetTransform;return function(){function z(L,$,q){var Y=this;$===void 0&&($={}),q===void 0&&(q=S==null?void 0:S()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){Y.isUpdating&&(Y.isUpdating=!1,Y.clearAllSnapshots())},this.updateProjection=function(){Y.nodes.forEach(SR),Y.nodes.forEach(PR)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=L,this.latestValues=$,this.root=q?q.root||q:this,this.path=q?t.__spreadArray(t.__spreadArray([],t.__read(q.path),!1),[q],!1):[],this.parent=q,this.depth=q?q.depth+1:0,L&&this.root.registerPotentialNode(L,this);for(var J=0;J=0;R--)if(f.path[R].instance){S=f.path[R];break}var M=S&&S!==f.root?S.instance:document,V=M.querySelector('[data-projection-id="'.concat(y,'"]'));V&&f.mount(V,!0)}function dm(f){f.min=Math.round(f.min),f.max=Math.round(f.max)}function fm(f){dm(f.x),dm(f.y)}var MR=lm({attachResizeListener:function(f,y){return na(f,"resize",y)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),sa={current:void 0},Lf=lm({measureScroll:function(f){return{x:f.scrollLeft,y:f.scrollTop}},defaultParent:function(){if(!sa.current){var f=new MR(0,{});f.mount(window),f.setOptions({layoutScroll:!0}),sa.current=f}return sa.current},resetTransform:function(f,y){f.style.transform=y??"none"},checkIsScrollRoot:function(f){return window.getComputedStyle(f).position==="fixed"}}),pm=t.__assign(t.__assign(t.__assign(t.__assign({},kf),Qb),jv),Hv),Ff=pt(function(f,y){return ol(f,y,pm,Df,Lf)});function IR(f){return ut(ol(f,{forwardMotionProps:!1},pm,Df,Lf))}var DR=pt(ol);function hm(){var f=r.useRef(!1);return N(function(){return f.current=!0,function(){f.current=!1}},[]),f}function ru(){var f=hm(),y=t.__read(r.useState(0),2),S=y[0],R=y[1],M=r.useCallback(function(){f.current&&R(S+1)},[S]),V=r.useCallback(function(){return O.default.postRender(M)},[M]);return[V,S]}var Vf=function(f){var y=f.children,S=f.initial,R=f.isPresent,M=f.onExitComplete,V=f.custom,z=f.presenceAffectsLayout,L=ce(LR),$=Jb(),q=r.useMemo(function(){return{id:$,initial:S,isPresent:R,custom:V,onExitComplete:function(Y){var J,Z;L.set(Y,!0);try{for(var ee=t.__values(L.values()),te=ee.next();!te.done;te=ee.next()){var se=te.value;if(!se)return}}catch(we){J={error:we}}finally{try{te&&!te.done&&(Z=ee.return)&&Z.call(ee)}finally{if(J)throw J.error}}M==null||M()},register:function(Y){return L.set(Y,!1),function(){return L.delete(Y)}}}},z?void 0:[R]);return r.useMemo(function(){L.forEach(function(Y,J){return L.set(J,!1)})},[R]),v.useEffect(function(){!R&&!L.size&&(M==null||M())},[R]),v.createElement(k.Provider,{value:q},y)};function LR(){return new Map}var qa=function(f){return f.key||""};function FR(f,y){f.forEach(function(S){var R=qa(S);y.set(R,S)})}function VR(f){var y=[];return r.Children.forEach(f,function(S){r.isValidElement(S)&&y.push(S)}),y}var zR=function(f){var y=f.children,S=f.custom,R=f.initial,M=R===void 0?!0:R,V=f.onExitComplete,z=f.exitBeforeEnter,L=f.presenceAffectsLayout,$=L===void 0?!0:L,q=t.__read(ru(),1),Y=q[0],J=r.useContext(_e).forceRender;J&&(Y=J);var Z=hm(),ee=VR(y),te=ee,se=new Set,we=r.useRef(te),Pe=r.useRef(new Map).current,De=r.useRef(!0);if(N(function(){De.current=!1,FR(ee,Pe),we.current=te}),Gs(function(){De.current=!0,Pe.clear(),se.clear()}),De.current)return v.createElement(v.Fragment,null,te.map(function(rt){return v.createElement(Vf,{key:qa(rt),isPresent:!0,initial:M?void 0:!1,presenceAffectsLayout:$},rt)}));te=t.__spreadArray([],t.__read(te),!1);for(var qe=we.current.map(qa),Ye=ee.map(qa),et=qe.length,yt=0;yt1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),v.createElement(v.Fragment,null,se.size?te:te.map(function(rt){return r.cloneElement(rt)}))},gm=r.createContext(null),BR=function(f){return!f.isLayoutDirty&&f.willUpdate(!1)};function bm(){var f=new Set,y=new WeakMap,S=function(){return f.forEach(BR)};return{add:function(R){f.add(R),y.set(R,R.addEventListener("willUpdate",S))},remove:function(R){var M;f.delete(R),(M=y.get(R))===null||M===void 0||M(),y.delete(R),S()},dirty:S}}var vm=function(f){return f===!0},WR=function(f){return vm(f===!0)||f==="id"},mm=function(f){var y,S,R=f.children,M=f.id,V=f.inheritId,z=f.inherit,L=z===void 0?!0:z;V!==void 0&&(L=V);var $=r.useContext(_e),q=r.useContext(gm),Y=t.__read(ru(),2),J=Y[0],Z=Y[1],ee=r.useRef(null),te=(y=$.id)!==null&&y!==void 0?y:q;ee.current===null&&(WR(L)&&te&&(M=M?te+"-"+M:te),ee.current={id:M,group:vm(L)&&(S=$==null?void 0:$.group)!==null&&S!==void 0?S:bm()});var se=r.useMemo(function(){return t.__assign(t.__assign({},ee.current),{forceRender:J})},[Z]);return v.createElement(_e.Provider,{value:se},R)},UR=0,HR=function(f){var y=f.children;return v.useEffect(function(){n.warning(!1,"AnimateSharedLayout is deprecated: https://www.framer.com/docs/guide-upgrade/##shared-layout-animations")},[]),v.createElement(mm,{id:ce(function(){return"asl-".concat(UR++)})},y)};function $R(f){var y=f.children,S=f.isValidProp,R=t.__rest(f,["children","isValidProp"]);S&&uo(S),R=t.__assign(t.__assign({},r.useContext(m)),R),R.isStatic=ce(function(){return R.isStatic});var M=r.useMemo(function(){return R},[JSON.stringify(R.transition),R.transformPagePoint,R.reducedMotion]);return v.createElement(m.Provider,{value:M},y)}function qR(f){var y=f.children,S=f.features,R=f.strict,M=R===void 0?!1:R,V=t.__read(r.useState(!zf(S)),2),z=V[1],L=r.useRef(void 0);if(!zf(S)){var $=S.renderer,q=t.__rest(S,["renderer"]);L.current=$,d(q)}return r.useEffect(function(){zf(S)&&S().then(function(Y){var J=Y.renderer,Z=t.__rest(Y,["renderer"]);d(Z),L.current=J,z(!0)})},[]),v.createElement(l.Provider,{value:{renderer:L.current,strict:M}},y)}function zf(f){return typeof f=="function"}var ym=r.createContext(null);function GR(f,y,S,R){if(!R)return f;var M=f.findIndex(function(Y){return Y.value===y});if(M===-1)return f;var V=R>0?1:-1,z=f[M+V];if(!z)return f;var L=f[M],$=z.layout,q=a.mix($.min,$.max,.5);return V===1&&L.layout.max+S>q||V===-1&&L.layout.min+S.001?1/f:ON},Nm=!1;function SN(f){var y=mo(1),S=mo(1),R=E();n.invariant(!!(f||R),"If no scale values are provided, useInvertedScale must be used within a child of another motion component."),n.warning(Nm,"useInvertedScale is deprecated and will be removed in 3.0. Use the layout prop instead."),Nm=!0,f?(y=f.scaleX||y,S=f.scaleY||S):R&&(y=R.getValue("scaleX",1),S=R.getValue("scaleY",1));var M=nu(y,Rm),V=nu(S,Rm);return{scaleX:M,scaleY:V}}e.AnimatePresence=zR,e.AnimateSharedLayout=HR,e.DeprecatedLayoutGroupContext=gm,e.DragControls=km,e.FlatTree=am,e.LayoutGroup=mm,e.LayoutGroupContext=_e,e.LazyMotion=qR,e.MotionConfig=$R,e.MotionConfigContext=m,e.MotionContext=w,e.MotionValue=lv,e.PresenceContext=k,e.Reorder=oN,e.SwitchLayoutGroupContext=je,e.addPointerEvent=aa,e.addScaleCorrector=ae,e.animate=$v,e.animateVisualElement=Xs,e.animationControls=Sm,e.animations=kf,e.calcLength=An,e.checkTargetForNewValues=Of,e.createBox=rr,e.createDomMotionComponent=IR,e.createMotionComponent=ut,e.domAnimation=Cm,e.domMax=aN,e.filterProps=za,e.isBrowser=P,e.isDragActive=cf,e.isMotionValue=Xe,e.isValidMotionProp=Or,e.m=DR,e.makeUseVisualState=Ha,e.motion=Ff,e.motionValue=Qr,e.resolveMotionValue=ra,e.transform=wm,e.useAnimation=hN,e.useAnimationControls=Pm,e.useAnimationFrame=Om,e.useCycle=gN,e.useDeprecatedAnimatedState=CN,e.useDeprecatedInvertedScale=SN,e.useDomEvent=kt,e.useDragControls=mN,e.useElementScroll=cN,e.useForceUpdate=ru,e.useInView=bN,e.useInstantLayoutTransition=Em,e.useInstantTransition=wN,e.useIsPresent=$k,e.useIsomorphicLayoutEffect=N,e.useMotionTemplate=iN,e.useMotionValue=mo,e.usePresence=hf,e.useReducedMotion=W,e.useReducedMotionConfig=G,e.useResetProjection=xN,e.useScroll=Bf,e.useSpring=lN,e.useTime=pN,e.useTransform=nu,e.useUnmountEffect=Gs,e.useVelocity=sN,e.useViewportScroll=dN,e.useVisualElementContext=E,e.visualElement=eu,e.wrapHandler=uf})(ir);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{AccordionBody:function(){return x},default:function(){return b}});var r=O(A),n=ir,o=O(He),a=O(dr),i=O(Ie),c=Le,p=kd,g=Ne,v=Ns;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.className,s=d.children,h=C(d,["className","children"]),m=(0,p.useAccordion)(),w=m.open,E=m.animate,k=(0,g.useTheme)().accordion,P=k.styles.base;u=u??"";var N=(0,c.twMerge)((0,o.default)((0,i.default)(P.body)),u),j={unmount:{height:"0px",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{height:"auto",transition:{duration:.2,times:[.4,0,.2,1]}}},I={unmount:{transition:{duration:.3,ease:"linear"}},mount:{transition:{duration:.3,ease:"linear"}}},F=(0,a.default)(I,E);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(n.m.div,{className:"overflow-hidden",initial:"unmount",exit:"unmount",animate:w?"mount":"unmount",variants:j},r.default.createElement(n.m.div,_({},h,{ref:l,className:N,initial:"unmount",exit:"unmount",animate:w?"mount":"unmount",variants:F}),s)))});x.propTypes={className:v.propTypesClassName,children:v.propTypesChildren},x.displayName="MaterialTailwind.AccordionBody";var b=x})(m5);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Accordion:function(){return b},AccordionHeader:function(){return g.AccordionHeader},AccordionBody:function(){return v.AccordionBody},useAccordion:function(){return c.useAccordion},default:function(){return d}});var r=C(A),n=C(He),o=Le,a=C(Ie),i=Ne,c=kd,p=Ns,g=v5,v=m5;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.open,h=l.icon,m=l.animate,w=l.className,E=l.disabled,k=l.children,P=T(l,["open","icon","animate","className","disabled","children"]),N=(0,i.useTheme)().accordion,j=N.defaultProps,I=N.styles.base;h=h??j.icon,m=m??j.animate,w=w??j.className,E=E??j.disabled;var F=(0,o.twMerge)((0,n.default)((0,a.default)(I.container),_({},(0,a.default)(I.disabled),E)),w),W=r.default.useMemo(function(){return{open:s,icon:h,animate:m,disabled:E}},[s,h,m,E]);return r.default.createElement(c.AccordionContextProvider,{value:W},r.default.createElement("div",O({},P,{ref:u,className:F}),k))});b.propTypes={open:p.propTypesOpen,icon:p.propTypesIcon,animate:p.propTypesAnimate,disabled:p.propTypesDisabled,className:p.propTypesClassName,children:p.propTypesChildren},b.displayName="MaterialTailwind.Accordion";var d=Object.assign(b,{Header:g.AccordionHeader,Body:v.AccordionBody})})(qT);var $O={},Nt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return r}});function t(n,o,a){var i=n.findIndex(function(c){return c===o});return i>=0?o:a}var r=t})(Nt);var zd={},qi=class{constructor(){this.x=0,this.y=0,this.z=0}findFurthestPoint(t,r,n,o,a,i){return this.x=t-n>r/2?0:r,this.y=o-i>a/2?0:a,this.z=Math.hypot(this.x-(t-n),this.y-(o-i)),this.z}appyStyles(t,r,n,o,a){t.classList.add("ripple"),t.style.backgroundColor=r==="dark"?"rgba(0,0,0, 0.2)":"rgba(255,255,255, 0.3)",t.style.borderRadius="50%",t.style.pointerEvents="none",t.style.position="absolute",t.style.left=a.clientX-n.left-o+"px",t.style.top=a.clientY-n.top-o+"px",t.style.width=t.style.height=o*2+"px"}applyAnimation(t){t.animate([{transform:"scale(0)",opacity:1},{transform:"scale(1.5)",opacity:0}],{duration:500,easing:"linear"})}create(t,r){const n=t.currentTarget;n.style.position="relative",n.style.overflow="hidden";const o=n.getBoundingClientRect(),a=this.findFurthestPoint(t.clientX,n.offsetWidth,o.left,t.clientY,n.offsetHeight,o.top),i=document.createElement("span");this.appyStyles(i,r,o,a,t),this.applyAnimation(i),n.appendChild(i),setTimeout(()=>i.remove(),500)}};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{IconButton:function(){return x},default:function(){return b}});var r=O(A),n=O(Fe),o=O(qi),a=O(He),i=Le,c=O(Nt),p=O(Ie),g=Ne,v=Ma;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.variant,s=d.size,h=d.color,m=d.ripple,w=d.className,E=d.children;d.fullWidth;var k=C(d,["variant","size","color","ripple","className","children","fullWidth"]),P=(0,g.useTheme)().iconButton,N=P.valid,j=P.defaultProps,I=P.styles,F=I.base,W=I.variants,G=I.sizes;u=u??j.variant,s=s??j.size,h=h??j.color,m=m??j.ripple,w=w??j.className;var X=m!==void 0&&new o.default,H=(0,p.default)(F),B=(0,p.default)(W[(0,c.default)(N.variants,u,"filled")][(0,c.default)(N.colors,h,"gray")]),U=(0,p.default)(G[(0,c.default)(N.sizes,s,"md")]),K=(0,i.twMerge)((0,a.default)(H,U,B),w);return r.default.createElement("button",_({},k,{ref:l,className:K,type:k.type||"button",onMouseDown:function(Q){var ne=k==null?void 0:k.onMouseDown;return m&&X.create(Q,(u==="filled"||u==="gradient")&&h!=="white"?"light":"dark"),typeof ne=="function"&&ne(Q)}}),r.default.createElement("span",{className:"absolute top-1/2 left-1/2 transform -translate-y-1/2 -translate-x-1/2"},E))});x.propTypes={variant:n.default.oneOf(v.propTypesVariant),size:n.default.oneOf(v.propTypesSize),color:n.default.oneOf(v.propTypesColor),ripple:v.propTypesRipple,className:v.propTypesClassName,children:v.propTypesChildren},x.displayName="MaterialTailwind.IconButton";var b=x})(zd);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,s){for(var h in s)Object.defineProperty(u,h,{enumerable:!0,get:s[h]})}t(e,{Alert:function(){return d},default:function(){return l}});var r=T(A),n=T(Fe),o=ir,a=T(He),i=T(dr),c=Le,p=T(Nt),g=T(Ie),v=Ne,_=Og,O=T(zd);function C(){return C=Object.assign||function(u){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(u,m)&&(h[m]=u[m])}return h}function b(u,s){if(u==null)return{};var h={},m=Object.keys(u),w,E;for(E=0;E=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,s){var h=u.variant,m=u.color,w=u.icon,E=u.open,k=u.action,P=u.onClose,N=u.animate,j=u.className,I=u.children,F=x(u,["variant","color","icon","open","action","onClose","animate","className","children"]),W=(0,v.useTheme)().alert,G=W.defaultProps,X=W.valid,H=W.styles,B=H.base,U=H.variants;h=h??G.variant,m=m??G.color,j=j??G.className,N=N??G.animate,E=E??G.open,k=k??G.action,P=P??G.onClose;var K=(0,g.default)(B.alert),Q=(0,g.default)(B.action),ne=(0,g.default)(U[(0,p.default)(X.variants,h,"filled")][(0,p.default)(X.colors,m,"gray")]),ue=(0,c.twMerge)((0,a.default)(K,ne),j),le=(0,a.default)(Q),re={unmount:{opacity:0},mount:{opacity:1}},be=(0,i.default)(re,N),fe=r.default.createElement("div",{className:"shrink-0"},w),ie=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(ie,null,E&&r.default.createElement(o.m.div,C({},F,{ref:s,role:"alert",className:"".concat(ue," flex"),initial:"unmount",exit:"unmount",animate:E?"mount":"unmount",variants:be}),w&&fe,r.default.createElement("div",{className:"".concat(w?"ml-3":""," mr-12")},I),P&&!k&&r.default.createElement(O.default,{onClick:P,size:"sm",variant:"text",color:h==="outlined"||h==="ghost"?m:"white",className:le},r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",className:"h-6 w-6",strokeWidth:2},r.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))),k||null)))});d.propTypes={variant:n.default.oneOf(_.propTypesVariant),color:n.default.oneOf(_.propTypesColor),icon:_.propTypesIcon,open:_.propTypesOpen,action:_.propTypesAction,onClose:_.propTypesOnClose,animate:_.propTypesAnimate,className:_.propTypesClassName,children:_.propTypesChildren},d.displayName="MaterialTailwind.Alert";var l=d})($O);var qO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{Avatar:function(){return x},default:function(){return b}});var r=O(A),n=O(Fe),o=O(He),a=Le,i=O(Nt),c=O(Ie),p=Ne,g=Sg;function v(d,l,u){return l in d?Object.defineProperty(d,l,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[l]=u,d}function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.variant,s=d.size,h=d.className,m=d.color,w=d.withBorder,E=C(d,["variant","size","className","color","withBorder"]),k=(0,p.useTheme)().avatar,P=k.valid,N=k.defaultProps,j=k.styles,I=j.base,F=j.variants,W=j.sizes,G=j.borderColor;u=u??N.variant,s=s??N.size,h=h??N.className,w=w??N.withBorder,m=m??N.color;var X=(0,c.default)(F[(0,i.default)(P.variants,u,"rounded")]),H=(0,c.default)(W[(0,i.default)(P.sizes,s,"md")]),B=(0,c.default)(G[(0,i.default)(P.colors,m,"gray")]),U,K=(0,a.twMerge)((0,o.default)((0,c.default)(I.initial),X,H,(U={},v(U,(0,c.default)(I.withBorder),w),v(U,B,w),U)),h);return r.default.createElement("img",_({},E,{ref:l,className:K}))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),size:n.default.oneOf(g.propTypesSize),className:g.propTypesClassName,withBorder:g.propTypesWithBorder,color:n.default.oneOf(g.propTypesColor)},x.displayName="MaterialTailwind.Avatar";var b=x})(qO);var GO={},KO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(p,g){for(var v in g)Object.defineProperty(p,v,{enumerable:!0,get:g[v]})}t(e,{propTypesSeparator:function(){return o},propTypesFullWidth:function(){return a},propTypesClassName:function(){return i},propTypesChildren:function(){return c}});var r=n(Fe);function n(p){return p&&p.__esModule?p:{default:p}}var o=r.default.node,a=r.default.bool,i=r.default.string,c=r.default.node.isRequired})(KO);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{Breadcrumbs:function(){return x},default:function(){return b}});var r=O(A),n=v(He),o=Le,a=v(Ie),i=Ne,c=KO;function p(d,l,u){return l in d?Object.defineProperty(d,l,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[l]=u,d}function g(){return g=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=(0,r.forwardRef)(function(d,l){var u=d.separator,s=d.fullWidth,h=d.className,m=d.children,w=C(d,["separator","fullWidth","className","children"]),E=(0,i.useTheme)().breadcrumbs,k=E.defaultProps,P=E.styles.base;u=u??k.separator,s=s??k.fullWidth,h=h??k.className;var N=(0,n.default)((0,a.default)(P.root.initial),p({},(0,a.default)(P.root.fullWidth),s)),j=(0,o.twMerge)((0,n.default)((0,a.default)(P.list)),h),I=(0,n.default)((0,a.default)(P.item.initial)),F=(0,n.default)((0,a.default)(P.separator));return r.default.createElement("nav",{"aria-label":"breadcrumb",className:N},r.default.createElement("ol",g({},w,{ref:l,className:j}),r.Children.map(m,function(W,G){if((0,r.isValidElement)(W)){var X;return r.default.createElement("li",{className:(0,n.default)(I,p({},(0,a.default)(P.item.disabled),W==null||(X=W.props)===null||X===void 0?void 0:X.disabled))},W,G!==r.Children.count(m)-1&&r.default.createElement("span",{className:F},u))}return null})))});x.propTypes={separator:c.propTypesSeparator,fullWidth:c.propTypesFullWidth,className:c.propTypesClassName,children:c.propTypesChildren},x.displayName="MaterialTailwind.Breadcrumbs";var b=x})(GO);var YO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Button:function(){return b},default:function(){return d}});var r=C(A),n=C(Fe),o=C(qi),a=C(He),i=Le,c=C(Nt),p=C(Ie),g=Ne,v=Ma;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.variant,h=l.size,m=l.color,w=l.fullWidth,E=l.ripple,k=l.className,P=l.children,N=T(l,["variant","size","color","fullWidth","ripple","className","children"]),j=(0,g.useTheme)().button,I=j.valid,F=j.defaultProps,W=j.styles,G=W.base,X=W.variants,H=W.sizes;s=s??F.variant,h=h??F.size,m=m??F.color,w=w??F.fullWidth,E=E??F.ripple,k=k??F.className;var B=E!==void 0&&new o.default,U=(0,p.default)(G.initial),K=(0,p.default)(X[(0,c.default)(I.variants,s,"filled")][(0,c.default)(I.colors,m,"gray")]),Q=(0,p.default)(H[(0,c.default)(I.sizes,h,"md")]),ne=(0,i.twMerge)((0,a.default)(U,Q,K,_({},(0,p.default)(G.fullWidth),w)),k);return r.default.createElement("button",O({},N,{ref:u,className:ne,type:N.type||"button",onMouseDown:function(ue){var le=N==null?void 0:N.onMouseDown;return E&&B.create(ue,(s==="filled"||s==="gradient")&&m!=="white"?"light":"dark"),typeof le=="function"&&le(ue)}}),P)});b.propTypes={variant:n.default.oneOf(v.propTypesVariant),size:n.default.oneOf(v.propTypesSize),color:n.default.oneOf(v.propTypesColor),fullWidth:v.propTypesFullWidth,ripple:v.propTypesRipple,className:v.propTypesClassName,children:v.propTypesChildren},b.displayName="MaterialTailwind.Button";var d=b})(YO);var XO={},QO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{CardHeader:function(){return x},default:function(){return b}});var r=O(A),n=O(Fe),o=O(He),a=Le,i=O(Nt),c=O(Ie),p=Ne,g=Ia;function v(d,l,u){return l in d?Object.defineProperty(d,l,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[l]=u,d}function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.variant,s=d.color,h=d.shadow,m=d.floated,w=d.className,E=d.children,k=C(d,["variant","color","shadow","floated","className","children"]),P=(0,p.useTheme)().cardHeader,N=P.defaultProps,j=P.styles,I=P.valid,F=j.base,W=j.variants;u=u??N.variant,s=s??N.color,h=h??N.shadow,m=m??N.floated,w=w??N.className;var G=(0,c.default)(F.initial),X=(0,c.default)(W[(0,i.default)(I.variants,u,"filled")][(0,i.default)(I.colors,s,"white")]),H=(0,a.twMerge)((0,o.default)(G,X,v({},(0,c.default)(F.shadow),h),v({},(0,c.default)(F.floated),m)),w);return r.default.createElement("div",_({},k,{ref:l,className:H}),E)});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),shadow:g.propTypesShadow,floated:g.propTypesFloated,className:g.propTypesClassName,children:g.propTypesChildren},x.displayName="MaterialTailwind.CardHeader";var b=x})(QO);var JO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{CardBody:function(){return O},default:function(){return C}});var r=g(A),n=g(He),o=Le,a=g(Ie),i=Ne,c=Ia;function p(){return p=Object.assign||function(T){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(T,d)&&(b[d]=T[d])}return b}function _(T,x){if(T==null)return{};var b={},d=Object.keys(T),l,u;for(u=0;u=0)&&(b[l]=T[l]);return b}var O=r.default.forwardRef(function(T,x){var b=T.className,d=T.children,l=v(T,["className","children"]),u=(0,i.useTheme)().cardBody,s=u.defaultProps,h=u.styles.base;b=b??s.className;var m=(0,o.twMerge)((0,n.default)((0,a.default)(h)),b);return r.default.createElement("div",p({},l,{ref:x,className:m}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.CardBody";var C=O})(JO);var ZO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,b){for(var d in b)Object.defineProperty(x,d,{enumerable:!0,get:b[d]})}t(e,{CardFooter:function(){return C},default:function(){return T}});var r=v(A),n=v(He),o=Le,a=v(Ie),i=Ne,c=Ia;function p(x,b,d){return b in x?Object.defineProperty(x,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[b]=d,x}function g(){return g=Object.assign||function(x){for(var b=1;b=0)&&Object.prototype.propertyIsEnumerable.call(x,l)&&(d[l]=x[l])}return d}function O(x,b){if(x==null)return{};var d={},l=Object.keys(x),u,s;for(s=0;s=0)&&(d[u]=x[u]);return d}var C=r.default.forwardRef(function(x,b){var d=x.divider,l=x.className,u=x.children,s=_(x,["divider","className","children"]),h=(0,i.useTheme)().cardFooter,m=h.defaultProps,w=h.styles.base;l=l??m.className,d=d??m.divider;var E=(0,o.twMerge)((0,n.default)((0,a.default)(w.initial),p({},(0,a.default)(w.divider),d)),l);return r.default.createElement("div",g({},s,{ref:b,className:E}),u)});C.propTypes={divider:c.propTypesDivider,className:c.propTypesClassName,children:c.propTypesChildren},C.displayName="MaterialTailwind.CardFooter";var T=C})(ZO);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{Card:function(){return l},CardHeader:function(){return g.CardHeader},CardBody:function(){return v.CardBody},CardFooter:function(){return _.CardFooter},default:function(){return u}});var r=x(A),n=x(Fe),o=x(He),a=Le,i=x(Nt),c=x(Ie),p=Ne,g=QO,v=JO,_=ZO,O=Ia;function C(s,h,m){return h in s?Object.defineProperty(s,h,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[h]=m,s}function T(){return T=Object.assign||function(s){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(s,w)&&(m[w]=s[w])}return m}function d(s,h){if(s==null)return{};var m={},w=Object.keys(s),E,k;for(k=0;k=0)&&(m[E]=s[E]);return m}var l=r.default.forwardRef(function(s,h){var m=s.variant,w=s.color,E=s.shadow,k=s.className,P=s.children,N=b(s,["variant","color","shadow","className","children"]),j=(0,p.useTheme)().card,I=j.defaultProps,F=j.styles,W=j.valid,G=F.base,X=F.variants;m=m??I.variant,w=w??I.color,E=E??I.shadow,k=k??I.className;var H=(0,c.default)(G.initial),B=(0,c.default)(X[(0,i.default)(W.variants,m,"filled")][(0,i.default)(W.colors,w,"white")]),U=(0,a.twMerge)((0,o.default)(H,B,C({},(0,c.default)(G.shadow),E)),k);return r.default.createElement("div",T({},N,{ref:h,className:U}),P)});l.propTypes={variant:n.default.oneOf(O.propTypesVariant),color:n.default.oneOf(O.propTypesColor),shadow:O.propTypesShadow,className:O.propTypesClassName,children:O.propTypesChildren},l.displayName="MaterialTailwind.Card";var u=Object.assign(l,{Header:g.CardHeader,Body:v.CardBody,Footer:_.CardFooter})})(XO);var eS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Checkbox:function(){return b},default:function(){return d}});var r=C(A),n=C(Fe),o=C(qi),a=C(He),i=Le,c=C(Nt),p=C(Ie),g=Ne,v=Da;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.color,h=l.label,m=l.icon,w=l.ripple,E=l.className,k=l.disabled,P=l.containerProps,N=l.labelProps,j=l.iconProps,I=l.inputRef,F=T(l,["color","label","icon","ripple","className","disabled","containerProps","labelProps","iconProps","inputRef"]),W=(0,g.useTheme)().checkbox,G=W.defaultProps,X=W.valid,H=W.styles,B=H.base,U=H.colors,K=r.default.useId();s=s??G.color,h=h??G.label,m=m??G.icon,w=w??G.ripple,E=E??G.className,k=k??G.disabled,P=P??G.containerProps,N=N??G.labelProps,j=j??G.iconProps;var Q=w!==void 0&&new o.default,ne=(0,a.default)((0,p.default)(B.root),_({},(0,p.default)(B.disabled),k)),ue=(0,i.twMerge)((0,a.default)((0,p.default)(B.container)),P==null?void 0:P.className),le=(0,i.twMerge)((0,a.default)((0,p.default)(B.input),(0,p.default)(U[(0,c.default)(X.colors,s,"gray")])),E),re=(0,i.twMerge)((0,a.default)((0,p.default)(B.label)),N==null?void 0:N.className),be=(0,i.twMerge)((0,a.default)((0,p.default)(B.icon)),j==null?void 0:j.className);return r.default.createElement("div",{ref:u,className:ne},r.default.createElement("label",O({},P,{className:ue,htmlFor:F.id||K,onMouseDown:function(fe){var ie=P==null?void 0:P.onMouseDown;return w&&Q.create(fe,"dark"),typeof ie=="function"&&ie(fe)}}),r.default.createElement("input",O({},F,{ref:I,type:"checkbox",disabled:k,className:le,id:F.id||K})),r.default.createElement("span",{className:be},m||r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",stroke:"currentColor",strokeWidth:1},r.default.createElement("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})))),h&&r.default.createElement("label",O({},N,{className:re,htmlFor:F.id||K}),h))});b.propTypes={color:n.default.oneOf(v.propTypesColor),label:v.propTypesLabel,icon:v.propTypesIcon,ripple:v.propTypesRipple,className:v.propTypesClassName,disabled:v.propTypesDisabled,containerProps:v.propTypesObject,labelProps:v.propTypesObject},b.displayName="MaterialTailwind.Checkbox";var d=b})(eS);var tS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,s){for(var h in s)Object.defineProperty(u,h,{enumerable:!0,get:s[h]})}t(e,{Chip:function(){return d},default:function(){return l}});var r=T(A),n=T(Fe),o=ir,a=T(He),i=T(dr),c=Le,p=T(Nt),g=T(Ie),v=Ne,_=Ag,O=T(zd);function C(){return C=Object.assign||function(u){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(u,m)&&(h[m]=u[m])}return h}function b(u,s){if(u==null)return{};var h={},m=Object.keys(u),w,E;for(E=0;E=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,s){var h=u.variant,m=u.size,w=u.color,E=u.icon,k=u.open,P=u.onClose,N=u.action,j=u.animate,I=u.className,F=u.value,W=x(u,["variant","size","color","icon","open","onClose","action","animate","className","value"]),G=(0,v.useTheme)().chip,X=G.defaultProps,H=G.valid,B=G.styles,U=B.base,K=B.variants,Q=B.sizes;h=h??X.variant,m=m??X.size,w=w??X.color,I=I??X.className,j=j??X.animate,k=k??X.open,N=N??X.action,P=P??X.onClose;var ne=(0,g.default)(U.chip),ue=(0,g.default)(U.action),le=(0,g.default)(U.icon),re=(0,g.default)(K[(0,p.default)(H.variants,h,"filled")][(0,p.default)(H.colors,w,"gray")]),be=(0,g.default)(Q[(0,p.default)(H.sizes,m,"md")].chip),fe=(0,g.default)(Q[(0,p.default)(H.sizes,m,"md")].action),ie=(0,g.default)(Q[(0,p.default)(H.sizes,m,"md")].icon),pe=(0,c.twMerge)((0,a.default)(ne,re,be),I),ce=(0,a.default)(ue,fe),Oe=(0,a.default)(le,ie),Se=(0,a.default)({"ml-4":E&&m==="sm","ml-[18px]":E&&m==="md","ml-5":E&&m==="lg","mr-5":P}),Ce={unmount:{opacity:0},mount:{opacity:1}},_e=(0,i.default)(Ce,j),je=r.default.createElement("div",{className:Oe},E),Ge=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(Ge,null,k&&r.default.createElement(o.m.div,C({},W,{ref:s,className:pe,initial:"unmount",exit:"unmount",animate:k?"mount":"unmount",variants:_e}),E&&je,r.default.createElement("span",{className:Se},F),P&&!N&&r.default.createElement(O.default,{onClick:P,size:"sm",variant:"text",color:h==="outlined"||h==="ghost"?w:"white",className:ce},r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",className:(0,a.default)({"h-3.5 w-3.5":m==="sm","h-4 w-4":m==="md","h-5 w-5":m==="lg"}),strokeWidth:2},r.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))),N||null)))});d.propTypes={variant:n.default.oneOf(_.propTypesVariant),size:n.default.oneOf(_.propTypesSize),color:n.default.oneOf(_.propTypesColor),icon:_.propTypesIcon,open:_.propTypesOpen,onClose:_.propTypesOnClose,action:_.propTypesAction,animate:_.propTypesAnimate,className:_.propTypesClassName,value:_.propTypesValue},d.displayName="MaterialTailwind.Chip";var l=d})(tS);var rS={},s4=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Xa=new WeakMap,Ou=new WeakMap,Su={},Cp=0,nS=function(e){return e&&(e.host||nS(e.parentNode))},u4=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=nS(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},c4=function(e,t,r,n){var o=u4(t,Array.isArray(e)?e:[e]);Su[r]||(Su[r]=new WeakMap);var a=Su[r],i=[],c=new Set,p=new Set(o),g=function(_){!_||c.has(_)||(c.add(_),g(_.parentNode))};o.forEach(g);var v=function(_){!_||p.has(_)||Array.prototype.forEach.call(_.children,function(O){if(c.has(O))v(O);else try{var C=O.getAttribute(n),T=C!==null&&C!=="false",x=(Xa.get(O)||0)+1,b=(a.get(O)||0)+1;Xa.set(O,x),a.set(O,b),i.push(O),x===1&&T&&Ou.set(O,!0),b===1&&O.setAttribute(r,"true"),T||O.setAttribute(n,"true")}catch(d){console.error("aria-hidden: cannot operate on ",O,d)}})};return v(t),c.clear(),Cp++,function(){i.forEach(function(_){var O=Xa.get(_)-1,C=a.get(_)-1;Xa.set(_,O),a.set(_,C),O||(Ou.has(_)||_.removeAttribute(n),Ou.delete(_)),C||_.removeAttribute(r)}),Cp--,Cp||(Xa=new WeakMap,Xa=new WeakMap,Ou=new WeakMap,Su={})}},d4=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),o=t||s4(e);return o?(n.push.apply(n,Array.from(o.querySelectorAll("[aria-live], script"))),c4(n,o,r,"aria-hidden")):function(){return null}};/*! -* tabbable 6.2.0 -* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var f4=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],oh=f4.join(","),oS=typeof Element>"u",ys=oS?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Yc=!oS&&Element.prototype.getRootNode?function(e){var t;return e==null||(t=e.getRootNode)===null||t===void 0?void 0:t.call(e)}:function(e){return e==null?void 0:e.ownerDocument},Xc=function e(t,r){var n;r===void 0&&(r=!0);var o=t==null||(n=t.getAttribute)===null||n===void 0?void 0:n.call(t,"inert"),a=o===""||o==="true",i=a||r&&t&&e(t.parentNode);return i},p4=function(t){var r,n=t==null||(r=t.getAttribute)===null||r===void 0?void 0:r.call(t,"contenteditable");return n===""||n==="true"},h4=function(t,r,n){if(Xc(t))return[];var o=Array.prototype.slice.apply(t.querySelectorAll(oh));return r&&ys.call(t,oh)&&o.unshift(t),o=o.filter(n),o},g4=function e(t,r,n){for(var o=[],a=Array.from(t);a.length;){var i=a.shift();if(!Xc(i,!1))if(i.tagName==="SLOT"){var c=i.assignedElements(),p=c.length?c:i.children,g=e(p,!0,n);n.flatten?o.push.apply(o,g):o.push({scopeParent:i,candidates:g})}else{var v=ys.call(i,oh);v&&n.filter(i)&&(r||!t.includes(i))&&o.push(i);var _=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),O=!Xc(_,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(_&&O){var C=e(_===!0?i.children:_.children,!0,n);n.flatten?o.push.apply(o,C):o.push({scopeParent:i,candidates:C})}else a.unshift.apply(a,i.children)}}return o},aS=function(t){return!isNaN(parseInt(t.getAttribute("tabindex"),10))},iS=function(t){if(!t)throw new Error("No node provided");return t.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||p4(t))&&!aS(t)?0:t.tabIndex},b4=function(t,r){var n=iS(t);return n<0&&r&&!aS(t)?0:n},v4=function(t,r){return t.tabIndex===r.tabIndex?t.documentOrder-r.documentOrder:t.tabIndex-r.tabIndex},lS=function(t){return t.tagName==="INPUT"},m4=function(t){return lS(t)&&t.type==="hidden"},y4=function(t){var r=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(n){return n.tagName==="SUMMARY"});return r},w4=function(t,r){for(var n=0;nsummary:first-of-type"),i=a?t.parentElement:t;if(ys.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof o=="function"){for(var c=t;t;){var p=t.parentElement,g=Yc(t);if(p&&!p.shadowRoot&&o(p)===!0)return _w(t);t.assignedSlot?t=t.assignedSlot:!p&&g!==t.ownerDocument?t=g.host:t=p}t=c}if(C4(t))return!t.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return _w(t);return!1},S4=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var r=t.parentElement;r;){if(r.tagName==="FIELDSET"&&r.disabled){for(var n=0;n=0)},E4=function e(t){var r=[],n=[];return t.forEach(function(o,a){var i=!!o.scopeParent,c=i?o.scopeParent:o,p=b4(c,i),g=i?e(o.candidates):c;p===0?i?r.push.apply(r,g):r.push(c):n.push({documentOrder:a,tabIndex:p,item:o,isScope:i,content:g})}),n.sort(v4).reduce(function(o,a){return a.isScope?o.push.apply(o,a.content):o.push(a.content),o},[]).concat(r)},Qc=function(t,r){r=r||{};var n;return r.getShadowRoot?n=g4([t],r.includeContainer,{filter:Tw.bind(null,r),flatten:!1,getShadowRoot:r.getShadowRoot,shadowRootFilter:k4}):n=h4(t,r.includeContainer,Tw.bind(null,r)),E4(n)};const sS=["top","right","bottom","left"],Cw=["start","end"],Ow=sS.reduce((e,t)=>e.concat(t,t+"-"+Cw[0],t+"-"+Cw[1]),[]),Pn=Math.min,vr=Math.max,Jc=Math.round,Pu=Math.floor,zn=e=>({x:e,y:e}),R4={left:"right",right:"left",bottom:"top",top:"bottom"},N4={start:"end",end:"start"};function ah(e,t,r){return vr(e,Pn(t,r))}function kn(e,t){return typeof e=="function"?e(t):e}function $r(e){return e.split("-")[0]}function Cn(e){return e.split("-")[1]}function sb(e){return e==="x"?"y":"x"}function ub(e){return e==="y"?"height":"width"}const j4=new Set(["top","bottom"]);function xn(e){return j4.has($r(e))?"y":"x"}function cb(e){return sb(xn(e))}function uS(e,t,r){r===void 0&&(r=!1);const n=Cn(e),o=cb(e),a=ub(o);let i=o==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=ed(i)),[i,ed(i)]}function A4(e){const t=ed(e);return[Zc(e),t,Zc(t)]}function Zc(e){return e.replace(/start|end/g,t=>N4[t])}const Sw=["left","right"],Pw=["right","left"],M4=["top","bottom"],I4=["bottom","top"];function D4(e,t,r){switch(e){case"top":case"bottom":return r?t?Pw:Sw:t?Sw:Pw;case"left":case"right":return t?M4:I4;default:return[]}}function L4(e,t,r,n){const o=Cn(e);let a=D4($r(e),r==="start",n);return o&&(a=a.map(i=>i+"-"+o),t&&(a=a.concat(a.map(Zc)))),a}function ed(e){return e.replace(/left|right|bottom|top/g,t=>R4[t])}function F4(e){return{top:0,right:0,bottom:0,left:0,...e}}function db(e){return typeof e!="number"?F4(e):{top:e,right:e,bottom:e,left:e}}function Di(e){const{x:t,y:r,width:n,height:o}=e;return{width:n,height:o,top:r,left:t,right:t+n,bottom:r+o,x:t,y:r}}function kw(e,t,r){let{reference:n,floating:o}=e;const a=xn(t),i=cb(t),c=ub(i),p=$r(t),g=a==="y",v=n.x+n.width/2-o.width/2,_=n.y+n.height/2-o.height/2,O=n[c]/2-o[c]/2;let C;switch(p){case"top":C={x:v,y:n.y-o.height};break;case"bottom":C={x:v,y:n.y+n.height};break;case"right":C={x:n.x+n.width,y:_};break;case"left":C={x:n.x-o.width,y:_};break;default:C={x:n.x,y:n.y}}switch(Cn(t)){case"start":C[i]-=O*(r&&g?-1:1);break;case"end":C[i]+=O*(r&&g?-1:1);break}return C}const V4=async(e,t,r)=>{const{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:i}=r,c=a.filter(Boolean),p=await(i.isRTL==null?void 0:i.isRTL(t));let g=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:v,y:_}=kw(g,n,p),O=n,C={},T=0;for(let x=0;x({name:"arrow",options:e,async fn(t){const{x:r,y:n,placement:o,rects:a,platform:i,elements:c,middlewareData:p}=t,{element:g,padding:v=0}=kn(e,t)||{};if(g==null)return{};const _=db(v),O={x:r,y:n},C=cb(o),T=ub(C),x=await i.getDimensions(g),b=C==="y",d=b?"top":"left",l=b?"bottom":"right",u=b?"clientHeight":"clientWidth",s=a.reference[T]+a.reference[C]-O[C]-a.floating[T],h=O[C]-a.reference[C],m=await(i.getOffsetParent==null?void 0:i.getOffsetParent(g));let w=m?m[u]:0;(!w||!await(i.isElement==null?void 0:i.isElement(m)))&&(w=c.floating[u]||a.floating[T]);const E=s/2-h/2,k=w/2-x[T]/2-1,P=Pn(_[d],k),N=Pn(_[l],k),j=P,I=w-x[T]-N,F=w/2-x[T]/2+E,W=ah(j,F,I),G=!p.arrow&&Cn(o)!=null&&F!==W&&a.reference[T]/2-(FCn(o)===e),...r.filter(o=>Cn(o)!==e)]:r.filter(o=>$r(o)===o)).filter(o=>e?Cn(o)===e||(t?Zc(o)!==o:!1):!0)}const W4=function(e){return e===void 0&&(e={}),{name:"autoPlacement",options:e,async fn(t){var r,n,o;const{rects:a,middlewareData:i,placement:c,platform:p,elements:g}=t,{crossAxis:v=!1,alignment:_,allowedPlacements:O=Ow,autoAlignment:C=!0,...T}=kn(e,t),x=_!==void 0||O===Ow?B4(_||null,C,O):O,b=await Oa(t,T),d=((r=i.autoPlacement)==null?void 0:r.index)||0,l=x[d];if(l==null)return{};const u=uS(l,a,await(p.isRTL==null?void 0:p.isRTL(g.floating)));if(c!==l)return{reset:{placement:x[0]}};const s=[b[$r(l)],b[u[0]],b[u[1]]],h=[...((n=i.autoPlacement)==null?void 0:n.overflows)||[],{placement:l,overflows:s}],m=x[d+1];if(m)return{data:{index:d+1,overflows:h},reset:{placement:m}};const w=h.map(P=>{const N=Cn(P.placement);return[P.placement,N&&v?P.overflows.slice(0,2).reduce((j,I)=>j+I,0):P.overflows[0],P.overflows]}).sort((P,N)=>P[1]-N[1]),k=((o=w.filter(P=>P[2].slice(0,Cn(P[0])?2:3).every(N=>N<=0))[0])==null?void 0:o[0])||w[0][0];return k!==c?{data:{index:d+1,overflows:h},reset:{placement:k}}:{}}}},U4=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var r,n;const{placement:o,middlewareData:a,rects:i,initialPlacement:c,platform:p,elements:g}=t,{mainAxis:v=!0,crossAxis:_=!0,fallbackPlacements:O,fallbackStrategy:C="bestFit",fallbackAxisSideDirection:T="none",flipAlignment:x=!0,...b}=kn(e,t);if((r=a.arrow)!=null&&r.alignmentOffset)return{};const d=$r(o),l=xn(c),u=$r(c)===c,s=await(p.isRTL==null?void 0:p.isRTL(g.floating)),h=O||(u||!x?[ed(c)]:A4(c)),m=T!=="none";!O&&m&&h.push(...L4(c,x,T,s));const w=[c,...h],E=await Oa(t,b),k=[];let P=((n=a.flip)==null?void 0:n.overflows)||[];if(v&&k.push(E[d]),_){const F=uS(o,i,s);k.push(E[F[0]],E[F[1]])}if(P=[...P,{placement:o,overflows:k}],!k.every(F=>F<=0)){var N,j;const F=(((N=a.flip)==null?void 0:N.index)||0)+1,W=w[F];if(W&&(!(_==="alignment"?l!==xn(W):!1)||P.every(H=>xn(H.placement)===l?H.overflows[0]>0:!0)))return{data:{index:F,overflows:P},reset:{placement:W}};let G=(j=P.filter(X=>X.overflows[0]<=0).sort((X,H)=>X.overflows[1]-H.overflows[1])[0])==null?void 0:j.placement;if(!G)switch(C){case"bestFit":{var I;const X=(I=P.filter(H=>{if(m){const B=xn(H.placement);return B===l||B==="y"}return!0}).map(H=>[H.placement,H.overflows.filter(B=>B>0).reduce((B,U)=>B+U,0)]).sort((H,B)=>H[1]-B[1])[0])==null?void 0:I[0];X&&(G=X);break}case"initialPlacement":G=c;break}if(o!==G)return{reset:{placement:G}}}return{}}}};function Ew(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Rw(e){return sS.some(t=>e[t]>=0)}const H4=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:r}=t,{strategy:n="referenceHidden",...o}=kn(e,t);switch(n){case"referenceHidden":{const a=await Oa(t,{...o,elementContext:"reference"}),i=Ew(a,r.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Rw(i)}}}case"escaped":{const a=await Oa(t,{...o,altBoundary:!0}),i=Ew(a,r.floating);return{data:{escapedOffsets:i,escaped:Rw(i)}}}default:return{}}}}};function cS(e){const t=Pn(...e.map(a=>a.left)),r=Pn(...e.map(a=>a.top)),n=vr(...e.map(a=>a.right)),o=vr(...e.map(a=>a.bottom));return{x:t,y:r,width:n-t,height:o-r}}function $4(e){const t=e.slice().sort((o,a)=>o.y-a.y),r=[];let n=null;for(let o=0;on.height/2?r.push([a]):r[r.length-1].push(a),n=a}return r.map(o=>Di(cS(o)))}const q4=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:r,elements:n,rects:o,platform:a,strategy:i}=t,{padding:c=2,x:p,y:g}=kn(e,t),v=Array.from(await(a.getClientRects==null?void 0:a.getClientRects(n.reference))||[]),_=$4(v),O=Di(cS(v)),C=db(c);function T(){if(_.length===2&&_[0].left>_[1].right&&p!=null&&g!=null)return _.find(b=>p>b.left-C.left&&pb.top-C.top&&g=2){if(xn(r)==="y"){const P=_[0],N=_[_.length-1],j=$r(r)==="top",I=P.top,F=N.bottom,W=j?P.left:N.left,G=j?P.right:N.right,X=G-W,H=F-I;return{top:I,bottom:F,left:W,right:G,width:X,height:H,x:W,y:I}}const b=$r(r)==="left",d=vr(..._.map(P=>P.right)),l=Pn(..._.map(P=>P.left)),u=_.filter(P=>b?P.left===l:P.right===d),s=u[0].top,h=u[u.length-1].bottom,m=l,w=d,E=w-m,k=h-s;return{top:s,bottom:h,left:m,right:w,width:E,height:k,x:m,y:s}}return O}const x=await a.getElementRects({reference:{getBoundingClientRect:T},floating:n.floating,strategy:i});return o.reference.x!==x.reference.x||o.reference.y!==x.reference.y||o.reference.width!==x.reference.width||o.reference.height!==x.reference.height?{reset:{rects:x}}:{}}}},dS=new Set(["left","top"]);async function G4(e,t){const{placement:r,platform:n,elements:o}=e,a=await(n.isRTL==null?void 0:n.isRTL(o.floating)),i=$r(r),c=Cn(r),p=xn(r)==="y",g=dS.has(i)?-1:1,v=a&&p?-1:1,_=kn(t,e);let{mainAxis:O,crossAxis:C,alignmentAxis:T}=typeof _=="number"?{mainAxis:_,crossAxis:0,alignmentAxis:null}:{mainAxis:_.mainAxis||0,crossAxis:_.crossAxis||0,alignmentAxis:_.alignmentAxis};return c&&typeof T=="number"&&(C=c==="end"?T*-1:T),p?{x:C*v,y:O*g}:{x:O*g,y:C*v}}const K4=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var r,n;const{x:o,y:a,placement:i,middlewareData:c}=t,p=await G4(t,e);return i===((r=c.offset)==null?void 0:r.placement)&&(n=c.arrow)!=null&&n.alignmentOffset?{}:{x:o+p.x,y:a+p.y,data:{...p,placement:i}}}}},Y4=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:n,placement:o}=t,{mainAxis:a=!0,crossAxis:i=!1,limiter:c={fn:b=>{let{x:d,y:l}=b;return{x:d,y:l}}},...p}=kn(e,t),g={x:r,y:n},v=await Oa(t,p),_=xn($r(o)),O=sb(_);let C=g[O],T=g[_];if(a){const b=O==="y"?"top":"left",d=O==="y"?"bottom":"right",l=C+v[b],u=C-v[d];C=ah(l,C,u)}if(i){const b=_==="y"?"top":"left",d=_==="y"?"bottom":"right",l=T+v[b],u=T-v[d];T=ah(l,T,u)}const x=c.fn({...t,[O]:C,[_]:T});return{...x,data:{x:x.x-r,y:x.y-n,enabled:{[O]:a,[_]:i}}}}}},X4=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:n,placement:o,rects:a,middlewareData:i}=t,{offset:c=0,mainAxis:p=!0,crossAxis:g=!0}=kn(e,t),v={x:r,y:n},_=xn(o),O=sb(_);let C=v[O],T=v[_];const x=kn(c,t),b=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:0,crossAxis:0,...x};if(p){const u=O==="y"?"height":"width",s=a.reference[O]-a.floating[u]+b.mainAxis,h=a.reference[O]+a.reference[u]-b.mainAxis;Ch&&(C=h)}if(g){var d,l;const u=O==="y"?"width":"height",s=dS.has($r(o)),h=a.reference[_]-a.floating[u]+(s&&((d=i.offset)==null?void 0:d[_])||0)+(s?0:b.crossAxis),m=a.reference[_]+a.reference[u]+(s?0:((l=i.offset)==null?void 0:l[_])||0)-(s?b.crossAxis:0);Tm&&(T=m)}return{[O]:C,[_]:T}}}},Q4=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var r,n;const{placement:o,rects:a,platform:i,elements:c}=t,{apply:p=()=>{},...g}=kn(e,t),v=await Oa(t,g),_=$r(o),O=Cn(o),C=xn(o)==="y",{width:T,height:x}=a.floating;let b,d;_==="top"||_==="bottom"?(b=_,d=O===(await(i.isRTL==null?void 0:i.isRTL(c.floating))?"start":"end")?"left":"right"):(d=_,b=O==="end"?"top":"bottom");const l=x-v.top-v.bottom,u=T-v.left-v.right,s=Pn(x-v[b],l),h=Pn(T-v[d],u),m=!t.middlewareData.shift;let w=s,E=h;if((r=t.middlewareData.shift)!=null&&r.enabled.x&&(E=u),(n=t.middlewareData.shift)!=null&&n.enabled.y&&(w=l),m&&!O){const P=vr(v.left,0),N=vr(v.right,0),j=vr(v.top,0),I=vr(v.bottom,0);C?E=T-2*(P!==0||N!==0?P+N:vr(v.left,v.right)):w=x-2*(j!==0||I!==0?j+I:vr(v.top,v.bottom))}await p({...t,availableWidth:E,availableHeight:w});const k=await i.getDimensions(c.floating);return T!==k.width||x!==k.height?{reset:{rects:!0}}:{}}}};function Bd(){return typeof window<"u"}function Gi(e){return fS(e)?(e.nodeName||"").toLowerCase():"#document"}function Br(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Hn(e){var t;return(t=(fS(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function fS(e){return Bd()?e instanceof Node||e instanceof Br(e).Node:!1}function En(e){return Bd()?e instanceof Element||e instanceof Br(e).Element:!1}function Wn(e){return Bd()?e instanceof HTMLElement||e instanceof Br(e).HTMLElement:!1}function Nw(e){return!Bd()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Br(e).ShadowRoot}const J4=new Set(["inline","contents"]);function Ls(e){const{overflow:t,overflowX:r,overflowY:n,display:o}=Rn(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!J4.has(o)}const Z4=new Set(["table","td","th"]);function eF(e){return Z4.has(Gi(e))}const tF=[":popover-open",":modal"];function Wd(e){return tF.some(t=>{try{return e.matches(t)}catch{return!1}})}const rF=["transform","translate","scale","rotate","perspective"],nF=["transform","translate","scale","rotate","perspective","filter"],oF=["paint","layout","strict","content"];function fb(e){const t=pb(),r=En(e)?Rn(e):e;return rF.some(n=>r[n]?r[n]!=="none":!1)||(r.containerType?r.containerType!=="normal":!1)||!t&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!t&&(r.filter?r.filter!=="none":!1)||nF.some(n=>(r.willChange||"").includes(n))||oF.some(n=>(r.contain||"").includes(n))}function aF(e){let t=Go(e);for(;Wn(t)&&!Li(t);){if(fb(t))return t;if(Wd(t))return null;t=Go(t)}return null}function pb(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const iF=new Set(["html","body","#document"]);function Li(e){return iF.has(Gi(e))}function Rn(e){return Br(e).getComputedStyle(e)}function Ud(e){return En(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Go(e){if(Gi(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Nw(e)&&e.host||Hn(e);return Nw(t)?t.host:t}function pS(e){const t=Go(e);return Li(t)?e.ownerDocument?e.ownerDocument.body:e.body:Wn(t)&&Ls(t)?t:pS(t)}function eo(e,t,r){var n;t===void 0&&(t=[]),r===void 0&&(r=!0);const o=pS(e),a=o===((n=e.ownerDocument)==null?void 0:n.body),i=Br(o);if(a){const c=ih(i);return t.concat(i,i.visualViewport||[],Ls(o)?o:[],c&&r?eo(c):[])}return t.concat(o,eo(o,[],r))}function ih(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function hS(e){const t=Rn(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const o=Wn(e),a=o?e.offsetWidth:r,i=o?e.offsetHeight:n,c=Jc(r)!==a||Jc(n)!==i;return c&&(r=a,n=i),{width:r,height:n,$:c}}function hb(e){return En(e)?e:e.contextElement}function _i(e){const t=hb(e);if(!Wn(t))return zn(1);const r=t.getBoundingClientRect(),{width:n,height:o,$:a}=hS(t);let i=(a?Jc(r.width):r.width)/n,c=(a?Jc(r.height):r.height)/o;return(!i||!Number.isFinite(i))&&(i=1),(!c||!Number.isFinite(c))&&(c=1),{x:i,y:c}}const lF=zn(0);function gS(e){const t=Br(e);return!pb()||!t.visualViewport?lF:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function sF(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==Br(e)?!1:t}function Sa(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);const o=e.getBoundingClientRect(),a=hb(e);let i=zn(1);t&&(n?En(n)&&(i=_i(n)):i=_i(e));const c=sF(a,r,n)?gS(a):zn(0);let p=(o.left+c.x)/i.x,g=(o.top+c.y)/i.y,v=o.width/i.x,_=o.height/i.y;if(a){const O=Br(a),C=n&&En(n)?Br(n):n;let T=O,x=ih(T);for(;x&&n&&C!==T;){const b=_i(x),d=x.getBoundingClientRect(),l=Rn(x),u=d.left+(x.clientLeft+parseFloat(l.paddingLeft))*b.x,s=d.top+(x.clientTop+parseFloat(l.paddingTop))*b.y;p*=b.x,g*=b.y,v*=b.x,_*=b.y,p+=u,g+=s,T=Br(x),x=ih(T)}}return Di({width:v,height:_,x:p,y:g})}function Hd(e,t){const r=Ud(e).scrollLeft;return t?t.left+r:Sa(Hn(e)).left+r}function bS(e,t){const r=e.getBoundingClientRect(),n=r.left+t.scrollLeft-Hd(e,r),o=r.top+t.scrollTop;return{x:n,y:o}}function uF(e){let{elements:t,rect:r,offsetParent:n,strategy:o}=e;const a=o==="fixed",i=Hn(n),c=t?Wd(t.floating):!1;if(n===i||c&&a)return r;let p={scrollLeft:0,scrollTop:0},g=zn(1);const v=zn(0),_=Wn(n);if((_||!_&&!a)&&((Gi(n)!=="body"||Ls(i))&&(p=Ud(n)),Wn(n))){const C=Sa(n);g=_i(n),v.x=C.x+n.clientLeft,v.y=C.y+n.clientTop}const O=i&&!_&&!a?bS(i,p):zn(0);return{width:r.width*g.x,height:r.height*g.y,x:r.x*g.x-p.scrollLeft*g.x+v.x+O.x,y:r.y*g.y-p.scrollTop*g.y+v.y+O.y}}function cF(e){return Array.from(e.getClientRects())}function dF(e){const t=Hn(e),r=Ud(e),n=e.ownerDocument.body,o=vr(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),a=vr(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let i=-r.scrollLeft+Hd(e);const c=-r.scrollTop;return Rn(n).direction==="rtl"&&(i+=vr(t.clientWidth,n.clientWidth)-o),{width:o,height:a,x:i,y:c}}const jw=25;function fF(e,t){const r=Br(e),n=Hn(e),o=r.visualViewport;let a=n.clientWidth,i=n.clientHeight,c=0,p=0;if(o){a=o.width,i=o.height;const v=pb();(!v||v&&t==="fixed")&&(c=o.offsetLeft,p=o.offsetTop)}const g=Hd(n);if(g<=0){const v=n.ownerDocument,_=v.body,O=getComputedStyle(_),C=v.compatMode==="CSS1Compat"&&parseFloat(O.marginLeft)+parseFloat(O.marginRight)||0,T=Math.abs(n.clientWidth-_.clientWidth-C);T<=jw&&(a-=T)}else g<=jw&&(a+=g);return{width:a,height:i,x:c,y:p}}const pF=new Set(["absolute","fixed"]);function hF(e,t){const r=Sa(e,!0,t==="fixed"),n=r.top+e.clientTop,o=r.left+e.clientLeft,a=Wn(e)?_i(e):zn(1),i=e.clientWidth*a.x,c=e.clientHeight*a.y,p=o*a.x,g=n*a.y;return{width:i,height:c,x:p,y:g}}function Aw(e,t,r){let n;if(t==="viewport")n=fF(e,r);else if(t==="document")n=dF(Hn(e));else if(En(t))n=hF(t,r);else{const o=gS(e);n={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return Di(n)}function vS(e,t){const r=Go(e);return r===t||!En(r)||Li(r)?!1:Rn(r).position==="fixed"||vS(r,t)}function gF(e,t){const r=t.get(e);if(r)return r;let n=eo(e,[],!1).filter(c=>En(c)&&Gi(c)!=="body"),o=null;const a=Rn(e).position==="fixed";let i=a?Go(e):e;for(;En(i)&&!Li(i);){const c=Rn(i),p=fb(i);!p&&c.position==="fixed"&&(o=null),(a?!p&&!o:!p&&c.position==="static"&&!!o&&pF.has(o.position)||Ls(i)&&!p&&vS(e,i))?n=n.filter(v=>v!==i):o=c,i=Go(i)}return t.set(e,n),n}function bF(e){let{element:t,boundary:r,rootBoundary:n,strategy:o}=e;const i=[...r==="clippingAncestors"?Wd(t)?[]:gF(t,this._c):[].concat(r),n],c=i[0],p=i.reduce((g,v)=>{const _=Aw(t,v,o);return g.top=vr(_.top,g.top),g.right=Pn(_.right,g.right),g.bottom=Pn(_.bottom,g.bottom),g.left=vr(_.left,g.left),g},Aw(t,c,o));return{width:p.right-p.left,height:p.bottom-p.top,x:p.left,y:p.top}}function vF(e){const{width:t,height:r}=hS(e);return{width:t,height:r}}function mF(e,t,r){const n=Wn(t),o=Hn(t),a=r==="fixed",i=Sa(e,!0,a,t);let c={scrollLeft:0,scrollTop:0};const p=zn(0);function g(){p.x=Hd(o)}if(n||!n&&!a)if((Gi(t)!=="body"||Ls(o))&&(c=Ud(t)),n){const C=Sa(t,!0,a,t);p.x=C.x+t.clientLeft,p.y=C.y+t.clientTop}else o&&g();a&&!n&&o&&g();const v=o&&!n&&!a?bS(o,c):zn(0),_=i.left+c.scrollLeft-p.x-v.x,O=i.top+c.scrollTop-p.y-v.y;return{x:_,y:O,width:i.width,height:i.height}}function Op(e){return Rn(e).position==="static"}function Mw(e,t){if(!Wn(e)||Rn(e).position==="fixed")return null;if(t)return t(e);let r=e.offsetParent;return Hn(e)===r&&(r=r.ownerDocument.body),r}function mS(e,t){const r=Br(e);if(Wd(e))return r;if(!Wn(e)){let o=Go(e);for(;o&&!Li(o);){if(En(o)&&!Op(o))return o;o=Go(o)}return r}let n=Mw(e,t);for(;n&&eF(n)&&Op(n);)n=Mw(n,t);return n&&Li(n)&&Op(n)&&!fb(n)?r:n||aF(e)||r}const yF=async function(e){const t=this.getOffsetParent||mS,r=this.getDimensions,n=await r(e.floating);return{reference:mF(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function wF(e){return Rn(e).direction==="rtl"}const yS={convertOffsetParentRelativeRectToViewportRelativeRect:uF,getDocumentElement:Hn,getClippingRect:bF,getOffsetParent:mS,getElementRects:yF,getClientRects:cF,getDimensions:vF,getScale:_i,isElement:En,isRTL:wF};function wS(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function xF(e,t){let r=null,n;const o=Hn(e);function a(){var c;clearTimeout(n),(c=r)==null||c.disconnect(),r=null}function i(c,p){c===void 0&&(c=!1),p===void 0&&(p=1),a();const g=e.getBoundingClientRect(),{left:v,top:_,width:O,height:C}=g;if(c||t(),!O||!C)return;const T=Pu(_),x=Pu(o.clientWidth-(v+O)),b=Pu(o.clientHeight-(_+C)),d=Pu(v),u={rootMargin:-T+"px "+-x+"px "+-b+"px "+-d+"px",threshold:vr(0,Pn(1,p))||1};let s=!0;function h(m){const w=m[0].intersectionRatio;if(w!==p){if(!s)return i();w?i(!1,w):n=setTimeout(()=>{i(!1,1e-7)},1e3)}w===1&&!wS(g,e.getBoundingClientRect())&&i(),s=!1}try{r=new IntersectionObserver(h,{...u,root:o.ownerDocument})}catch{r=new IntersectionObserver(h,u)}r.observe(e)}return i(!0),a}function _F(e,t,r,n){n===void 0&&(n={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:p=!1}=n,g=hb(e),v=o||a?[...g?eo(g):[],...eo(t)]:[];v.forEach(d=>{o&&d.addEventListener("scroll",r,{passive:!0}),a&&d.addEventListener("resize",r)});const _=g&&c?xF(g,r):null;let O=-1,C=null;i&&(C=new ResizeObserver(d=>{let[l]=d;l&&l.target===g&&C&&(C.unobserve(t),cancelAnimationFrame(O),O=requestAnimationFrame(()=>{var u;(u=C)==null||u.observe(t)})),r()}),g&&!p&&C.observe(g),C.observe(t));let T,x=p?Sa(e):null;p&&b();function b(){const d=Sa(e);x&&!wS(x,d)&&r(),x=d,T=requestAnimationFrame(b)}return r(),()=>{var d;v.forEach(l=>{o&&l.removeEventListener("scroll",r),a&&l.removeEventListener("resize",r)}),_==null||_(),(d=C)==null||d.disconnect(),C=null,p&&cancelAnimationFrame(T)}}const ec=Oa,xS=K4,TF=W4,CF=Y4,OF=U4,SF=Q4,PF=H4,Iw=z4,kF=q4,EF=X4,_S=(e,t,r)=>{const n=new Map,o={platform:yS,...r},a={...o.platform,_c:n};return V4(e,t,{...o,platform:a})},RF=e=>{const{element:t,padding:r}=e;function n(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return n(t)?t.current!=null?Iw({element:t.current,padding:r}).fn(o):{}:t?Iw({element:t,padding:r}).fn(o):{}}}};var tc=typeof document<"u"?A.useLayoutEffect:A.useEffect;function td(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!td(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;n--!==0;){const a=o[n];if(!(a==="_owner"&&e.$$typeof)&&!td(e[a],t[a]))return!1}return!0}return e!==e&&t!==t}function Dw(e){const t=A.useRef(e);return tc(()=>{t.current=e}),t}function NF(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:n=[],platform:o,whileElementsMounted:a,open:i}=e,[c,p]=A.useState({x:null,y:null,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[g,v]=A.useState(n);td(g,n)||v(n);const _=A.useRef(null),O=A.useRef(null),C=A.useRef(c),T=Dw(a),x=Dw(o),[b,d]=A.useState(null),[l,u]=A.useState(null),s=A.useCallback(P=>{_.current!==P&&(_.current=P,d(P))},[]),h=A.useCallback(P=>{O.current!==P&&(O.current=P,u(P))},[]),m=A.useCallback(()=>{if(!_.current||!O.current)return;const P={placement:t,strategy:r,middleware:g};x.current&&(P.platform=x.current),_S(_.current,O.current,P).then(N=>{const j={...N,isPositioned:!0};w.current&&!td(C.current,j)&&(C.current=j,ao.flushSync(()=>{p(j)}))})},[g,t,r,x]);tc(()=>{i===!1&&C.current.isPositioned&&(C.current.isPositioned=!1,p(P=>({...P,isPositioned:!1})))},[i]);const w=A.useRef(!1);tc(()=>(w.current=!0,()=>{w.current=!1}),[]),tc(()=>{if(b&&l){if(T.current)return T.current(b,l,m);m()}},[b,l,m,T]);const E=A.useMemo(()=>({reference:_,floating:O,setReference:s,setFloating:h}),[s,h]),k=A.useMemo(()=>({reference:b,floating:l}),[b,l]);return A.useMemo(()=>({...c,update:m,refs:E,elements:k,reference:s,floating:h}),[c,m,E,k,s,h])}var Dt=typeof document<"u"?A.useLayoutEffect:A.useEffect;let Sp=!1,jF=0;const Lw=()=>"floating-ui-"+jF++;function AF(){const[e,t]=A.useState(()=>Sp?Lw():void 0);return Dt(()=>{e==null&&t(Lw())},[]),A.useEffect(()=>{Sp||(Sp=!0)},[]),e}const MF=kh["useId".toString()],ws=MF||AF;function TS(){const e=new Map;return{emit(t,r){var n;(n=e.get(t))==null||n.forEach(o=>o(r))},on(t,r){e.set(t,[...e.get(t)||[],r])},off(t,r){e.set(t,(e.get(t)||[]).filter(n=>n!==r))}}}const CS=A.createContext(null),OS=A.createContext(null),Ki=()=>{var e;return((e=A.useContext(CS))==null?void 0:e.id)||null},Fa=()=>A.useContext(OS),IF=e=>{const t=ws(),r=Fa(),n=Ki(),o=e||n;return Dt(()=>{const a={id:t,parentId:o};return r==null||r.addNode(a),()=>{r==null||r.removeNode(a)}},[r,t,o]),t},DF=e=>{let{children:t,id:r}=e;const n=Ki();return A.createElement(CS.Provider,{value:A.useMemo(()=>({id:r,parentId:n}),[r,n])},t)},LF=e=>{let{children:t}=e;const r=A.useRef([]),n=A.useCallback(i=>{r.current=[...r.current,i]},[]),o=A.useCallback(i=>{r.current=r.current.filter(c=>c!==i)},[]),a=A.useState(()=>TS())[0];return A.createElement(OS.Provider,{value:A.useMemo(()=>({nodesRef:r,addNode:n,removeNode:o,events:a}),[r,n,o,a])},t)};function jr(e){return(e==null?void 0:e.ownerDocument)||document}function gb(){const e=navigator.userAgentData;return e!=null&&e.platform?e.platform:navigator.platform}function SS(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(t=>{let{brand:r,version:n}=t;return r+"/"+n}).join(" "):navigator.userAgent}function bb(e){return jr(e).defaultView||window}function ln(e){return e?e instanceof bb(e).Element:!1}function Pa(e){return e?e instanceof bb(e).HTMLElement:!1}function FF(e){if(typeof ShadowRoot>"u")return!1;const t=bb(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function PS(e){if(e.mozInputSource===0&&e.isTrusted)return!0;const t=/Android/i;return(t.test(gb())||t.test(SS()))&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function kS(e){return e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType!=="mouse"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0}function lh(){return/apple/i.test(navigator.vendor)}function ES(){return gb().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function rd(e,t){const r=["mouse","pen"];return t||r.push("",void 0),r.includes(e)}function sn(e){const t=A.useRef(e);return Dt(()=>{t.current=e}),t}const Fw="data-floating-ui-safe-polygon";function rc(e,t,r){return r&&!rd(r)?0:typeof e=="number"?e:e==null?void 0:e[t]}const VF=function(e,t){let{enabled:r=!0,delay:n=0,handleClose:o=null,mouseOnly:a=!1,restMs:i=0,move:c=!0}=t===void 0?{}:t;const{open:p,onOpenChange:g,dataRef:v,events:_,elements:{domReference:O,floating:C},refs:T}=e,x=Fa(),b=Ki(),d=sn(o),l=sn(n),u=A.useRef(),s=A.useRef(),h=A.useRef(),m=A.useRef(),w=A.useRef(!0),E=A.useRef(!1),k=A.useRef(()=>{}),P=A.useCallback(()=>{var F;const W=(F=v.current.openEvent)==null?void 0:F.type;return(W==null?void 0:W.includes("mouse"))&&W!=="mousedown"},[v]);A.useEffect(()=>{if(!r)return;function F(){clearTimeout(s.current),clearTimeout(m.current),w.current=!0}return _.on("dismiss",F),()=>{_.off("dismiss",F)}},[r,_]),A.useEffect(()=>{if(!r||!d.current||!p)return;function F(){P()&&g(!1)}const W=jr(C).documentElement;return W.addEventListener("mouseleave",F),()=>{W.removeEventListener("mouseleave",F)}},[C,p,g,r,d,v,P]);const N=A.useCallback(function(F){F===void 0&&(F=!0);const W=rc(l.current,"close",u.current);W&&!h.current?(clearTimeout(s.current),s.current=setTimeout(()=>g(!1),W)):F&&(clearTimeout(s.current),g(!1))},[l,g]),j=A.useCallback(()=>{k.current(),h.current=void 0},[]),I=A.useCallback(()=>{if(E.current){const F=jr(T.floating.current).body;F.style.pointerEvents="",F.removeAttribute(Fw),E.current=!1}},[T]);return A.useEffect(()=>{if(!r)return;function F(){return v.current.openEvent?["click","mousedown"].includes(v.current.openEvent.type):!1}function W(H){if(clearTimeout(s.current),w.current=!1,a&&!rd(u.current)||i>0&&rc(l.current,"open")===0)return;v.current.openEvent=H;const B=rc(l.current,"open",u.current);B?s.current=setTimeout(()=>{g(!0)},B):g(!0)}function G(H){if(F())return;k.current();const B=jr(C);if(clearTimeout(m.current),d.current){clearTimeout(s.current),h.current=d.current({...e,tree:x,x:H.clientX,y:H.clientY,onClose(){I(),j(),N()}});const U=h.current;B.addEventListener("mousemove",U),k.current=()=>{B.removeEventListener("mousemove",U)};return}N()}function X(H){F()||d.current==null||d.current({...e,tree:x,x:H.clientX,y:H.clientY,onClose(){j(),N()}})(H)}if(ln(O)){const H=O;return p&&H.addEventListener("mouseleave",X),C==null||C.addEventListener("mouseleave",X),c&&H.addEventListener("mousemove",W,{once:!0}),H.addEventListener("mouseenter",W),H.addEventListener("mouseleave",G),()=>{p&&H.removeEventListener("mouseleave",X),C==null||C.removeEventListener("mouseleave",X),c&&H.removeEventListener("mousemove",W),H.removeEventListener("mouseenter",W),H.removeEventListener("mouseleave",G)}}},[O,C,r,e,a,i,c,N,j,I,g,p,x,l,d,v]),Dt(()=>{var F;if(r&&p&&(F=d.current)!=null&&F.__options.blockPointerEvents&&P()){const X=jr(C).body;if(X.setAttribute(Fw,""),X.style.pointerEvents="none",E.current=!0,ln(O)&&C){var W,G;const H=O,B=x==null||(W=x.nodesRef.current.find(U=>U.id===b))==null||(G=W.context)==null?void 0:G.elements.floating;return B&&(B.style.pointerEvents=""),H.style.pointerEvents="auto",C.style.pointerEvents="auto",()=>{H.style.pointerEvents="",C.style.pointerEvents=""}}}},[r,p,b,C,O,x,d,v,P]),Dt(()=>{p||(u.current=void 0,j(),I())},[p,j,I]),A.useEffect(()=>()=>{j(),clearTimeout(s.current),clearTimeout(m.current),I()},[r,j,I]),A.useMemo(()=>{if(!r)return{};function F(W){u.current=W.pointerType}return{reference:{onPointerDown:F,onPointerEnter:F,onMouseMove(){p||i===0||(clearTimeout(m.current),m.current=setTimeout(()=>{w.current||g(!0)},i))}},floating:{onMouseEnter(){clearTimeout(s.current)},onMouseLeave(){_.emit("dismiss",{type:"mouseLeave",data:{returnFocus:!1}}),N(!1)}}}},[_,r,i,p,g,N])},RS=A.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:()=>{},setState:()=>{},isInstantPhase:!1}),NS=()=>A.useContext(RS),zF=e=>{let{children:t,delay:r,timeoutMs:n=0}=e;const[o,a]=A.useReducer((p,g)=>({...p,...g}),{delay:r,timeoutMs:n,initialDelay:r,currentId:null,isInstantPhase:!1}),i=A.useRef(null),c=A.useCallback(p=>{a({currentId:p})},[]);return Dt(()=>{o.currentId?i.current===null?i.current=o.currentId:a({isInstantPhase:!0}):(a({isInstantPhase:!1}),i.current=null)},[o.currentId]),A.createElement(RS.Provider,{value:A.useMemo(()=>({...o,setState:a,setCurrentId:c}),[o,a,c])},t)},BF=(e,t)=>{let{open:r,onOpenChange:n}=e,{id:o}=t;const{currentId:a,setCurrentId:i,initialDelay:c,setState:p,timeoutMs:g}=NS();A.useEffect(()=>{a&&(p({delay:{open:1,close:rc(c,"close")}}),a!==o&&n(!1))},[o,n,p,a,c]),A.useEffect(()=>{function v(){n(!1),p({delay:c,currentId:null})}if(!r&&a===o)if(g){const _=window.setTimeout(v,g);return()=>{clearTimeout(_)}}else v()},[r,p,a,o,n,c,g]),A.useEffect(()=>{r&&i(o)},[r,i,o])};function xs(){return xs=Object.assign||function(e){for(var t=1;te==null?void 0:e.focus({preventScroll:r});o?a():Vw=requestAnimationFrame(a)}function WF(e,t){var r;let n=[],o=(r=e.find(a=>a.id===t))==null?void 0:r.parentId;for(;o;){const a=e.find(i=>i.id===o);o=a==null?void 0:a.parentId,a&&(n=n.concat(a))}return n}function Gl(e,t){let r=e.filter(o=>{var a;return o.parentId===t&&((a=o.context)==null?void 0:a.open)})||[],n=r;for(;n.length;)n=e.filter(o=>{var a;return(a=n)==null?void 0:a.some(i=>{var c;return o.parentId===i.id&&((c=o.context)==null?void 0:c.open)})})||[],r=r.concat(n);return r}function $d(e){return"composedPath"in e?e.composedPath()[0]:e.target}const UF="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";function jS(e){return Pa(e)&&e.matches(UF)}function tn(e){e.preventDefault(),e.stopPropagation()}const nd=()=>({getShadowRoot:!0,displayCheck:typeof ResizeObserver=="function"&&ResizeObserver.toString().includes("[native code]")?"full":"none"});function AS(e,t){const r=Qc(e,nd());t==="prev"&&r.reverse();const n=r.indexOf(ka(jr(e)));return r.slice(n+1)[0]}function MS(){return AS(document.body,"next")}function IS(){return AS(document.body,"prev")}function Kl(e,t){const r=t||e.currentTarget,n=e.relatedTarget;return!n||!kr(r,n)}function HF(e){Qc(e,nd()).forEach(r=>{r.dataset.tabindex=r.getAttribute("tabindex")||"",r.setAttribute("tabindex","-1")})}function $F(e){e.querySelectorAll("[data-tabindex]").forEach(r=>{const n=r.dataset.tabindex;delete r.dataset.tabindex,n?r.setAttribute("tabindex",n):r.removeAttribute("tabindex")})}const qF=kh["useInsertionEffect".toString()],GF=qF||(e=>e());function Yi(e){const t=A.useRef(()=>{});return GF(()=>{t.current=e}),A.useCallback(function(){for(var r=arguments.length,n=new Array(r),o=0;o(lh()&&a("button"),document.addEventListener("keydown",zw),()=>{document.removeEventListener("keydown",zw)}),[]),A.createElement("span",xs({},t,{ref:r,tabIndex:0,role:o,"aria-hidden":o?void 0:!0,"data-floating-ui-focus-guard":"",style:vb,onFocus:i=>{lh()&&ES()&&!KF(i)?(i.persist(),mb=window.setTimeout(()=>{n(i)},50)):n(i)}}))}),DS=A.createContext(null),LS=function(e){let{id:t,enabled:r=!0}=e===void 0?{}:e;const[n,o]=A.useState(null),a=ws(),i=FS();return Dt(()=>{if(!r)return;const c=t?document.getElementById(t):null;if(c)c.setAttribute("data-floating-ui-portal",""),o(c);else{const p=document.createElement("div");t!==""&&(p.id=t||a),p.setAttribute("data-floating-ui-portal",""),o(p);const g=(i==null?void 0:i.portalNode)||document.body;return g.appendChild(p),()=>{g.removeChild(p)}}},[t,i,a,r]),n},YF=e=>{let{children:t,id:r,root:n=null,preserveTabOrder:o=!0}=e;const a=LS({id:r,enabled:!n}),[i,c]=A.useState(null),p=A.useRef(null),g=A.useRef(null),v=A.useRef(null),_=A.useRef(null),O=!!i&&!i.modal&&!!(n||a)&&o;return A.useEffect(()=>{if(!a||!o||i!=null&&i.modal)return;function C(T){a&&Kl(T)&&(T.type==="focusin"?$F:HF)(a)}return a.addEventListener("focusin",C,!0),a.addEventListener("focusout",C,!0),()=>{a.removeEventListener("focusin",C,!0),a.removeEventListener("focusout",C,!0)}},[a,o,i==null?void 0:i.modal]),A.createElement(DS.Provider,{value:A.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:p,afterOutsideRef:g,beforeInsideRef:v,afterInsideRef:_,portalNode:a,setFocusManagerState:c}),[o,a])},O&&a&&A.createElement(od,{"data-type":"outside",ref:p,onFocus:C=>{if(Kl(C,a)){var T;(T=v.current)==null||T.focus()}else{const x=IS()||(i==null?void 0:i.refs.domReference.current);x==null||x.focus()}}}),O&&a&&A.createElement("span",{"aria-owns":a.id,style:vb}),n?ao.createPortal(t,n):a?ao.createPortal(t,a):null,O&&a&&A.createElement(od,{"data-type":"outside",ref:g,onFocus:C=>{if(Kl(C,a)){var T;(T=_.current)==null||T.focus()}else{const x=MS()||(i==null?void 0:i.refs.domReference.current);x==null||x.focus(),i!=null&&i.closeOnFocusOut&&(i==null||i.onOpenChange(!1))}}}))},FS=()=>A.useContext(DS),XF=A.forwardRef(function(t,r){return A.createElement("button",xs({},t,{type:"button",ref:r,tabIndex:-1,style:vb}))});function QF(e){let{context:t,children:r,order:n=["content"],guards:o=!0,initialFocus:a=0,returnFocus:i=!0,modal:c=!0,visuallyHiddenDismiss:p=!1,closeOnFocusOut:g=!0}=e;const{refs:v,nodeId:_,onOpenChange:O,events:C,dataRef:T,elements:{domReference:x,floating:b}}=t,d=sn(n),l=Fa(),u=FS(),[s,h]=A.useState(null),m=typeof a=="number"&&a<0,w=A.useRef(null),E=A.useRef(null),k=A.useRef(!1),P=A.useRef(null),N=A.useRef(!1),j=u!=null,I=x&&x.getAttribute("role")==="combobox"&&jS(x),F=A.useCallback(function(H){return H===void 0&&(H=b),H?Qc(H,nd()):[]},[b]),W=A.useCallback(H=>{const B=F(H);return d.current.map(U=>x&&U==="reference"?x:b&&U==="floating"?b:B).filter(Boolean).flat()},[x,b,d,F]);A.useEffect(()=>{if(!c)return;function H(U){if(U.key==="Tab"){F().length===0&&!I&&tn(U);const K=W(),Q=$d(U);d.current[0]==="reference"&&Q===x&&(tn(U),U.shiftKey?Oo(K[K.length-1]):Oo(K[1])),d.current[1]==="floating"&&Q===b&&U.shiftKey&&(tn(U),Oo(K[0]))}}const B=jr(b);return B.addEventListener("keydown",H),()=>{B.removeEventListener("keydown",H)}},[x,b,c,d,v,I,F,W]),A.useEffect(()=>{if(!g)return;function H(){N.current=!0,setTimeout(()=>{N.current=!1})}function B(U){const K=U.relatedTarget,Q=!(kr(x,K)||kr(b,K)||kr(K,b)||kr(u==null?void 0:u.portalNode,K)||K!=null&&K.hasAttribute("data-floating-ui-focus-guard")||l&&(Gl(l.nodesRef.current,_).find(ne=>{var ue,le;return kr((ue=ne.context)==null?void 0:ue.elements.floating,K)||kr((le=ne.context)==null?void 0:le.elements.domReference,K)})||WF(l.nodesRef.current,_).find(ne=>{var ue,le;return((ue=ne.context)==null?void 0:ue.elements.floating)===K||((le=ne.context)==null?void 0:le.elements.domReference)===K})));K&&Q&&!N.current&&K!==P.current&&(k.current=!0,setTimeout(()=>O(!1)))}if(b&&Pa(x))return x.addEventListener("focusout",B),x.addEventListener("pointerdown",H),!c&&b.addEventListener("focusout",B),()=>{x.removeEventListener("focusout",B),x.removeEventListener("pointerdown",H),!c&&b.removeEventListener("focusout",B)}},[x,b,c,_,l,u,O,g]),A.useEffect(()=>{var H;const B=Array.from((u==null||(H=u.portalNode)==null?void 0:H.querySelectorAll("[data-floating-ui-portal]"))||[]);function U(){return[w.current,E.current].filter(Boolean)}if(b&&c){const K=[b,...B,...U()],Q=d4(d.current.includes("reference")||I?K.concat(x||[]):K);return()=>{Q()}}},[x,b,c,d,u,I]),A.useEffect(()=>{if(c&&!o&&b){const H=[],B=nd(),U=Qc(jr(b).body,B),K=W(),Q=U.filter(ne=>!K.includes(ne));return Q.forEach((ne,ue)=>{H[ue]=ne.getAttribute("tabindex"),ne.setAttribute("tabindex","-1")}),()=>{Q.forEach((ne,ue)=>{const le=H[ue];le==null?ne.removeAttribute("tabindex"):ne.setAttribute("tabindex",le)})}}},[b,c,o,W]),Dt(()=>{if(!b)return;const H=jr(b);let B=i,U=!1;const K=ka(H),Q=T.current;P.current=K;const ne=W(b),ue=(typeof a=="number"?ne[a]:a.current)||b;!m&&Oo(ue,{preventScroll:ue===b});function le(re){if(re.type==="escapeKey"&&v.domReference.current&&(P.current=v.domReference.current),["referencePress","escapeKey"].includes(re.type))return;const be=re.data.returnFocus;typeof be=="object"?(B=!0,U=be.preventScroll):B=be}return C.on("dismiss",le),()=>{if(C.off("dismiss",le),kr(b,ka(H))&&v.domReference.current&&(P.current=v.domReference.current),B&&Pa(P.current)&&!k.current)if(!v.domReference.current||N.current)Oo(P.current,{cancelPrevious:!1,preventScroll:U});else{var re;Q.__syncReturnFocus=!0,(re=P.current)==null||re.focus({preventScroll:U}),setTimeout(()=>{delete Q.__syncReturnFocus})}}},[b,W,a,i,T,v,C,m]),Dt(()=>{if(u)return u.setFocusManagerState({...t,modal:c,closeOnFocusOut:g}),()=>{u.setFocusManagerState(null)}},[u,c,g,t]),Dt(()=>{if(m||!b)return;function H(){h(F().length)}if(H(),typeof MutationObserver=="function"){const B=new MutationObserver(H);return B.observe(b,{childList:!0,subtree:!0}),()=>{B.disconnect()}}},[b,F,m,v]);const G=o&&(j||c)&&!I;function X(H){return p&&c?A.createElement(XF,{ref:H==="start"?w:E,onClick:()=>O(!1)},typeof p=="string"?p:"Dismiss"):null}return A.createElement(A.Fragment,null,G&&A.createElement(od,{"data-type":"inside",ref:u==null?void 0:u.beforeInsideRef,onFocus:H=>{if(c){const U=W();Oo(n[0]==="reference"?U[0]:U[U.length-1])}else if(u!=null&&u.preserveTabOrder&&u.portalNode)if(k.current=!1,Kl(H,u.portalNode)){const U=MS()||x;U==null||U.focus()}else{var B;(B=u.beforeOutsideRef.current)==null||B.focus()}}}),I?null:X("start"),A.cloneElement(r,s===0||n.includes("floating")?{tabIndex:0}:{}),X("end"),G&&A.createElement(od,{"data-type":"inside",ref:u==null?void 0:u.afterInsideRef,onFocus:H=>{if(c)Oo(W()[0]);else if(u!=null&&u.preserveTabOrder&&u.portalNode)if(k.current=!0,Kl(H,u.portalNode)){const U=IS()||x;U==null||U.focus()}else{var B;(B=u.afterOutsideRef.current)==null||B.focus()}}}))}const ku="data-floating-ui-scroll-lock",JF=A.forwardRef(function(t,r){let{lockScroll:n=!1,...o}=t;return Dt(()=>{var a,i;if(!n||document.body.hasAttribute(ku))return;document.body.setAttribute(ku,"");const g=Math.round(document.documentElement.getBoundingClientRect().left)+document.documentElement.scrollLeft?"paddingLeft":"paddingRight",v=window.innerWidth-document.documentElement.clientWidth;if(!/iP(hone|ad|od)|iOS/.test(gb()))return Object.assign(document.body.style,{overflow:"hidden",[g]:v+"px"}),()=>{document.body.removeAttribute(ku),Object.assign(document.body.style,{overflow:"",[g]:""})};const _=((a=window.visualViewport)==null?void 0:a.offsetLeft)||0,O=((i=window.visualViewport)==null?void 0:i.offsetTop)||0,C=window.pageXOffset,T=window.pageYOffset;return Object.assign(document.body.style,{position:"fixed",overflow:"hidden",top:-(T-Math.floor(O))+"px",left:-(C-Math.floor(_))+"px",right:"0",[g]:v+"px"}),()=>{Object.assign(document.body.style,{position:"",overflow:"",top:"",left:"",right:"",[g]:""}),document.body.removeAttribute(ku),window.scrollTo(C,T)}},[n]),A.createElement("div",xs({ref:r},o,{style:{position:"fixed",overflow:"auto",top:0,right:0,bottom:0,left:0,...o.style}}))});function Bw(e){return Pa(e.target)&&e.target.tagName==="BUTTON"}function Ww(e){return jS(e)}const ZF=function(e,t){let{open:r,onOpenChange:n,dataRef:o,elements:{domReference:a}}=e,{enabled:i=!0,event:c="click",toggle:p=!0,ignoreMouse:g=!1,keyboardHandlers:v=!0}=t===void 0?{}:t;const _=A.useRef();return A.useMemo(()=>i?{reference:{onPointerDown(O){_.current=O.pointerType},onMouseDown(O){O.button===0&&(rd(_.current,!0)&&g||c!=="click"&&(r?p&&(!o.current.openEvent||o.current.openEvent.type==="mousedown")&&n(!1):(O.preventDefault(),n(!0)),o.current.openEvent=O.nativeEvent))},onClick(O){if(!o.current.__syncReturnFocus){if(c==="mousedown"&&_.current){_.current=void 0;return}rd(_.current,!0)&&g||(r?p&&(!o.current.openEvent||o.current.openEvent.type==="click")&&n(!1):n(!0),o.current.openEvent=O.nativeEvent)}},onKeyDown(O){_.current=void 0,v&&(Bw(O)||(O.key===" "&&!Ww(a)&&O.preventDefault(),O.key==="Enter"&&(r?p&&n(!1):n(!0))))},onKeyUp(O){v&&(Bw(O)||Ww(a)||O.key===" "&&(r?p&&n(!1):n(!0)))}}}:{},[i,o,c,g,v,a,p,r,n])};function nc(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);const r=e;return r.target!=null&&t.contains(r.target)}const e3={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},t3={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},r3=function(e){var t,r;return e===void 0&&(e=!0),{escapeKeyBubbles:typeof e=="boolean"?e:(t=e.escapeKey)!=null?t:!0,outsidePressBubbles:typeof e=="boolean"?e:(r=e.outsidePress)!=null?r:!0}},n3=function(e,t){let{open:r,onOpenChange:n,events:o,nodeId:a,elements:{reference:i,domReference:c,floating:p},dataRef:g}=e,{enabled:v=!0,escapeKey:_=!0,outsidePress:O=!0,outsidePressEvent:C="pointerdown",referencePress:T=!1,referencePressEvent:x="pointerdown",ancestorScroll:b=!1,bubbles:d=!0}=t===void 0?{}:t;const l=Fa(),u=Ki()!=null,s=Yi(typeof O=="function"?O:()=>!1),h=typeof O=="function"?s:O,m=A.useRef(!1),{escapeKeyBubbles:w,outsidePressBubbles:E}=r3(d);return A.useEffect(()=>{if(!r||!v)return;g.current.__escapeKeyBubbles=w,g.current.__outsidePressBubbles=E;function k(F){if(F.key==="Escape"){const W=l?Gl(l.nodesRef.current,a):[];if(W.length>0){let G=!0;if(W.forEach(X=>{var H;if((H=X.context)!=null&&H.open&&!X.context.dataRef.current.__escapeKeyBubbles){G=!1;return}}),!G)return}o.emit("dismiss",{type:"escapeKey",data:{returnFocus:{preventScroll:!1}}}),n(!1)}}function P(F){const W=m.current;if(m.current=!1,W||typeof h=="function"&&!h(F))return;const G=$d(F);if(Pa(G)&&p){const B=p.ownerDocument.defaultView||window,U=G.scrollWidth>G.clientWidth,K=G.scrollHeight>G.clientHeight;let Q=K&&F.offsetX>G.clientWidth;if(K&&B.getComputedStyle(G).direction==="rtl"&&(Q=F.offsetX<=G.offsetWidth-G.clientWidth),Q||U&&F.offsetY>G.clientHeight)return}const X=l&&Gl(l.nodesRef.current,a).some(B=>{var U;return nc(F,(U=B.context)==null?void 0:U.elements.floating)});if(nc(F,p)||nc(F,c)||X)return;const H=l?Gl(l.nodesRef.current,a):[];if(H.length>0){let B=!0;if(H.forEach(U=>{var K;if((K=U.context)!=null&&K.open&&!U.context.dataRef.current.__outsidePressBubbles){B=!1;return}}),!B)return}o.emit("dismiss",{type:"outsidePress",data:{returnFocus:u?{preventScroll:!0}:PS(F)||kS(F)}}),n(!1)}function N(){n(!1)}const j=jr(p);_&&j.addEventListener("keydown",k),h&&j.addEventListener(C,P);let I=[];return b&&(ln(c)&&(I=eo(c)),ln(p)&&(I=I.concat(eo(p))),!ln(i)&&i&&i.contextElement&&(I=I.concat(eo(i.contextElement)))),I=I.filter(F=>{var W;return F!==((W=j.defaultView)==null?void 0:W.visualViewport)}),I.forEach(F=>{F.addEventListener("scroll",N,{passive:!0})}),()=>{_&&j.removeEventListener("keydown",k),h&&j.removeEventListener(C,P),I.forEach(F=>{F.removeEventListener("scroll",N)})}},[g,p,c,i,_,h,C,o,l,a,r,n,b,v,w,E,u]),A.useEffect(()=>{m.current=!1},[h,C]),A.useMemo(()=>v?{reference:{[e3[x]]:()=>{T&&(o.emit("dismiss",{type:"referencePress",data:{returnFocus:!1}}),n(!1))}},floating:{[t3[C]]:()=>{m.current=!0}}}:{},[v,o,T,C,x,n])},o3=function(e,t){let{open:r,onOpenChange:n,dataRef:o,events:a,refs:i,elements:{floating:c,domReference:p}}=e,{enabled:g=!0,keyboardOnly:v=!0}=t===void 0?{}:t;const _=A.useRef(""),O=A.useRef(!1),C=A.useRef();return A.useEffect(()=>{if(!g)return;const x=jr(c).defaultView||window;function b(){!r&&Pa(p)&&p===ka(jr(p))&&(O.current=!0)}return x.addEventListener("blur",b),()=>{x.removeEventListener("blur",b)}},[c,p,r,g]),A.useEffect(()=>{if(!g)return;function T(x){(x.type==="referencePress"||x.type==="escapeKey")&&(O.current=!0)}return a.on("dismiss",T),()=>{a.off("dismiss",T)}},[a,g]),A.useEffect(()=>()=>{clearTimeout(C.current)},[]),A.useMemo(()=>g?{reference:{onPointerDown(T){let{pointerType:x}=T;_.current=x,O.current=!!(x&&v)},onMouseLeave(){O.current=!1},onFocus(T){var x;O.current||T.type==="focus"&&((x=o.current.openEvent)==null?void 0:x.type)==="mousedown"&&o.current.openEvent&&nc(o.current.openEvent,p)||(o.current.openEvent=T.nativeEvent,n(!0))},onBlur(T){O.current=!1;const x=T.relatedTarget,b=ln(x)&&x.hasAttribute("data-floating-ui-focus-guard")&&x.getAttribute("data-type")==="outside";C.current=setTimeout(()=>{kr(i.floating.current,x)||kr(p,x)||b||n(!1)})}}}:{},[g,v,p,i,o,n])};let Uw=!1;const yb="ArrowUp",qd="ArrowDown",Fi="ArrowLeft",Fs="ArrowRight";function Eu(e,t,r){return Math.floor(e/t)!==r}function Tl(e,t){return t<0||t>=e.current.length}function gr(e,t){let{startingIndex:r=-1,decrement:n=!1,disabledIndices:o,amount:a=1}=t===void 0?{}:t;const i=e.current;let c=r;do{var p,g;c=c+(n?-a:a)}while(c>=0&&c<=i.length-1&&(o?o.includes(c):i[c]==null||(p=i[c])!=null&&p.hasAttribute("disabled")||((g=i[c])==null?void 0:g.getAttribute("aria-disabled"))==="true"));return c}function Gd(e,t,r){switch(e){case"vertical":return t;case"horizontal":return r;default:return t||r}}function Hw(e,t){return Gd(t,e===yb||e===qd,e===Fi||e===Fs)}function Pp(e,t,r){return Gd(t,e===qd,r?e===Fi:e===Fs)||e==="Enter"||e==" "||e===""}function a3(e,t,r){return Gd(t,r?e===Fi:e===Fs,e===qd)}function i3(e,t,r){return Gd(t,r?e===Fs:e===Fi,e===yb)}function kp(e,t){return gr(e,{disabledIndices:t})}function $w(e,t){return gr(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}const l3=function(e,t){let{open:r,onOpenChange:n,refs:o,elements:{domReference:a}}=e,{listRef:i,activeIndex:c,onNavigate:p=()=>{},enabled:g=!0,selectedIndex:v=null,allowEscape:_=!1,loop:O=!1,nested:C=!1,rtl:T=!1,virtual:x=!1,focusItemOnOpen:b="auto",focusItemOnHover:d=!0,openOnArrowKeyDown:l=!0,disabledIndices:u=void 0,orientation:s="vertical",cols:h=1,scrollItemIntoView:m=!0}=t===void 0?{listRef:{current:[]},activeIndex:null,onNavigate:()=>{}}:t;const w=Ki(),E=Fa(),k=Yi(p),P=A.useRef(b),N=A.useRef(v??-1),j=A.useRef(null),I=A.useRef(!0),F=A.useRef(k),W=A.useRef(r),G=A.useRef(!1),X=A.useRef(!1),H=sn(u),B=sn(r),U=sn(m),[K,Q]=A.useState(),ne=A.useCallback(function(re,be,fe){fe===void 0&&(fe=!1);const ie=re.current[be.current];x?Q(ie==null?void 0:ie.id):Oo(ie,{preventScroll:!0,sync:ES()&&lh()?Uw||G.current:!1}),requestAnimationFrame(()=>{const pe=U.current;pe&&ie&&(fe||!I.current)&&(ie.scrollIntoView==null||ie.scrollIntoView(typeof pe=="boolean"?{block:"nearest",inline:"nearest"}:pe))})},[x,U]);Dt(()=>{document.createElement("div").focus({get preventScroll(){return Uw=!0,!1}})},[]),Dt(()=>{g&&(r?P.current&&v!=null&&(X.current=!0,k(v)):W.current&&(N.current=-1,F.current(null)))},[g,r,v,k]),Dt(()=>{if(g&&r)if(c==null){if(G.current=!1,v!=null)return;W.current&&(N.current=-1,ne(i,N)),!W.current&&P.current&&(j.current!=null||P.current===!0&&j.current==null)&&(N.current=j.current==null||Pp(j.current,s,T)||C?kp(i,H.current):$w(i,H.current),k(N.current))}else Tl(i,c)||(N.current=c,ne(i,N,X.current),X.current=!1)},[g,r,c,v,C,i,s,T,k,ne,H]),Dt(()=>{if(g&&W.current&&!r){var re,be;const fe=E==null||(re=E.nodesRef.current.find(ie=>ie.id===w))==null||(be=re.context)==null?void 0:be.elements.floating;fe&&!kr(fe,ka(jr(fe)))&&fe.focus({preventScroll:!0})}},[g,r,E,w]),Dt(()=>{j.current=null,F.current=k,W.current=r});const ue=c!=null,le=A.useMemo(()=>{function re(fe){if(!r)return;const ie=i.current.indexOf(fe);ie!==-1&&k(ie)}return{onFocus(fe){let{currentTarget:ie}=fe;re(ie)},onClick:fe=>{let{currentTarget:ie}=fe;return ie.focus({preventScroll:!0})},...d&&{onMouseMove(fe){let{currentTarget:ie}=fe;re(ie)},onPointerLeave(){if(I.current&&(N.current=-1,ne(i,N),ao.flushSync(()=>k(null)),!x)){var fe;(fe=o.floating.current)==null||fe.focus({preventScroll:!0})}}}}},[r,o,ne,d,i,k,x]);return A.useMemo(()=>{if(!g)return{};const re=H.current;function be(ce){if(I.current=!1,G.current=!0,!B.current&&ce.currentTarget===o.floating.current)return;if(C&&i3(ce.key,s,T)){tn(ce),n(!1),Pa(a)&&a.focus();return}const Oe=N.current,Se=kp(i,re),Ce=$w(i,re);if(ce.key==="Home"&&(N.current=Se,k(N.current)),ce.key==="End"&&(N.current=Ce,k(N.current)),h>1){const _e=N.current;if(ce.key===yb){if(tn(ce),_e===-1)N.current=Ce;else if(N.current=gr(i,{startingIndex:_e,amount:h,decrement:!0,disabledIndices:re}),O&&(_e-hje?nt:nt-h}Tl(i,N.current)&&(N.current=_e),k(N.current)}if(ce.key===qd&&(tn(ce),_e===-1?N.current=Se:(N.current=gr(i,{startingIndex:_e,amount:h,disabledIndices:re}),O&&_e+h>Ce&&(N.current=gr(i,{startingIndex:_e%h-h,amount:h,disabledIndices:re}))),Tl(i,N.current)&&(N.current=_e),k(N.current)),s==="both"){const je=Math.floor(_e/h);ce.key===Fs&&(tn(ce),_e%h!==h-1?(N.current=gr(i,{startingIndex:_e,disabledIndices:re}),O&&Eu(N.current,h,je)&&(N.current=gr(i,{startingIndex:_e-_e%h-1,disabledIndices:re}))):O&&(N.current=gr(i,{startingIndex:_e-_e%h-1,disabledIndices:re})),Eu(N.current,h,je)&&(N.current=_e)),ce.key===Fi&&(tn(ce),_e%h!==0?(N.current=gr(i,{startingIndex:_e,disabledIndices:re,decrement:!0}),O&&Eu(N.current,h,je)&&(N.current=gr(i,{startingIndex:_e+(h-_e%h),decrement:!0,disabledIndices:re}))):O&&(N.current=gr(i,{startingIndex:_e+(h-_e%h),decrement:!0,disabledIndices:re})),Eu(N.current,h,je)&&(N.current=_e));const Ge=Math.floor(Ce/h)===je;Tl(i,N.current)&&(O&&Ge?N.current=ce.key===Fi?Ce:gr(i,{startingIndex:_e-_e%h-1,disabledIndices:re}):N.current=_e),k(N.current);return}}if(Hw(ce.key,s)){if(tn(ce),r&&!x&&ka(ce.currentTarget.ownerDocument)===ce.currentTarget){N.current=Pp(ce.key,s,T)?Se:Ce,k(N.current);return}Pp(ce.key,s,T)?O?N.current=Oe>=Ce?_&&Oe!==i.current.length?-1:Se:gr(i,{startingIndex:Oe,disabledIndices:re}):N.current=Math.min(Ce,gr(i,{startingIndex:Oe,disabledIndices:re})):O?N.current=Oe<=Se?_&&Oe!==-1?i.current.length:Ce:gr(i,{startingIndex:Oe,decrement:!0,disabledIndices:re}):N.current=Math.max(Se,gr(i,{startingIndex:Oe,decrement:!0,disabledIndices:re})),Tl(i,N.current)?k(null):k(N.current)}}function fe(ce){b==="auto"&&PS(ce.nativeEvent)&&(P.current=!0)}function ie(ce){P.current=b,b==="auto"&&kS(ce.nativeEvent)&&(P.current=!0)}const pe=x&&r&&ue&&{"aria-activedescendant":K};return{reference:{...pe,onKeyDown(ce){I.current=!1;const Oe=ce.key.indexOf("Arrow")===0;if(x&&r)return be(ce);if(!r&&!l&&Oe)return;if((Oe||ce.key==="Enter"||ce.key===" "||ce.key==="")&&(j.current=ce.key),C){a3(ce.key,s,T)&&(tn(ce),r?(N.current=kp(i,re),k(N.current)):n(!0));return}Hw(ce.key,s)&&(v!=null&&(N.current=v),tn(ce),!r&&l?n(!0):be(ce),r&&k(N.current))},onFocus(){r&&k(null)},onPointerDown:ie,onMouseDown:fe,onClick:fe},floating:{"aria-orientation":s==="both"?void 0:s,...pe,onKeyDown:be,onPointerMove(){I.current=!0}},item:le}},[a,o,K,H,B,i,g,s,T,x,r,ue,C,v,l,_,h,O,b,k,n,le])};function s3(e){return A.useMemo(()=>e.every(t=>t==null)?null:t=>{e.forEach(r=>{typeof r=="function"?r(t):r!=null&&(r.current=t)})},e)}const u3=function(e,t){let{open:r}=e,{enabled:n=!0,role:o="dialog"}=t===void 0?{}:t;const a=ws(),i=ws();return A.useMemo(()=>{const c={id:a,role:o};return n?o==="tooltip"?{reference:{"aria-describedby":r?a:void 0},floating:c}:{reference:{"aria-expanded":r?"true":"false","aria-haspopup":o==="alertdialog"?"dialog":o,"aria-controls":r?a:void 0,...o==="listbox"&&{role:"combobox"},...o==="menu"&&{id:i}},floating:{...c,...o==="menu"&&{"aria-labelledby":i}}}:{}},[n,o,r,a,i])},qw=e=>e.replace(/[A-Z]+(?![a-z])|[A-Z]/g,(t,r)=>(r?"-":"")+t.toLowerCase());function c3(e,t){const[r,n]=A.useState(e);return e&&!r&&n(!0),A.useEffect(()=>{if(!e){const o=setTimeout(()=>n(!1),t);return()=>clearTimeout(o)}},[e,t]),r}function VS(e,t){let{open:r,elements:{floating:n}}=e,{duration:o=250}=t===void 0?{}:t;const i=(typeof o=="number"?o:o.close)||0,[c,p]=A.useState(!1),[g,v]=A.useState("unmounted"),_=c3(r,i);return Dt(()=>{c&&!_&&v("unmounted")},[c,_]),Dt(()=>{if(n)if(r){v("initial");const O=requestAnimationFrame(()=>{v("open")});return()=>{cancelAnimationFrame(O)}}else p(!0),v("close")},[r,n]),{isMounted:_,status:g}}function d3(e,t){let{initial:r={opacity:0},open:n,close:o,common:a,duration:i=250}=t===void 0?{}:t;const c=e.placement,p=c.split("-")[0],[g,v]=A.useState({}),{isMounted:_,status:O}=VS(e,{duration:i}),C=sn(r),T=sn(n),x=sn(o),b=sn(a),d=typeof i=="number",l=(d?i:i.open)||0,u=(d?i:i.close)||0;return Dt(()=>{const s={side:p,placement:c},h=C.current,m=x.current,w=T.current,E=b.current,k=typeof h=="function"?h(s):h,P=typeof m=="function"?m(s):m,N=typeof E=="function"?E(s):E,j=(typeof w=="function"?w(s):w)||Object.keys(k).reduce((I,F)=>(I[F]="",I),{});if(O==="initial"&&v(I=>({transitionProperty:I.transitionProperty,...N,...k})),O==="open"&&v({transitionProperty:Object.keys(j).map(qw).join(","),transitionDuration:l+"ms",...N,...j}),O==="close"){const I=P||k;v({transitionProperty:Object.keys(I).map(qw).join(","),transitionDuration:u+"ms",...N,...I})}},[p,c,u,x,C,T,b,l,O]),{isMounted:_,styles:g}}const f3=function(e,t){var r;let{open:n,dataRef:o}=e,{listRef:a,activeIndex:i,onMatch:c=()=>{},enabled:p=!0,findMatch:g=null,resetMs:v=1e3,ignoreKeys:_=[],selectedIndex:O=null}=t===void 0?{listRef:{current:[]},activeIndex:null}:t;const C=A.useRef(),T=A.useRef(""),x=A.useRef((r=O??i)!=null?r:-1),b=A.useRef(null),d=Yi(c),l=sn(g),u=sn(_);return Dt(()=>{n&&(clearTimeout(C.current),b.current=null,T.current="")},[n]),Dt(()=>{if(n&&T.current===""){var s;x.current=(s=O??i)!=null?s:-1}},[n,O,i]),A.useMemo(()=>{if(!p)return{};function s(h){const m=$d(h.nativeEvent);if(ln(m)&&(ka(jr(m))!==h.currentTarget&&m.closest('[role="dialog"],[role="menu"],[role="listbox"],[role="tree"],[role="grid"]')!==h.currentTarget))return;T.current.length>0&&T.current[0]!==" "&&(o.current.typing=!0,h.key===" "&&tn(h));const w=a.current;if(w==null||u.current.includes(h.key)||h.key.length!==1||h.ctrlKey||h.metaKey||h.altKey)return;w.every(I=>{var F,W;return I?((F=I[0])==null?void 0:F.toLocaleLowerCase())!==((W=I[1])==null?void 0:W.toLocaleLowerCase()):!0})&&T.current===h.key&&(T.current="",x.current=b.current),T.current+=h.key,clearTimeout(C.current),C.current=setTimeout(()=>{T.current="",x.current=b.current,o.current.typing=!1},v);const k=x.current,P=[...w.slice((k||0)+1),...w.slice(0,(k||0)+1)],N=l.current?l.current(P,T.current):P.find(I=>(I==null?void 0:I.toLocaleLowerCase().indexOf(T.current.toLocaleLowerCase()))===0),j=N?w.indexOf(N):-1;j!==-1&&(d(j),b.current=j)}return{reference:{onKeyDown:s},floating:{onKeyDown:s}}},[p,o,a,v,u,l,d])};function Gw(e,t){return{...e,rects:{...e.rects,floating:{...e.rects.floating,height:t}}}}const p3=e=>({name:"inner",options:e,async fn(t){const{listRef:r,overflowRef:n,onFallbackChange:o,offset:a=0,index:i=0,minItemsVisible:c=4,referenceOverflowThreshold:p=0,scrollRef:g,...v}=e,{rects:_,elements:{floating:O}}=t,C=r.current[i];if(!C)return{};const T={...t,...await xS(-C.offsetTop-_.reference.height/2-C.offsetHeight/2-a).fn(t)},x=(g==null?void 0:g.current)||O,b=await ec(Gw(T,x.scrollHeight),v),d=await ec(T,{...v,elementContext:"reference"}),l=Math.max(0,b.top),u=T.y+l,s=Math.max(0,x.scrollHeight-l-Math.max(0,b.bottom));return x.style.maxHeight=s+"px",x.scrollTop=l,o&&(x.offsetHeight=-p||d.bottom>=-p?ao.flushSync(()=>o(!0)):ao.flushSync(()=>o(!1))),n&&(n.current=await ec(Gw({...T,y:u},x.offsetHeight),v)),{y:u}}}),h3=(e,t)=>{let{open:r,elements:n}=e,{enabled:o=!0,overflowRef:a,scrollRef:i,onChange:c}=t;const p=Yi(c),g=A.useRef(!1),v=A.useRef(null),_=A.useRef(null);return A.useEffect(()=>{if(!o)return;function O(T){if(T.ctrlKey||!C||a.current==null)return;const x=T.deltaY,b=a.current.top>=-.5,d=a.current.bottom>=-.5,l=C.scrollHeight-C.clientHeight,u=x<0?-1:1,s=x<0?"max":"min";C.scrollHeight<=C.clientHeight||(!b&&x>0||!d&&x<0?(T.preventDefault(),ao.flushSync(()=>{p(h=>h+Math[s](x,l*u))})):/firefox/i.test(SS())&&(C.scrollTop+=x))}const C=(i==null?void 0:i.current)||n.floating;if(r&&C)return C.addEventListener("wheel",O),requestAnimationFrame(()=>{v.current=C.scrollTop,a.current!=null&&(_.current={...a.current})}),()=>{v.current=null,_.current=null,C.removeEventListener("wheel",O)}},[o,r,n.floating,a,i,p]),A.useMemo(()=>o?{floating:{onKeyDown(){g.current=!0},onWheel(){g.current=!1},onPointerMove(){g.current=!1},onScroll(){const O=(i==null?void 0:i.current)||n.floating;if(!(!a.current||!O||!g.current)){if(v.current!==null){const C=O.scrollTop-v.current;(a.current.bottom<-.5&&C<-1||a.current.top<-.5&&C>1)&&ao.flushSync(()=>p(T=>T+C))}requestAnimationFrame(()=>{v.current=O.scrollTop})}}}}:{},[o,a,n.floating,i,p])};function g3(e,t){const[r,n]=e;let o=!1;const a=t.length;for(let i=0,c=a-1;i=n!=_>=n&&r<=(v-p)*(n-g)/(_-g)+p&&(o=!o)}return o}function b3(e,t){return e[0]>=t.x&&e[0]<=t.x+t.width&&e[1]>=t.y&&e[1]<=t.y+t.height}function v3(e){let{restMs:t=0,buffer:r=.5,blockPointerEvents:n=!1}=e===void 0?{}:e,o,a=!1,i=!1;const c=p=>{let{x:g,y:v,placement:_,elements:O,onClose:C,nodeId:T,tree:x}=p;return function(d){function l(){clearTimeout(o),C()}if(clearTimeout(o),!O.domReference||!O.floating||_==null||g==null||v==null)return;const{clientX:u,clientY:s}=d,h=[u,s],m=$d(d),w=d.type==="mouseleave",E=kr(O.floating,m),k=kr(O.domReference,m),P=O.domReference.getBoundingClientRect(),N=O.floating.getBoundingClientRect(),j=_.split("-")[0],I=g>N.right-N.width/2,F=v>N.bottom-N.height/2,W=b3(h,P);if(E&&(i=!0),k&&(i=!1),k&&!w){i=!0;return}if(w&&ln(d.relatedTarget)&&kr(O.floating,d.relatedTarget)||x&&Gl(x.nodesRef.current,T).some(B=>{let{context:U}=B;return U==null?void 0:U.open}))return;if(j==="top"&&v>=P.bottom-1||j==="bottom"&&v<=P.top+1||j==="left"&&g>=P.right-1||j==="right"&&g<=P.left+1)return l();let G=[];switch(j){case"top":G=[[N.left,P.top+1],[N.left,N.bottom-1],[N.right,N.bottom-1],[N.right,P.top+1]],a=u>=N.left&&u<=N.right&&s>=N.top&&s<=P.top+1;break;case"bottom":G=[[N.left,N.top+1],[N.left,P.bottom-1],[N.right,P.bottom-1],[N.right,N.top+1]],a=u>=N.left&&u<=N.right&&s>=P.bottom-1&&s<=N.bottom;break;case"left":G=[[N.right-1,N.bottom],[N.right-1,N.top],[P.left+1,N.top],[P.left+1,N.bottom]],a=u>=N.left&&u<=P.left+1&&s>=N.top&&s<=N.bottom;break;case"right":G=[[P.right-1,N.bottom],[P.right-1,N.top],[N.left+1,N.top],[N.left+1,N.bottom]],a=u>=P.right-1&&u<=N.right&&s>=N.top&&s<=N.bottom;break}function X(B){let[U,K]=B;const Q=N.width>P.width,ne=N.height>P.height;switch(j){case"top":{const ue=[Q?U+r/2:I?U+r*4:U-r*4,K+r+1],le=[Q?U-r/2:I?U+r*4:U-r*4,K+r+1],re=[[N.left,I||Q?N.bottom-r:N.top],[N.right,I?Q?N.bottom-r:N.top:N.bottom-r]];return[ue,le,...re]}case"bottom":{const ue=[Q?U+r/2:I?U+r*4:U-r*4,K-r],le=[Q?U-r/2:I?U+r*4:U-r*4,K-r],re=[[N.left,I||Q?N.top+r:N.bottom],[N.right,I?Q?N.top+r:N.bottom:N.top+r]];return[ue,le,...re]}case"left":{const ue=[U+r+1,ne?K+r/2:F?K+r*4:K-r*4],le=[U+r+1,ne?K-r/2:F?K+r*4:K-r*4];return[...[[F||ne?N.right-r:N.left,N.top],[F?ne?N.right-r:N.left:N.right-r,N.bottom]],ue,le]}case"right":{const ue=[U-r,ne?K+r/2:F?K+r*4:K-r*4],le=[U-r,ne?K-r/2:F?K+r*4:K-r*4],re=[[F||ne?N.left+r:N.right,N.top],[F?ne?N.left+r:N.right:N.left+r,N.bottom]];return[ue,le,...re]}}}const H=a?G:X([g,v]);if(!a){if(i&&!W)return l();g3([u,s],H)?t&&!i&&(o=setTimeout(l,t)):l()}}};return c.__options={blockPointerEvents:n},c}function m3(e){e===void 0&&(e={});const{open:t=!1,onOpenChange:r,nodeId:n}=e,o=NF(e),a=Fa(),i=A.useRef(null),c=A.useRef({}),p=A.useState(()=>TS())[0],[g,v]=A.useState(null),_=A.useCallback(d=>{const l=ln(d)?{getBoundingClientRect:()=>d.getBoundingClientRect(),contextElement:d}:d;o.refs.setReference(l)},[o.refs]),O=A.useCallback(d=>{(ln(d)||d===null)&&(i.current=d,v(d)),(ln(o.refs.reference.current)||o.refs.reference.current===null||d!==null&&!ln(d))&&o.refs.setReference(d)},[o.refs]),C=A.useMemo(()=>({...o.refs,setReference:O,setPositionReference:_,domReference:i}),[o.refs,O,_]),T=A.useMemo(()=>({...o.elements,domReference:g}),[o.elements,g]),x=Yi(r),b=A.useMemo(()=>({...o,refs:C,elements:T,dataRef:c,nodeId:n,events:p,open:t,onOpenChange:x}),[o,n,p,t,x,C,T]);return Dt(()=>{const d=a==null?void 0:a.nodesRef.current.find(l=>l.id===n);d&&(d.context=b)}),A.useMemo(()=>({...o,context:b,refs:C,reference:O,positionReference:_}),[o,C,b,O,_])}function Ep(e,t,r){const n=new Map;return{...r==="floating"&&{tabIndex:-1},...e,...t.map(o=>o?o[r]:null).concat(e).reduce((o,a)=>(a&&Object.entries(a).forEach(i=>{let[c,p]=i;if(c.indexOf("on")===0){if(n.has(c)||n.set(c,[]),typeof p=="function"){var g;(g=n.get(c))==null||g.push(p),o[c]=function(){for(var v,_=arguments.length,O=new Array(_),C=0;C<_;C++)O[C]=arguments[C];(v=n.get(c))==null||v.forEach(T=>T(...O))}}}else o[c]=p}),o),{})}}const y3=function(e){e===void 0&&(e=[]);const t=e,r=A.useCallback(a=>Ep(a,e,"reference"),t),n=A.useCallback(a=>Ep(a,e,"floating"),t),o=A.useCallback(a=>Ep(a,e,"item"),e.map(a=>a==null?void 0:a.item));return A.useMemo(()=>({getReferenceProps:r,getFloatingProps:n,getItemProps:o}),[r,n,o])},w3=Object.freeze(Object.defineProperty({__proto__:null,FloatingDelayGroup:zF,FloatingFocusManager:QF,FloatingNode:DF,FloatingOverlay:JF,FloatingPortal:YF,FloatingTree:LF,arrow:RF,autoPlacement:TF,autoUpdate:_F,computePosition:_S,detectOverflow:ec,flip:OF,getOverflowAncestors:eo,hide:PF,inline:kF,inner:p3,limitShift:EF,offset:xS,platform:yS,safePolygon:v3,shift:CF,size:SF,useClick:ZF,useDelayGroup:BF,useDelayGroupContext:NS,useDismiss:n3,useFloating:m3,useFloatingNodeId:IF,useFloatingParentNodeId:Ki,useFloatingPortalNode:LS,useFloatingTree:Fa,useFocus:o3,useHover:VF,useId:ws,useInnerOffset:h3,useInteractions:y3,useListNavigation:l3,useMergeRefs:s3,useRole:u3,useTransitionStatus:VS,useTransitionStyles:d3,useTypeahead:f3},Symbol.toStringTag,{value:"Module"})),Zt=Ts(w3);var zS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{DialogHeader:function(){return O},default:function(){return C}});var r=g(A),n=g(He),o=Le,a=g(Ie),i=Ne,c=Hi;function p(){return p=Object.assign||function(T){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(T,d)&&(b[d]=T[d])}return b}function _(T,x){if(T==null)return{};var b={},d=Object.keys(T),l,u;for(u=0;u=0)&&(b[l]=T[l]);return b}var O=r.default.forwardRef(function(T,x){var b=T.className,d=T.children,l=v(T,["className","children"]),u=(0,i.useTheme)().dialogHeader,s=u.defaultProps,h=u.styles.base;b=b??s.className;var m=(0,o.twMerge)((0,n.default)((0,a.default)(h)),b);return r.default.createElement("div",p({},l,{ref:x,className:m}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.DialogHeader";var C=O})(zS);var BS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,b){for(var d in b)Object.defineProperty(x,d,{enumerable:!0,get:b[d]})}t(e,{DialogBody:function(){return C},default:function(){return T}});var r=v(A),n=v(He),o=Le,a=v(Ie),i=Ne,c=Hi;function p(x,b,d){return b in x?Object.defineProperty(x,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[b]=d,x}function g(){return g=Object.assign||function(x){for(var b=1;b=0)&&Object.prototype.propertyIsEnumerable.call(x,l)&&(d[l]=x[l])}return d}function O(x,b){if(x==null)return{};var d={},l=Object.keys(x),u,s;for(s=0;s=0)&&(d[u]=x[u]);return d}var C=r.default.forwardRef(function(x,b){var d=x.divider,l=x.className,u=x.children,s=_(x,["divider","className","children"]),h=(0,i.useTheme)().dialogBody,m=h.defaultProps,w=h.styles.base;l=l??m.className;var E=(0,o.twMerge)((0,n.default)((0,a.default)(w.initial),p({},(0,a.default)(w.divider),d)),l);return r.default.createElement("div",g({},s,{ref:b,className:E}),u)});C.propTypes={divider:c.propTypesDivider,className:c.propTypesClassName,children:c.propTypesChildren},C.displayName="MaterialTailwind.DialogBody";var T=C})(BS);var WS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{DialogFooter:function(){return O},default:function(){return C}});var r=g(A),n=g(He),o=Le,a=g(Ie),i=Ne,c=Hi;function p(){return p=Object.assign||function(T){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(T,d)&&(b[d]=T[d])}return b}function _(T,x){if(T==null)return{};var b={},d=Object.keys(T),l,u;for(u=0;u=0)&&(b[l]=T[l]);return b}var O=r.default.forwardRef(function(T,x){var b=T.className,d=T.children,l=v(T,["className","children"]),u=(0,i.useTheme)().dialogFooter,s=u.defaultProps,h=u.styles.base;b=b??s.className;var m=(0,o.twMerge)((0,n.default)((0,a.default)(h)),b);return r.default.createElement("div",p({},l,{ref:x,className:m}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.DialogFooter";var C=O})(WS);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(P,N){for(var j in N)Object.defineProperty(P,j,{enumerable:!0,get:N[j]})}t(e,{Dialog:function(){return E},DialogHeader:function(){return C.DialogHeader},DialogBody:function(){return T.DialogBody},DialogFooter:function(){return x.DialogFooter},default:function(){return k}});var r=l(A),n=l(Fe),o=Zt,a=ir,i=l(He),c=l(dr),p=Le,g=l(Nt),v=l(Ie),_=Ne,O=Hi,C=zS,T=BS,x=WS;function b(P,N,j){return N in P?Object.defineProperty(P,N,{value:j,enumerable:!0,configurable:!0,writable:!0}):P[N]=j,P}function d(){return d=Object.assign||function(P){for(var N=1;N=0)&&Object.prototype.propertyIsEnumerable.call(P,I)&&(j[I]=P[I])}return j}function w(P,N){if(P==null)return{};var j={},I=Object.keys(P),F,W;for(W=0;W=0)&&(j[F]=P[F]);return j}var E=r.default.forwardRef(function(P,N){var j=P.open,I=P.handler,F=P.size,W=P.dismiss,G=P.animate,X=P.className,H=P.children,B=m(P,["open","handler","size","dismiss","animate","className","children"]),U=(0,_.useTheme)().dialog,K=U.defaultProps,Q=U.valid,ne=U.styles,ue=ne.base,le=ne.sizes;I=I??void 0,F=F??K.size,W=W??K.dismiss,G=G??K.animate,X=X??K.className;var re=(0,i.default)((0,v.default)(ue.backdrop)),be=(0,p.twMerge)((0,i.default)((0,v.default)(ue.container),(0,v.default)(le[(0,g.default)(Q.sizes,F,"md")])),X),fe={unmount:{opacity:0,y:-50,transition:{duration:.3}},mount:{opacity:1,y:0,transition:{duration:.3}}},ie={unmount:{opacity:0,transition:{delay:.2}},mount:{opacity:1}},pe=(0,c.default)(fe,G),ce=(0,o.useFloating)({open:j,onOpenChange:I}),Oe=ce.floating,Se=ce.context,Ce=(0,o.useId)(),_e="".concat(Ce,"-label"),je="".concat(Ce,"-description"),Ge=(0,o.useInteractions)([(0,o.useClick)(Se),(0,o.useRole)(Se),(0,o.useDismiss)(Se,W)]).getFloatingProps,nt=(0,o.useMergeRefs)([N,Oe]),ut=a.AnimatePresence;return r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(o.FloatingPortal,null,r.default.createElement(ut,null,j&&r.default.createElement(o.FloatingOverlay,{style:{zIndex:9999},lockScroll:!0},r.default.createElement(o.FloatingFocusManager,{context:Se},r.default.createElement(a.m.div,{className:F==="xxl"?"":re,initial:"unmount",exit:"unmount",animate:j?"mount":"unmount",variants:ie,transition:{duration:.2}},r.default.createElement(a.m.div,d({},Ge(h(u({},B),{ref:nt,className:be,"aria-labelledby":_e,"aria-describedby":je})),{initial:"unmount",exit:"unmount",animate:j?"mount":"unmount",variants:pe}),H)))))))});E.propTypes={open:O.propTypesOpen,handler:O.propTypesHandler,size:n.default.oneOf(O.propTypesSize),dismiss:O.propTypesDismiss,animate:O.propTypesAnimate,className:O.propTypesClassName,children:O.propTypesChildren},E.displayName="MaterialTailwind.Dialog";var k=Object.assign(E,{Header:C.DialogHeader,Body:T.DialogBody,Footer:x.DialogFooter})})(rS);var US={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{Input:function(){return T},default:function(){return x}});var r=_(A),n=_(Fe),o=_(He),a=_(Nt),i=_(Ie),c=Ne,p=Es;function g(b,d,l){return d in b?Object.defineProperty(b,d,{value:l,enumerable:!0,configurable:!0,writable:!0}):b[d]=l,b}function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.variant,u=b.color,s=b.size,h=b.label,m=b.error,w=b.success,E=b.icon,k=b.containerProps,P=b.labelProps,N=b.className,j=b.shrink,I=b.inputRef,F=O(b,["variant","color","size","label","error","success","icon","containerProps","labelProps","className","shrink","inputRef"]),W=(0,c.useTheme)().input,G=W.defaultProps,X=W.valid,H=W.styles,B=H.base,U=H.variants;l=l??G.variant,s=s??G.size,u=u??G.color,h=h??G.label,P=P??G.labelProps,k=k??G.containerProps,N=N??G.className,j=j??G.shrink,E=E??G.icon;var K=U[(0,a.default)(X.variants,l,"outlined")],Q=K.sizes[(0,a.default)(X.sizes,s,"md")],ne=(0,i.default)(K.error.input),ue=(0,i.default)(K.success.input),le=(0,i.default)(K.shrink.input),re=(0,i.default)(K.colors.input[(0,a.default)(X.colors,u,"gray")]),be=(0,i.default)(K.error.label),fe=(0,i.default)(K.success.label),ie=(0,i.default)(K.shrink.label),pe=(0,i.default)(K.colors.label[(0,a.default)(X.colors,u,"gray")]),ce=(0,o.default)((0,i.default)(B.container),(0,i.default)(Q.container),k==null?void 0:k.className),Oe=(0,o.default)((0,i.default)(B.input),(0,i.default)(K.base.input),(0,i.default)(Q.input),g({},(0,i.default)(K.base.inputWithIcon),E),g({},re,!m&&!w),g({},ne,m),g({},ue,w),g({},le,j),N),Se=(0,o.default)((0,i.default)(B.label),(0,i.default)(K.base.label),(0,i.default)(Q.label),g({},pe,!m&&!w),g({},be,m),g({},fe,w),g({},ie,j),P==null?void 0:P.className),Ce=(0,o.default)((0,i.default)(B.icon),(0,i.default)(K.base.icon),(0,i.default)(Q.icon)),_e=(0,o.default)((0,i.default)(B.asterisk));return r.default.createElement("div",v({},k,{ref:d,className:ce}),E&&r.default.createElement("div",{className:Ce},E),r.default.createElement("input",v({},F,{ref:I,className:Oe,placeholder:(F==null?void 0:F.placeholder)||" "})),r.default.createElement("label",v({},P,{className:Se}),h," ",F.required?r.default.createElement("span",{className:_e},"*"):""))});T.propTypes={variant:n.default.oneOf(p.propTypesVariant),size:n.default.oneOf(p.propTypesSize),color:n.default.oneOf(p.propTypesColor),label:p.propTypesLabel,error:p.propTypesError,success:p.propTypesSuccess,icon:p.propTypesIcon,labelProps:p.propTypesLabelProps,containerProps:p.propTypesContainerProps,shrink:p.propTypesShrink,className:p.propTypesClassName},T.displayName="MaterialTailwind.Input";var x=T})(US);var HS={},Vs={},Xi={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{propTypesOpen:function(){return g},propTypesHandler:function(){return v},propTypesPlacement:function(){return _},propTypesOffset:function(){return O},propTypesDismiss:function(){return C},propTypesAnimate:function(){return T},propTypesLockScroll:function(){return x},propTypesDisabled:function(){return b},propTypesClassName:function(){return d},propTypesChildren:function(){return l},propTypesContextValue:function(){return u}});var r=a(Fe),n=Pt;function o(s,h,m){return h in s?Object.defineProperty(s,h,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[h]=m,s}function a(s){return s&&s.__esModule?s:{default:s}}function i(s){for(var h=1;hl.length)&&(u=l.length);for(var s=0,h=new Array(u);s=0)&&Object.prototype.propertyIsEnumerable.call(x,l)&&(d[l]=x[l])}return d}function O(x,b){if(x==null)return{};var d={},l=Object.keys(x),u,s;for(s=0;s=0)&&(d[u]=x[u]);return d}var C=r.default.forwardRef(function(x,b){var d=x.children,l=_(x,["children"]),u=(0,o.useMenu)(),s=u.getReferenceProps,h=u.reference,m=u.nested,w=(0,n.useMergeRefs)([b,h]);return r.default.cloneElement(d,p({},s(p(v(p({},l),{ref:w,onClick:function(k){k.stopPropagation()}}),m&&{role:"menuitem"}))))});C.propTypes={children:a.propTypesChildren},C.displayName="MaterialTailwind.MenuHandler";var T=C})(qS);var GS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{MenuList:function(){return x},default:function(){return b}});var r=O(A),n=Zt,o=ir,a=O(He),i=Le,c=O(Ie),p=Ne,g=Vs,v=Xi;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.children,s=d.className,h=C(d,["children","className"]),m=(0,p.useTheme)().menu,w=m.styles.base,E=(0,g.useMenu)(),k=E.open,P=E.handler,N=E.strategy,j=E.x,I=E.y,F=E.floating,W=E.listItemsRef,G=E.getFloatingProps,X=E.getItemProps,H=E.appliedAnimation,B=E.lockScroll,U=E.context,K=E.activeIndex,Q=E.tree,ne=E.allowHover,ue=E.internalAllowHover,le=E.setActiveIndex,re=E.nested;s=s??"";var be=(0,i.twMerge)((0,a.default)((0,c.default)(w.menu)),s),fe=(0,n.useMergeRefs)([l,F]),ie=o.AnimatePresence,pe=r.default.createElement(o.m.div,_({},h,{ref:fe,style:{position:N,top:I??0,left:j??0},className:be},G({onKeyDown:function(Oe){Oe.key==="Tab"&&(P(!1),Oe.shiftKey&&Oe.preventDefault())}}),{initial:"unmount",exit:"unmount",animate:k?"mount":"unmount",variants:H}),r.default.Children.map(u,function(ce,Oe){return r.default.isValidElement(ce)&&r.default.cloneElement(ce,X({tabIndex:K===Oe?0:-1,role:"menuitem",className:ce.props.className,ref:function(Ce){W.current[Oe]=Ce},onClick:function(Ce){if(ce.props.onClick){var _e,je;(je=(_e=ce.props).onClick)===null||je===void 0||je.call(_e,Ce)}Q==null||Q.events.emit("click")},onMouseEnter:function(){(ne&&k||ue&&k)&&le(Oe)}}))}));return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(n.FloatingPortal,null,r.default.createElement(ie,null,k&&r.default.createElement(r.default.Fragment,null,B?r.default.createElement(n.FloatingOverlay,{lockScroll:!0},r.default.createElement(n.FloatingFocusManager,{context:U,modal:!re,initialFocus:re?-1:0,returnFocus:!re,visuallyHiddenDismiss:!0},pe)):r.default.createElement(n.FloatingFocusManager,{context:U,modal:!re,initialFocus:re?-1:0,returnFocus:!re,visuallyHiddenDismiss:!0},pe)))))});x.propTypes={className:v.propTypesClassName,children:v.propTypesChildren},x.displayName="MaterialTailwind.MenuList";var b=x})(GS);var KS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,b){for(var d in b)Object.defineProperty(x,d,{enumerable:!0,get:b[d]})}t(e,{MenuItem:function(){return C},default:function(){return T}});var r=v(A),n=v(He),o=Le,a=v(Ie),i=Ne,c=Xi;function p(x,b,d){return b in x?Object.defineProperty(x,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[b]=d,x}function g(){return g=Object.assign||function(x){for(var b=1;b=0)&&Object.prototype.propertyIsEnumerable.call(x,l)&&(d[l]=x[l])}return d}function O(x,b){if(x==null)return{};var d={},l=Object.keys(x),u,s;for(s=0;s=0)&&(d[u]=x[u]);return d}var C=r.default.forwardRef(function(x,b){var d=x.className,l=d===void 0?"":d,u=x.disabled,s=u===void 0?!1:u,h=x.children,m=_(x,["className","disabled","children"]),w=(0,i.useTheme)().menu,E=w.styles.base,k=(0,o.twMerge)((0,n.default)((0,a.default)(E.item.initial),p({},(0,a.default)(E.item.disabled),s)),l);return r.default.createElement("button",g({},m,{ref:b,role:"menuitem",className:k}),h)});C.propTypes={className:c.propTypesClassName,disabled:c.propTypesDisabled,children:c.propTypesChildren},C.displayName="MaterialTailwind.MenuItem";var T=C})(KS);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{Menu:function(){return _},MenuHandler:function(){return i.MenuHandler},MenuList:function(){return c.MenuList},MenuItem:function(){return p.MenuItem},useMenu:function(){return o.useMenu},default:function(){return O}});var r=v(A),n=Zt,o=Vs,a=$S,i=qS,c=GS,p=KS;function g(){return g=Object.assign||function(C){for(var T=1;T=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.open,s=d.animate,h=d.className,m=d.children,w=C(d,["open","animate","className","children"]),E;console.error(` will be deprecated in the future versions of @material-tailwind/react use instead. - -More details: https://www.material-tailwind.com/docs/react/collapse - `);var k=r.default.useRef(null),P=(0,g.useTheme)().navbar,N=P.styles,j=N.base.mobileNav;s=s??{},h=h??"";var I=(0,c.twMerge)((0,i.default)((0,p.default)(j)),h),F={unmount:{height:0,opacity:0,transition:{duration:.3,times:"[0.4, 0, 0.2, 1]"}},mount:{opacity:1,height:"".concat((E=k.current)===null||E===void 0?void 0:E.scrollHeight,"px"),transition:{duration:.3,times:"[0.4, 0, 0.2, 1]"}}},W=(0,a.default)(F,s),G=n.AnimatePresence,X=(0,o.useMergeRefs)([l,k]);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(G,null,r.default.createElement(n.m.div,_({},w,{ref:X,className:I,initial:"unmount",exit:"unmount",animate:u?"mount":"unmount",variants:W}),m)))});x.displayName="MaterialTailwind.MobileNav",x.propTypes={open:v.propTypesOpen,animate:v.propTypesAnimate,className:v.propTypesClassName,children:v.propTypesChildren};var b=x})(XS);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Navbar:function(){return b},MobileNav:function(){return g.MobileNav},default:function(){return d}});var r=C(A),n=C(Fe),o=C(He),a=Le,i=C(Nt),c=C(Ie),p=Ne,g=XS,v=Pd;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.variant,h=l.color,m=l.shadow,w=l.blurred,E=l.fullWidth,k=l.className,P=l.children,N=T(l,["variant","color","shadow","blurred","fullWidth","className","children"]),j=(0,p.useTheme)().navbar,I=j.defaultProps,F=j.valid,W=j.styles,G=W.base,X=W.variants;s=s??I.variant,h=h??I.color,m=m??I.shadow,w=w??I.blurred,E=E??I.fullWidth,k=k??I.className;var H,B=(0,o.default)((0,c.default)(G.navbar.initial),(H={},_(H,(0,c.default)(G.navbar.shadow),m),_(H,(0,c.default)(G.navbar.blurred),w&&h==="white"),_(H,(0,c.default)(G.navbar.fullWidth),E),H)),U=(0,o.default)((0,c.default)(X[(0,i.default)(F.variants,s,"filled")][(0,i.default)(F.colors,h,"white")])),K=(0,a.twMerge)((0,o.default)(B,U),k);return r.default.createElement("nav",O({},N,{ref:u,className:K}),P)});b.propTypes={variant:n.default.oneOf(v.propTypesVariant),color:n.default.oneOf(v.propTypesColor),shadow:v.propTypesShadow,blurred:v.propTypesBlurred,fullWidth:v.propTypesFullWidth,className:v.propTypesClassName,children:v.propTypesChildren},b.displayName="MaterialTailwind.Navbar";var d=Object.assign(b,{MobileNav:g.MobileNav})})(YS);var QS={},Kd={},Qi={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{propTypesOpen:function(){return a},propTypesHandler:function(){return i},propTypesPlacement:function(){return c},propTypesOffset:function(){return p},propTypesDismiss:function(){return g},propTypesAnimate:function(){return v},propTypesContent:function(){return _},propTypesInteractive:function(){return O},propTypesClassName:function(){return C},propTypesChildren:function(){return T},propTypesContextValue:function(){return x}});var r=o(Fe),n=Pt;function o(b){return b&&b.__esModule?b:{default:b}}var a=r.default.bool,i=r.default.func,c=n.propTypesPlacements,p=n.propTypesOffsetType,g=n.propTypesDismissType,v=n.propTypesAnimation,_=r.default.node,O=r.default.bool,C=r.default.string,T=r.default.node.isRequired,x=r.default.shape({open:r.default.bool.isRequired,strategy:r.default.oneOf(["fixed","absolute"]).isRequired,x:r.default.number,y:r.default.number,context:r.default.instanceOf(Object).isRequired,reference:r.default.func.isRequired,floating:r.default.func.isRequired,getReferenceProps:r.default.func.isRequired,getFloatingProps:r.default.func.isRequired,appliedAnimation:v.isRequired,labelId:r.default.string.isRequired,descriptionId:r.default.string.isRequired}).isRequired})(Qi);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(p,g){for(var v in g)Object.defineProperty(p,v,{enumerable:!0,get:g[v]})}t(e,{PopoverContext:function(){return a},usePopover:function(){return i},PopoverContextProvider:function(){return c}});var r=o(A),n=Qi;function o(p){return p&&p.__esModule?p:{default:p}}var a=r.default.createContext(null);a.displayName="MaterialTailwind.PopoverContext";function i(){var p=r.default.useContext(a);if(!p)throw new Error("usePopover() must be used within a Popover. It happens when you use PopoverHandler or PopoverContent components outside the Popover component.");return p}var c=function(p){var g=p.value,v=p.children;return r.default.createElement(a.Provider,{value:g},v)};c.propTypes={value:n.propTypesContextValue,children:n.propTypesChildren},c.displayName="MaterialTailwind.PopoverContextProvider"})(Kd);var JS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,b){for(var d in b)Object.defineProperty(x,d,{enumerable:!0,get:b[d]})}t(e,{PopoverHandler:function(){return C},default:function(){return T}});var r=c(A),n=Zt,o=Kd,a=Qi;function i(x,b,d){return b in x?Object.defineProperty(x,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[b]=d,x}function c(x){return x&&x.__esModule?x:{default:x}}function p(x){for(var b=1;b=0)&&Object.prototype.propertyIsEnumerable.call(x,l)&&(d[l]=x[l])}return d}function O(x,b){if(x==null)return{};var d={},l=Object.keys(x),u,s;for(s=0;s=0)&&(d[u]=x[u]);return d}var C=r.default.forwardRef(function(x,b){var d=x.children,l=_(x,["children"]),u=(0,o.usePopover)(),s=u.getReferenceProps,h=u.reference,m=(0,n.useMergeRefs)([b,h]);return r.default.cloneElement(d,p({},s(v(p({},l),{ref:m}))))});C.propTypes={children:a.propTypesChildren},C.displayName="MaterialTailwind.PopoverHandler";var T=C})(JS);var ZS={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,m){for(var w in m)Object.defineProperty(h,w,{enumerable:!0,get:m[w]})}t(e,{PopoverContent:function(){return u},default:function(){return s}});var r=C(A),n=Zt,o=ir,a=C(He),i=Le,c=C(Ie),p=Ne,g=Kd,v=Qi;function _(h,m,w){return m in h?Object.defineProperty(h,m,{value:w,enumerable:!0,configurable:!0,writable:!0}):h[m]=w,h}function O(){return O=Object.assign||function(h){for(var m=1;m=0)&&Object.prototype.propertyIsEnumerable.call(h,E)&&(w[E]=h[E])}return w}function l(h,m){if(h==null)return{};var w={},E=Object.keys(h),k,P;for(P=0;P=0)&&(w[k]=h[k]);return w}var u=r.default.forwardRef(function(h,m){var w=h.children,E=h.className,k=d(h,["children","className"]),P=(0,p.useTheme)().popover,N=P.defaultProps,j=P.styles.base,I=(0,g.usePopover)(),F=I.open,W=I.strategy,G=I.x,X=I.y,H=I.context,B=I.floating,U=I.getFloatingProps,K=I.appliedAnimation,Q=I.labelId,ne=I.descriptionId;E=E??N.className;var ue=(0,i.twMerge)((0,a.default)((0,c.default)(j)),E),le=(0,n.useMergeRefs)([m,B]),re=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(n.FloatingPortal,null,r.default.createElement(re,null,F&&r.default.createElement(n.FloatingFocusManager,{context:H},r.default.createElement(o.m.div,O({},U(b(T({},k),{ref:le,className:ue,style:{position:W,top:X??"",left:G??""},"aria-labelledby":Q,"aria-describedby":ne})),{initial:"unmount",exit:"unmount",animate:F?"mount":"unmount",variants:K}),w)))))});u.propTypes={className:v.propTypesClassName,children:v.propTypesChildren},u.displayName="MaterialTailwind.PopoverContent";var s=u})(ZS);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{Popover:function(){return l},PopoverHandler:function(){return g.PopoverHandler},PopoverContent:function(){return v.PopoverContent},usePopover:function(){return c.usePopover},default:function(){return u}});var r=C(A),n=C(Fe),o=Zt,a=C(dr),i=Ne,c=Kd,p=Qi,g=JS,v=ZS;function _(s,h){(h==null||h>s.length)&&(h=s.length);for(var m=0,w=new Array(h);m=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.variant,s=d.color,h=d.size,m=d.value,w=d.label,E=d.className,k=d.barProps,P=C(d,["variant","color","size","value","label","className","barProps"]),N=(0,p.useTheme)().progress,j=N.defaultProps,I=N.valid,F=N.styles,W=F.base,G=F.variants,X=F.sizes;u=u??j.variant,s=s??j.color,h=h??j.size,w=w??j.label,E=E??j.className,k=k??j.barProps;var H=(0,c.default)(G[(0,i.default)(I.variants,u,"filled")][(0,i.default)(I.colors,s,"gray")]),B=(0,c.default)(X[(0,i.default)(I.sizes,h,"md")].container.initial),U=(0,o.default)((0,c.default)(W.container.initial),B),K=(0,c.default)(X[(0,i.default)(I.sizes,h,"md")].container.withLabel),Q=(0,o.default)((0,c.default)(W.container.withLabel),K),ne=(0,c.default)(X[(0,i.default)(I.sizes,h,"md")].bar),ue=(0,o.default)((0,c.default)(W.bar),ne),le=(0,a.twMerge)((0,o.default)(U,v({},Q,w)),E),re=(0,a.twMerge)((0,o.default)(ue,H),k==null?void 0:k.className);return r.default.createElement("div",_({},P,{ref:l,className:le}),r.default.createElement("div",_({},k,{className:re,style:{width:"".concat(m,"%")}}),w&&"".concat(m,"% ").concat(typeof w=="string"?w:"")))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),size:n.default.oneOf(g.propTypesSize),value:g.propTypesValue,label:g.propTypesLabel,barProps:g.propTypesBarProps,className:g.propTypesClassName},x.displayName="MaterialTailwind.Progress";var b=x})(eP);var tP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Radio:function(){return b},default:function(){return d}});var r=C(A),n=C(Fe),o=C(qi),a=C(He),i=Le,c=C(Nt),p=C(Ie),g=Ne,v=Da;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.color,h=l.label,m=l.icon,w=l.ripple,E=l.className,k=l.disabled,P=l.containerProps,N=l.labelProps,j=l.iconProps,I=l.inputRef,F=T(l,["color","label","icon","ripple","className","disabled","containerProps","labelProps","iconProps","inputRef"]),W=(0,g.useTheme)().radio,G=W.defaultProps,X=W.valid,H=W.styles,B=H.base,U=H.colors,K=r.default.useId();s=s??G.color,h=h??G.label,m=m??G.icon,w=w??G.ripple,E=E??G.className,k=k??G.disabled,P=P??G.containerProps,N=N??G.labelProps,j=j??G.iconProps;var Q=w!==void 0&&new o.default,ne=(0,a.default)((0,p.default)(B.root),_({},(0,p.default)(B.disabled),k)),ue=(0,i.twMerge)((0,a.default)((0,p.default)(B.container)),P==null?void 0:P.className),le=(0,i.twMerge)((0,a.default)((0,p.default)(B.input),(0,p.default)(U[(0,c.default)(X.colors,s,"gray")])),E),re=(0,i.twMerge)((0,a.default)((0,p.default)(B.label)),N==null?void 0:N.className),be=(0,a.default)((0,a.default)((0,p.default)(B.icon)),U[(0,c.default)(X.colors,s,"gray")].color,j==null?void 0:j.className);return r.default.createElement("div",{ref:u,className:ne},r.default.createElement("label",O({},P,{className:ue,htmlFor:F.id||K,onMouseDown:function(fe){var ie=P==null?void 0:P.onMouseDown;return w&&Q.create(fe,"dark"),typeof ie=="function"&&ie(fe)}}),r.default.createElement("input",O({},F,{ref:I,type:"radio",disabled:k,className:le,id:F.id||K})),r.default.createElement("span",{className:be},m||r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 16 16",fill:"currentColor"},r.default.createElement("circle",{"data-name":"ellipse",cx:"8",cy:"8",r:"8"})))),h&&r.default.createElement("label",O({},N,{className:re,htmlFor:F.id||K}),h))});b.propTypes={color:n.default.oneOf(v.propTypesColor),label:v.propTypesLabel,icon:v.propTypesIcon,ripple:v.propTypesRipple,className:v.propTypesClassName,disabled:v.propTypesDisabled,containerProps:v.propTypesObject,labelProps:v.propTypesObject},b.displayName="MaterialTailwind.Radio";var d=b})(tP);var rP={},wb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(v,_){for(var O in _)Object.defineProperty(v,O,{enumerable:!0,get:_[O]})}t(e,{SelectContext:function(){return i},useSelect:function(){return c},usePrevious:function(){return p},SelectContextProvider:function(){return g}});var r=a(A),n=ir,o=Rs;function a(v){return v&&v.__esModule?v:{default:v}}var i=r.default.createContext(null);i.displayName="MaterialTailwind.SelectContext";function c(){var v=r.default.useContext(i);if(v===null)throw new Error("useSelect() must be used within a Select. It happens when you use SelectOption component outside the Select component.");return v}function p(v){var _=r.default.useRef();return(0,n.useIsomorphicLayoutEffect)(function(){_.current=v},[v]),_.current}var g=function(v){var _=v.value,O=v.children;return r.default.createElement(i.Provider,{value:_},O)};g.propTypes={value:o.propTypesContextValue,children:o.propTypesChildren},g.displayName="MaterialTailwind.SelectContextProvider"})(wb);var nP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{SelectOption:function(){return T},default:function(){return x}});var r=_(A),n=_(He),o=Le,a=_(Ie),i=Ne,c=wb,p=Rs;function g(b,d,l){return d in b?Object.defineProperty(b,d,{value:l,enumerable:!0,configurable:!0,writable:!0}):b[d]=l,b}function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=function(b){var d=function(){H(m),K(s),U(!1),ne(null)},l=function(Oe){(Oe.key==="Enter"||Oe.key===" "&&!le.current.typing)&&(Oe.preventDefault(),d())},u=b.value,s=u===void 0?"":u,h=b.index,m=h===void 0?0:h,w=b.disabled,E=w===void 0?!1:w,k=b.className,P=k===void 0?"":k,N=b.children,j=O(b,["value","index","disabled","className","children"]),I=(0,i.useTheme)().select,F=I.styles,W=F.base,G=(0,c.useSelect)(),X=G.selectedIndex,H=G.setSelectedIndex,B=G.listRef,U=G.setOpen,K=G.onChange,Q=G.activeIndex,ne=G.setActiveIndex,ue=G.getItemProps,le=G.dataRef,re=(0,a.default)(W.option.initial),be=(0,a.default)(W.option.active),fe=(0,a.default)(W.option.disabled),ie,pe=(0,o.twMerge)((0,n.default)(re,(ie={},g(ie,be,X===m),g(ie,fe,E),ie)),P??"");return r.default.createElement("li",v({},j,{role:"option",ref:function(ce){return B.current[m]=ce},className:pe,disabled:E,tabIndex:Q===m?0:1,"aria-selected":Q===m&&X===m,"data-selected":X===m},ue({onClick:function(ce){var Oe=j==null?void 0:j.onClick;typeof Oe=="function"&&(Oe(ce),d()),d()},onKeyDown:function(ce){var Oe=j==null?void 0:j.onKeyDown;typeof Oe=="function"&&(Oe(ce),l(ce)),l(ce)}})),N)};T.propTypes={value:p.propTypesValue,index:p.propTypesIndex,disabled:p.propTypesDisabled,className:p.propTypesClassName,children:p.propTypesChildren},T.displayName="MaterialTailwind.SelectOption";var x=T})(nP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(B,U){for(var K in U)Object.defineProperty(B,K,{enumerable:!0,get:U[K]})}t(e,{Select:function(){return X},Option:function(){return T.SelectOption},useSelect:function(){return O.useSelect},usePrevious:function(){return O.usePrevious},default:function(){return H}});var r=s(A),n=s(Fe),o=Zt,a=ir,i=s(He),c=Le,p=s(dr),g=s(Nt),v=s(Ie),_=Ne,O=wb,C=Rs,T=nP;function x(B,U){(U==null||U>B.length)&&(U=B.length);for(var K=0,Q=new Array(U);K=0)&&Object.prototype.propertyIsEnumerable.call(B,Q)&&(K[Q]=B[Q])}return K}function I(B,U){if(B==null)return{};var K={},Q=Object.keys(B),ne,ue;for(ue=0;ue=0)&&(K[ne]=B[ne]);return K}function F(B,U){return b(B)||m(B,U)||G(B,U)||w()}function W(B){return d(B)||h(B)||G(B)||E()}function G(B,U){if(B){if(typeof B=="string")return x(B,U);var K=Object.prototype.toString.call(B).slice(8,-1);if(K==="Object"&&B.constructor&&(K=B.constructor.name),K==="Map"||K==="Set")return Array.from(K);if(K==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(K))return x(B,U)}}var X=r.default.forwardRef(function(B,U){var K=B.variant,Q=B.color,ne=B.size,ue=B.label,le=B.error,re=B.success,be=B.arrow,fe=B.value,ie=B.onChange,pe=B.selected,ce=B.offset,Oe=B.dismiss,Se=B.animate,Ce=B.lockScroll,_e=B.labelProps,je=B.menuProps,Ge=B.className,nt=B.disabled,ut=B.name,ot=B.children,pt=B.containerProps,We=j(B,["variant","color","size","label","error","success","arrow","value","onChange","selected","offset","dismiss","animate","lockScroll","labelProps","menuProps","className","disabled","name","children","containerProps"]),xt,Ke=(0,_.useTheme)().select,ae=Ke.defaultProps,ge=Ke.valid,Ae=Ke.styles,Me=Ae.base,ve=Ae.variants,Te=F(r.default.useState("close"),2),$e=Te[0],lt=Te[1];K=K??ae.variant,Q=Q??ae.color,ne=ne??ae.size,ue=ue??ae.label,le=le??ae.error,re=re??ae.success,be=be??ae.arrow,fe=fe??ae.value,ie=ie??ae.onChange,pe=pe??ae.selected,ce=ce??ae.offset,Oe=Oe??ae.dismiss,Se=Se??ae.animate,_e=_e??ae.labelProps,je=je??ae.menuProps;var ht;pt=(ht=(0,p.default)(pt,(ae==null?void 0:ae.containerProps)||{}))!==null&&ht!==void 0?ht:ae.containerProps,Ge=Ge??ae.className;var zt=r.default.useRef([]),Xe,Wt=r.default.useRef(W((Xe=r.default.Children.map(ot,function(kt){var qt=kt.props;return qt==null?void 0:qt.value}))!==null&&Xe!==void 0?Xe:[])),lr=F(r.default.useState(!1),2),Ht=lr[0],Kr=lr[1],oe=F(r.default.useState(null),2),he=oe[0],ke=oe[1],Je=F(r.default.useState(0),2),at=Je[0],gt=Je[1],Ze=F(r.default.useState(!1),2),Tt=Ze[0],er=Ze[1],Zo=(0,O.usePrevious)(he),Or=(0,o.useFloating)({placement:"bottom-start",open:Ht,onOpenChange:Kr,whileElementsMounted:o.autoUpdate,middleware:[(0,o.offset)(5),(0,o.flip)({padding:10}),(0,o.size)({apply:function(qt){var At=qt.rects,jn=qt.elements,oa,ho;Object.assign(jn==null||(oa=jn.floating)===null||oa===void 0?void 0:oa.style,{width:"".concat(At==null||(ho=At.reference)===null||ho===void 0?void 0:ho.width,"px"),zIndex:99})},padding:20})]}),$n=Or.x,uo=Or.y,za=Or.strategy,co=Or.refs,Yr=Or.context;r.default.useEffect(function(){gt(Math.max(0,Wt.current.indexOf(fe)+1))},[fe]);var Ba=co.floating,ea=(0,o.useInteractions)([(0,o.useClick)(Yr),(0,o.useRole)(Yr,{role:"listbox"}),(0,o.useDismiss)(Yr,k({},Oe)),(0,o.useListNavigation)(Yr,{listRef:zt,activeIndex:he,selectedIndex:at,onNavigate:ke,loop:!0}),(0,o.useTypeahead)(Yr,{listRef:Wt,activeIndex:he,selectedIndex:at,onMatch:Ht?ke:gt})]),Wa=ea.getReferenceProps,fo=ea.getFloatingProps,po=ea.getItemProps;(0,a.useIsomorphicLayoutEffect)(function(){var kt=Ba.current;if(Ht&&Tt&&kt){var qt=he!=null?zt.current[he]:at!=null?zt.current[at]:null;if(qt&&Zo!=null){var At,jn,oa=(jn=(At=zt.current[Zo])===null||At===void 0?void 0:At.offsetHeight)!==null&&jn!==void 0?jn:0,ho=kt.offsetHeight,al=qt.offsetTop,$s=al+oa;alho+kt.scrollTop&&(kt.scrollTop+=$s-ho-kt.scrollTop+5)}}},[Ht,Tt,Zo,he]);var ye=r.default.useMemo(function(){return{selectedIndex:at,setSelectedIndex:gt,listRef:zt,setOpen:Kr,onChange:ie||function(){},activeIndex:he,setActiveIndex:ke,getItemProps:po,dataRef:Yr.dataRef}},[at,ie,he,po,Yr.dataRef]);r.default.useEffect(function(){lt(Ht?"open":!Ht&&at||!Ht&&fe?"withValue":"close")},[Ht,fe,at,pe]);var Ve=ve[(0,g.default)(ge.variants,K,"outlined")],ze=Ve.sizes[(0,g.default)(ge.sizes,ne,"md")],tt=Ve.error.select,bt=Ve.success.select,$t=Ve.colors.select[(0,g.default)(ge.colors,Q,"gray")],jt=Ve.error.label,Dr=Ve.success.label,tr=Ve.colors.label[(0,g.default)(ge.colors,Q,"gray")],Xr=Ve.states[$e],ta=(0,i.default)((0,v.default)(Me.container),(0,v.default)(ze.container),pt==null?void 0:pt.className),fn=(0,c.twMerge)((0,i.default)((0,v.default)(Me.select),(0,v.default)(Ve.base.select),(0,v.default)(Xr.select),(0,v.default)(ze.select),l({},(0,v.default)($t[$e]),!le&&!re),l({},(0,v.default)(tt.initial),le),l({},(0,v.default)(tt.states[$e]),le),l({},(0,v.default)(bt.initial),re),l({},(0,v.default)(bt.states[$e]),re)),Ge),rl,Hs=(0,c.twMerge)((0,i.default)((0,v.default)(Me.label),(0,v.default)(Ve.base.label),(0,v.default)(Xr.label),(0,v.default)(ze.label.initial),(0,v.default)(ze.label.states[$e]),l({},(0,v.default)(tr[$e]),!le&&!re),l({},(0,v.default)(jt.initial),le),l({},(0,v.default)(jt.states[$e]),le),l({},(0,v.default)(Dr.initial),re),l({},(0,v.default)(Dr.states[$e]),re)),(rl=_e.className)!==null&&rl!==void 0?rl:""),ra=(0,i.default)((0,v.default)(Me.arrow.initial),l({},(0,v.default)(Me.arrow.active),Ht)),Ua,Ha=(0,c.twMerge)((0,i.default)((0,v.default)(Me.menu)),(Ua=je.className)!==null&&Ua!==void 0?Ua:""),nl=(0,i.default)("absolute top-2/4 -translate-y-2/4",K==="outlined"?"left-3 pt-0.5":"left-0 pt-3"),af={unmount:{opacity:0,transformOrigin:"top",transform:"scale(0.95)",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{opacity:1,transformOrigin:"top",transform:"scale(1)",transition:{duration:.2,times:[.4,0,.2,1]}}},lf=(0,p.default)(af,Se),ol=a.AnimatePresence;r.default.useEffect(function(){fe&&!ie&&console.error("Warning: You provided a `value` prop to a select component without an `onChange` handler. This will render a read-only select. If the field should be mutable use `onChange` handler with `value` together.")},[fe,ie]);var na=r.default.createElement(o.FloatingFocusManager,{context:Yr,modal:!1},r.default.createElement(a.m.ul,u({},fo(N(k({},je),{ref:co.setFloating,role:"listbox",className:Ha,style:{position:za,top:uo??0,left:$n??0,overflow:"auto"},onPointerEnter:function(qt){var At=je==null?void 0:je.onPointerEnter;typeof At=="function"&&(At(qt),er(!1)),er(!1)},onPointerMove:function(qt){var At=je==null?void 0:je.onPointerMove;typeof At=="function"&&(At(qt),er(!1)),er(!1)},onKeyDown:function(qt){var At=je==null?void 0:je.onKeyDown;typeof At=="function"&&(At(qt),er(!0)),er(!0)}})),{initial:"unmount",exit:"unmount",animate:Ht?"mount":"unmount",variants:lf}),r.default.Children.map(ot,function(kt,qt){var At;return r.default.isValidElement(kt)&&r.default.cloneElement(kt,N(k({},kt.props),{index:((At=kt.props)===null||At===void 0?void 0:At.index)||qt+1,id:"material-tailwind-select-".concat(qt)}))})));return r.default.createElement(O.SelectContextProvider,{value:ye},r.default.createElement("div",u({},pt,{ref:U,className:ta}),r.default.createElement("button",u({type:"button"},Wa(N(k({},We),{ref:co.setReference,className:fn,disabled:nt,name:ut}))),typeof pe=="function"?r.default.createElement("span",{className:nl},pe(ot[at-1],at-1)):fe&&!ie?r.default.createElement("span",{className:nl},fe):r.default.createElement("span",u({},(xt=ot[at-1])===null||xt===void 0?void 0:xt.props,{className:nl})),r.default.createElement("div",{className:ra},be??r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",clipRule:"evenodd"})))),r.default.createElement("label",u({},_e,{className:Hs}),ue),r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(ol,null,Ht&&r.default.createElement(r.default.Fragment,null,Ce?r.default.createElement(o.FloatingOverlay,{lockScroll:!0},na):na)))))});X.propTypes={variant:n.default.oneOf(C.propTypesVariant),color:n.default.oneOf(C.propTypesColor),size:n.default.oneOf(C.propTypesSize),label:C.propTypesLabel,error:C.propTypesError,success:C.propTypesSuccess,arrow:C.propTypesArrow,value:C.propTypesValue,onChange:C.propTypesOnChange,selected:C.propTypesSelected,offset:C.propTypesOffset,dismiss:C.propTypesDismiss,animate:C.propTypesAnimate,lockScroll:C.propTypesLockScroll,labelProps:C.propTypesLabelProps,menuProps:C.propTypesMenuProps,className:C.propTypesClassName,disabled:C.propTypesDisabled,name:C.propTypesName,children:C.propTypesChildren,containerProps:C.propTypesContainerProps},X.displayName="MaterialTailwind.Select";var H=Object.assign(X,{Option:T.SelectOption})})(rP);var oP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Switch:function(){return b},default:function(){return d}});var r=C(A),n=C(Fe),o=C(qi),a=C(He),i=Le,c=C(Nt),p=C(Ie),g=Ne,v=Da;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.color,h=l.label,m=l.ripple,w=l.className,E=l.disabled,k=l.containerProps,P=l.circleProps,N=l.labelProps,j=l.inputRef,I=T(l,["color","label","ripple","className","disabled","containerProps","circleProps","labelProps","inputRef"]),F=(0,g.useTheme)(),W=F.switch,G=W.defaultProps,X=W.valid,H=W.styles,B=H.base,U=H.colors,K=r.default.useId();s=s??G.color,m=m??G.ripple,w=w??G.className,E=E??G.disabled,k=k??G.containerProps,N=N??G.labelProps,P=P??G.circleProps;var Q=m!==void 0&&new o.default,ne=(0,a.default)((0,p.default)(B.root),_({},(0,p.default)(B.disabled),E)),ue=(0,i.twMerge)((0,a.default)((0,p.default)(B.container)),k==null?void 0:k.className),le=(0,i.twMerge)((0,a.default)((0,p.default)(B.input),(0,p.default)(U[(0,c.default)(X.colors,s,"gray")])),w),re=(0,i.twMerge)((0,a.default)((0,p.default)(B.circle),U[(0,c.default)(X.colors,s,"gray")].circle,U[(0,c.default)(X.colors,s,"gray")].before),P==null?void 0:P.className),be=(0,a.default)((0,p.default)(B.ripple)),fe=(0,i.twMerge)((0,a.default)((0,p.default)(B.label)),N==null?void 0:N.className);return r.default.createElement("div",{ref:u,className:ne},r.default.createElement("div",O({},k,{className:ue}),r.default.createElement("input",O({},I,{ref:j,type:"checkbox",disabled:E,id:I.id||K,className:le})),r.default.createElement("label",O({},P,{htmlFor:I.id||K,className:re}),m&&r.default.createElement("div",{className:be,onMouseDown:function(ie){var pe=k==null?void 0:k.onMouseDown;return m&&Q.create(ie,"dark"),typeof pe=="function"&&pe(ie)}}))),h&&r.default.createElement("label",O({},N,{htmlFor:I.id||K,className:fe}),h))});b.propTypes={color:n.default.oneOf(v.propTypesColor),label:v.propTypesLabel,ripple:v.propTypesRipple,className:v.propTypesClassName,disabled:v.propTypesDisabled,containerProps:v.propTypesObject,labelProps:v.propTypesObject,circleProps:v.propTypesObject},b.displayName="MaterialTailwind.Switch";var d=b})(oP);var aP={},Ji={},Va={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{propTypesId:function(){return a},propTypesValue:function(){return i},propTypesAnimate:function(){return c},propTypesDisabled:function(){return p},propTypesClassName:function(){return g},propTypesOrientation:function(){return v},propTypesIndicator:function(){return _},propTypesChildren:function(){return O}});var r=o(Fe),n=Pt;function o(C){return C&&C.__esModule?C:{default:C}}var a=r.default.string,i=r.default.oneOfType([r.default.string,r.default.number]).isRequired,c=n.propTypesAnimation,p=r.default.bool,g=r.default.string,v=r.default.oneOf(["horizontal","vertical"]),_=r.default.instanceOf(Object),O=r.default.node.isRequired})(Va);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(k,P){for(var N in P)Object.defineProperty(k,N,{enumerable:!0,get:P[N]})}t(e,{TabsContext:function(){return b},useTabs:function(){return d},TabsContextProvider:function(){return l},setId:function(){return u},setActive:function(){return s},setAnimation:function(){return h},setIndicator:function(){return m},setIsInitial:function(){return w},setOrientation:function(){return E}});var r=c(A),n=Va;function o(k,P){(P==null||P>k.length)&&(P=k.length);for(var N=0,j=new Array(P);N=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.value,s=d.className,h=d.activeClassName,m=d.disabled,w=d.children,E=C(d,["value","className","activeClassName","disabled","children"]),k=(0,c.useTheme)(),P=k.tab,N=P.defaultProps,j=P.styles.base,I=(0,p.useTabs)(),F=I.state,W=I.dispatch,G=F.id,X=F.active,H=F.indicatorProps;s=s??N.className,h=h??N.activeClassName,m=m??N.disabled;var B,U=(0,a.twMerge)((0,o.default)((0,i.default)(j.tab.initial),(B={},v(B,(0,i.default)(j.tab.disabled),m),v(B,h,X===u),B)),s),K,Q=(0,a.twMerge)((0,o.default)((0,i.default)(j.indicator)),(K=H==null?void 0:H.className)!==null&&K!==void 0?K:"");return r.default.createElement("li",_({},E,{ref:l,role:"tab",className:U,onClick:function(ne){var ue=E==null?void 0:E.onClick;typeof ue=="function"&&((0,p.setActive)(W,u),(0,p.setIsInitial)(W,!1),ue(ne)),(0,p.setIsInitial)(W,!1),(0,p.setActive)(W,u)},"data-value":u}),r.default.createElement("div",{className:"z-20 text-inherit"},w),X===u&&r.default.createElement(n.motion.div,_({},H,{transition:{duration:.5},className:Q,layoutId:G})))});x.propTypes={value:g.propTypesValue,className:g.propTypesClassName,disabled:g.propTypesDisabled,children:g.propTypesChildren},x.displayName="MaterialTailwind.Tab";var b=x})(iP);var lP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{TabsBody:function(){return x},default:function(){return b}});var r=O(A),n=ir,o=O(dr),a=O(He),i=Le,c=O(Ie),p=Ne,g=Ji,v=Va;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.animate,s=d.className,h=d.children,m=C(d,["animate","className","children"]),w=(0,p.useTheme)().tabsBody,E=w.defaultProps,k=w.styles.base,P=(0,g.useTabs)().dispatch;s=s??E.className,u=u??E.animate;var N=(0,i.twMerge)((0,a.default)((0,c.default)(k)),s),j=r.default.useMemo(function(){return{initial:{opacity:0,position:"absolute",top:"0",left:"0",zIndex:1,transition:{duration:0}},unmount:{opacity:0,position:"absolute",top:"0",left:"0",zIndex:1,transition:{duration:.5,times:[.4,0,.2,1]}},mount:{opacity:1,position:"relative",zIndex:2,transition:{duration:.5,times:[.4,0,.2,1]}}}},[]),I=r.default.useMemo(function(){return(0,o.default)(j,u)},[u,j]);return(0,n.useIsomorphicLayoutEffect)(function(){(0,g.setAnimation)(P,I)},[I,P]),r.default.createElement("div",_({},m,{ref:l,className:N}),h)});x.propTypes={animate:v.propTypesAnimate,className:v.propTypesClassName,children:v.propTypesChildren},x.displayName="MaterialTailwind.TabsBody";var b=x})(lP);var sP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{TabsHeader:function(){return T},default:function(){return x}});var r=_(A),n=_(He),o=Le,a=_(Ie),i=Ne,c=Ji,p=Va;function g(b,d,l){return d in b?Object.defineProperty(b,d,{value:l,enumerable:!0,configurable:!0,writable:!0}):b[d]=l,b}function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.indicatorProps,u=b.className,s=b.children,h=O(b,["indicatorProps","className","children"]),m=(0,i.useTheme)().tabsHeader,w=m.defaultProps,E=m.styles,k=(0,c.useTabs)(),P=k.state,N=k.dispatch,j=P.orientation;r.default.useEffect(function(){(0,c.setIndicator)(N,l)},[N,l]),u=u??w.className;var I=(0,o.twMerge)((0,n.default)((0,a.default)(E.base),g({},E[j]&&(0,a.default)(E[j]),j)),u);return r.default.createElement("nav",null,r.default.createElement("ul",v({},h,{ref:d,role:"tablist",className:I}),s))});T.propTypes={indicatorProps:p.propTypesIndicator,className:p.propTypesClassName,children:p.propTypesChildren},T.displayName="MaterialTailwind.TabsHeader";var x=T})(sP);var uP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{TabPanel:function(){return T},default:function(){return x}});var r=_(A),n=ir,o=_(He),a=Le,i=_(Ie),c=Ne,p=Ji,g=Va;function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.value,u=b.className,s=b.children,h=O(b,["value","className","children"]),m=(0,c.useTheme)().tabPanel,w=m.defaultProps,E=m.styles.base,k=(0,p.useTabs)().state,P=k.active,N=k.appliedAnimation,j=k.isInitial;u=u??w.className;var I=(0,a.twMerge)((0,o.default)((0,i.default)(E)),u),F=n.AnimatePresence;return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(F,{exitBeforeEnter:!0},r.default.createElement(n.m.div,v({},h,{ref:d,role:"tabpanel",className:I,initial:"unmount",exit:"unmount",animate:P===l?"mount":j?"initial":"unmount",variants:N,"data-value":l}),s)))});T.propTypes={value:g.propTypesValue,className:g.propTypesClassName,children:g.propTypesChildren},T.displayName="MaterialTailwind.TabPanel";var x=T})(uP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{Tabs:function(){return l},Tab:function(){return p.Tab},TabsBody:function(){return g.TabsBody},TabsHeader:function(){return v.TabsHeader},TabPanel:function(){return _.TabPanel},useTabs:function(){return c.useTabs},default:function(){return u}});var r=x(A),n=x(He),o=Le,a=x(Ie),i=Ne,c=Ji,p=iP,g=lP,v=sP,_=uP,O=Va;function C(s,h,m){return h in s?Object.defineProperty(s,h,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[h]=m,s}function T(){return T=Object.assign||function(s){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(s,w)&&(m[w]=s[w])}return m}function d(s,h){if(s==null)return{};var m={},w=Object.keys(s),E,k;for(k=0;k=0)&&(m[E]=s[E]);return m}var l=r.default.forwardRef(function(s,h){var m=s.value,w=s.className,E=s.orientation,k=s.children,P=b(s,["value","className","orientation","children"]),N=(0,i.useTheme)().tabs,j=N.defaultProps,I=N.styles,F=r.default.useId();w=w??j.className,E=E??j.orientation;var W=(0,o.twMerge)((0,n.default)((0,a.default)(I.base),C({},I[E]&&(0,a.default)(I[E]),E)),w);return r.default.createElement(c.TabsContextProvider,{id:F,value:m,orientation:E},r.default.createElement("div",T({},P,{ref:h,className:W}),k))});l.propTypes={id:O.propTypesId,value:O.propTypesValue,className:O.propTypesClassName,orientation:O.propTypesOrientation,children:O.propTypesChildren},l.displayName="MaterialTailwind.Tabs";var u=Object.assign(l,{Tab:p.Tab,Body:g.TabsBody,Header:v.TabsHeader,Panel:_.TabPanel})})(aP);var cP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{Textarea:function(){return T},default:function(){return x}});var r=_(A),n=_(Fe),o=_(He),a=_(Nt),i=_(Ie),c=Ne,p=Es;function g(b,d,l){return d in b?Object.defineProperty(b,d,{value:l,enumerable:!0,configurable:!0,writable:!0}):b[d]=l,b}function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.variant,u=b.color,s=b.size,h=b.label,m=b.error,w=b.success,E=b.resize,k=b.labelProps,P=b.containerProps,N=b.shrink,j=b.className,I=O(b,["variant","color","size","label","error","success","resize","labelProps","containerProps","shrink","className"]),F=(0,c.useTheme)().textarea,W=F.defaultProps,G=F.valid,X=F.styles,H=X.base,B=X.variants;l=l??W.variant,s=s??W.size,u=u??W.color,h=h??W.label,k=k??W.labelProps,P=P??W.containerProps,N=N??W.shrink,j=j??W.className;var U=B[(0,a.default)(G.variants,l,"outlined")],K=(0,i.default)(U.error.textarea),Q=(0,i.default)(U.success.textarea),ne=(0,i.default)(U.shrink.textarea),ue=(0,i.default)(U.colors.textarea[(0,a.default)(G.colors,u,"gray")]),le=(0,i.default)(U.error.label),re=(0,i.default)(U.success.label),be=(0,i.default)(U.shrink.label),fe=(0,i.default)(U.colors.label[(0,a.default)(G.colors,u,"gray")]),ie=(0,o.default)((0,i.default)(H.container),P==null?void 0:P.className),pe=(0,o.default)((0,i.default)(H.textarea),(0,i.default)(U.base.textarea),(0,i.default)(U.sizes[(0,a.default)(G.sizes,s,"md")].textarea),g({},ue,!m&&!w),g({},K,m),g({},Q,w),g({},ne,N),E?"":"!resize-none",j),ce=(0,o.default)((0,i.default)(H.label),(0,i.default)(U.base.label),(0,i.default)(U.sizes[(0,a.default)(G.sizes,s,"md")].label),g({},fe,!m&&!w),g({},le,m),g({},re,w),g({},be,N),k==null?void 0:k.className);return r.default.createElement("div",{ref:d,className:ie},r.default.createElement("textarea",v({},I,{className:pe,placeholder:(I==null?void 0:I.placeholder)||" "})),r.default.createElement("label",{className:ce},h))});T.propTypes={variant:n.default.oneOf(p.propTypesVariant),size:n.default.oneOf(p.propTypesSize),color:n.default.oneOf(p.propTypesColor),label:p.propTypesLabel,error:p.propTypesError,success:p.propTypesSuccess,resize:p.propTypesResize,labelProps:p.propTypesLabelProps,containerProps:p.propTypesContainerProps,shrink:p.propTypesShrink,className:p.propTypesClassName},T.displayName="MaterialTailwind.Textarea";var x=T})(cP);var dP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(j,I){for(var F in I)Object.defineProperty(j,F,{enumerable:!0,get:I[F]})}t(e,{Tooltip:function(){return P},default:function(){return N}});var r=b(A),n=b(Fe),o=Zt,a=ir,i=b(He),c=Le,p=b(dr),g=b(Ie),v=Ne,_=Qi;function O(j,I){(I==null||I>j.length)&&(I=j.length);for(var F=0,W=new Array(I);F=0)&&Object.prototype.propertyIsEnumerable.call(j,W)&&(F[W]=j[W])}return F}function w(j,I){if(j==null)return{};var F={},W=Object.keys(j),G,X;for(X=0;X=0)&&(F[G]=j[G]);return F}function E(j,I){return C(j)||d(j,I)||k(j,I)||l()}function k(j,I){if(j){if(typeof j=="string")return O(j,I);var F=Object.prototype.toString.call(j).slice(8,-1);if(F==="Object"&&j.constructor&&(F=j.constructor.name),F==="Map"||F==="Set")return Array.from(F);if(F==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(F))return O(j,I)}}var P=r.default.forwardRef(function(j,I){var F=j.open,W=j.handler,G=j.content,X=j.interactive,H=j.placement,B=j.offset,U=j.dismiss,K=j.animate,Q=j.className,ne=j.children,ue=m(j,["open","handler","content","interactive","placement","offset","dismiss","animate","className","children"]),le=(0,v.useTheme)().tooltip,re=le.defaultProps,be=le.styles.base,fe=E(r.default.useState(!1),2),ie=fe[0],pe=fe[1];F=F??ie,W=W??pe,X=X??re.interactive,H=H??re.placement,B=B??re.offset,U=U??re.dismiss,K=K??re.animate,Q=Q??re.className;var ce=(0,c.twMerge)((0,i.default)((0,g.default)(be)),Q),Oe={unmount:{opacity:0},mount:{opacity:1}},Se=(0,p.default)(Oe,K),Ce=(0,o.useFloating)({open:F,onOpenChange:W,middleware:[(0,o.offset)(B),(0,o.flip)(),(0,o.shift)()],placement:H}),_e=Ce.x,je=Ce.y,Ge=Ce.reference,nt=Ce.floating,ut=Ce.strategy,ot=Ce.refs,pt=Ce.update,We=Ce.context,xt=(0,o.useInteractions)([(0,o.useClick)(We,{enabled:X}),(0,o.useFocus)(We),(0,o.useHover)(We),(0,o.useRole)(We,{role:"tooltip"}),(0,o.useDismiss)(We,U)]),Ke=xt.getReferenceProps,ae=xt.getFloatingProps;r.default.useEffect(function(){if(ot.reference.current&&ot.floating.current&&F)return(0,o.autoUpdate)(ot.reference.current,ot.floating.current,pt)},[F,pt,ot.reference,ot.floating]);var ge=(0,o.useMergeRefs)([I,nt]),Ae=(0,o.useMergeRefs)([I,Ge]),Me=a.AnimatePresence;return r.default.createElement(r.default.Fragment,null,typeof ne=="string"?r.default.createElement("span",x({},Ke({ref:Ae})),ne):r.default.cloneElement(ne,u({},Ke(h(u({},ne==null?void 0:ne.props),{ref:Ae})))),r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(o.FloatingPortal,null,r.default.createElement(Me,null,F&&r.default.createElement(a.m.div,x({},ae(h(u({},ue),{ref:ge,className:ce,style:{position:ut,top:je??"",left:_e??""}})),{initial:"unmount",exit:"unmount",animate:F?"mount":"unmount",variants:Se}),G)))))});P.propTypes={open:_.propTypesOpen,handler:_.propTypesHandler,content:_.propTypesContent,interactive:_.propTypesInteractive,placement:n.default.oneOf(_.propTypesPlacement),offset:_.propTypesOffset,dismiss:_.propTypesDismiss,animate:_.propTypesAnimate,className:_.propTypesClassName,children:_.propTypesChildren},P.displayName="MaterialTailwind.Tooltip";var N=P})(dP);var fP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,s){for(var h in s)Object.defineProperty(u,h,{enumerable:!0,get:s[h]})}t(e,{Typography:function(){return d},default:function(){return l}});var r=_(A),n=_(Fe),o=_(He),a=Le,i=_(Nt),c=_(Ie),p=Ne,g=Ig;function v(u,s,h){return s in u?Object.defineProperty(u,s,{value:h,enumerable:!0,configurable:!0,writable:!0}):u[s]=h,u}function _(u){return u&&u.__esModule?u:{default:u}}function O(u){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(u,m)&&(h[m]=u[m])}return h}function b(u,s){if(u==null)return{};var h={},m=Object.keys(u),w,E;for(E=0;E=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,s){var h=u.variant,m=u.color,w=u.textGradient,E=u.as,k=u.className,P=u.children,N=x(u,["variant","color","textGradient","as","className","children"]),j=(0,p.useTheme)().typography,I=j.defaultProps,F=j.valid,W=j.styles,G=W.variants,X=W.colors,H=W.textGradient;h=h??I.variant,m=m??I.color,w=w||I.textGradient,E=E??void 0,k=k??I.className;var B=(0,c.default)(G[(0,i.default)(F.variants,h,"paragraph")]),U=X[(0,i.default)(F.colors,m,"inherit")],K=(0,c.default)(H),Q=(0,a.twMerge)((0,o.default)(B,v({},U.color,!w),v({},K,w),v({},U.gradient,w)),k),ne;switch(h){case"h1":ne=r.default.createElement(E||"h1",T(O({},N),{ref:s,className:Q}),P);break;case"h2":ne=r.default.createElement(E||"h2",T(O({},N),{ref:s,className:Q}),P);break;case"h3":ne=r.default.createElement(E||"h3",T(O({},N),{ref:s,className:Q}),P);break;case"h4":ne=r.default.createElement(E||"h4",T(O({},N),{ref:s,className:Q}),P);break;case"h5":ne=r.default.createElement(E||"h5",T(O({},N),{ref:s,className:Q}),P);break;case"h6":ne=r.default.createElement(E||"h6",T(O({},N),{ref:s,className:Q}),P);break;case"lead":ne=r.default.createElement(E||"p",T(O({},N),{ref:s,className:Q}),P);break;case"paragraph":ne=r.default.createElement(E||"p",T(O({},N),{ref:s,className:Q}),P);break;case"small":ne=r.default.createElement(E||"p",T(O({},N),{ref:s,className:Q}),P);break;default:ne=r.default.createElement(E||"p",T(O({},N),{ref:s,className:Q}),P);break}return ne});d.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),as:g.propTypesAs,textGradient:g.propTypesTextGradient,className:g.propTypesClassName,children:g.propTypesChildren},d.displayName="MaterialTailwind.Typography";var l=d})(fP);var pP={},hP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,v){for(var _ in v)Object.defineProperty(g,_,{enumerable:!0,get:v[_]})}t(e,{propTypesClassName:function(){return a},propTypesChildren:function(){return i},propTypesOpen:function(){return c},propTypesAnimate:function(){return p}});var r=o(Fe),n=Pt;function o(g){return g&&g.__esModule?g:{default:g}}var a=r.default.string,i=r.default.node.isRequired,c=r.default.bool.isRequired,p=n.propTypesAnimation})(hP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{Collapse:function(){return x},default:function(){return b}});var r=O(A),n=ir,o=Zt,a=O(dr),i=O(He),c=Le,p=O(Ie),g=Ne,v=hP;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.open,s=d.animate,h=d.className,m=d.children,w=C(d,["open","animate","className","children"]),E=r.default.useRef(null),k=(0,g.useTheme)().collapse,P=k.styles,N=P.base;s=s??{},h=h??"";var j=(0,c.twMerge)((0,i.default)((0,p.default)(N)),h),I={unmount:{height:"0px",transition:{duration:.3,times:[.4,0,.2,1]}},mount:{height:"auto",transition:{duration:.3,times:[.4,0,.2,1]}}},F=(0,a.default)(I,s),W=n.AnimatePresence,G=(0,o.useMergeRefs)([l,E]);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(W,null,r.default.createElement(n.m.div,_({},w,{ref:G,className:j,initial:"unmount",exit:"unmount",animate:u?"mount":"unmount",variants:F}),m)))});x.displayName="MaterialTailwind.Collapse",x.propTypes={open:v.propTypesOpen,animate:v.propTypesAnimate,className:v.propTypesClassName,children:v.propTypesChildren};var b=x})(pP);var gP={},zs={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,v){for(var _ in v)Object.defineProperty(g,_,{enumerable:!0,get:v[_]})}t(e,{propTypesClassName:function(){return o},propTypesDisabled:function(){return a},propTypesSelected:function(){return i},propTypesRipple:function(){return c},propTypesChildren:function(){return p}});var r=n(Fe);function n(g){return g&&g.__esModule?g:{default:g}}var o=r.default.string,a=r.default.bool,i=r.default.bool,c=r.default.bool,p=r.default.node.isRequired})(zs);var bP={},xb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{ListItemPrefix:function(){return O},default:function(){return C}});var r=g(A),n=Ne,o=g(He),a=Le,i=g(Ie),c=zs;function p(){return p=Object.assign||function(T){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(T,d)&&(b[d]=T[d])}return b}function _(T,x){if(T==null)return{};var b={},d=Object.keys(T),l,u;for(u=0;u=0)&&(b[l]=T[l]);return b}var O=r.default.forwardRef(function(T,x){var b=T.className,d=T.children,l=v(T,["className","children"]),u=(0,n.useTheme)().list,s=u.styles.base,h=(0,a.twMerge)((0,o.default)((0,i.default)(s.itemPrefix)),b);return r.default.createElement("div",p({},l,{ref:x,className:h}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.ListItemPrefix";var C=O})(xb);var _b={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{ListItemSuffix:function(){return O},default:function(){return C}});var r=g(A),n=Ne,o=g(He),a=Le,i=g(Ie),c=zs;function p(){return p=Object.assign||function(T){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(T,d)&&(b[d]=T[d])}return b}function _(T,x){if(T==null)return{};var b={},d=Object.keys(T),l,u;for(u=0;u=0)&&(b[l]=T[l]);return b}var O=r.default.forwardRef(function(T,x){var b=T.className,d=T.children,l=v(T,["className","children"]),u=(0,n.useTheme)().list,s=u.styles.base,h=(0,a.twMerge)((0,o.default)((0,i.default)(s.itemSuffix)),b);return r.default.createElement("div",p({},l,{ref:x,className:h}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.ListItemSuffix";var C=O})(_b);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{ListItem:function(){return b},ListItemPrefix:function(){return g.ListItemPrefix},ListItemSuffix:function(){return v.ListItemSuffix},default:function(){return d}});var r=C(A),n=Ne,o=C(qi),a=C(He),i=Le,c=C(Ie),p=zs,g=xb,v=_b;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.className,h=l.disabled,m=l.selected,w=l.ripple,E=l.children,k=T(l,["className","disabled","selected","ripple","children"]),P=(0,n.useTheme)().list,N=P.defaultProps,j=P.styles.base;w=w??N.ripple;var I=w!==void 0&&new o.default,F,W=(0,i.twMerge)((0,a.default)((0,c.default)(j.item.initial),(F={},_(F,(0,c.default)(j.item.disabled),h),_(F,(0,c.default)(j.item.selected),m&&!h),F)),s);return r.default.createElement("div",O({},k,{ref:u,role:"button",tabIndex:0,className:W,onMouseDown:function(G){var X=k==null?void 0:k.onMouseDown;return w&&I.create(G,"dark"),typeof X=="function"&&X(G)}}),E)});b.propTypes={className:p.propTypesClassName,selected:p.propTypesSelected,disabled:p.propTypesDisabled,ripple:p.propTypesRipple,children:p.propTypesChildren},b.displayName="MaterialTailwind.ListItem";var d=Object.assign(b,{Prefix:g.ListItemPrefix,Suffix:v.ListItemSuffix})})(bP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{List:function(){return x},ListItem:function(){return p.ListItem},ListItemPrefix:function(){return g.ListItemPrefix},ListItemSuffix:function(){return v.ListItemSuffix},default:function(){return b}});var r=O(A),n=Ne,o=O(He),a=Le,i=O(Ie),c=zs,p=bP,g=xb,v=_b;function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.className,s=d.children,h=C(d,["className","children"]),m=(0,n.useTheme)().list,w=m.defaultProps,E=m.styles.base;u=u??w.className;var k=(0,a.twMerge)((0,o.default)((0,i.default)(E.list)),u);return r.default.createElement("nav",_({},h,{ref:l,className:k}),s)});x.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},x.displayName="MaterialTailwind.List";var b=Object.assign(x,{Item:p.ListItem,ItemPrefix:g.ListItemPrefix,ItemSuffix:v.ListItemSuffix})})(gP);var vP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,l){for(var u in l)Object.defineProperty(d,u,{enumerable:!0,get:l[u]})}t(e,{ButtonGroup:function(){return x},default:function(){return b}});var r=O(A),n=O(Fe),o=O(He),a=Le,i=O(Nt),c=O(Ie),p=Ne,g=Ma;function v(d,l,u){return l in d?Object.defineProperty(d,l,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[l]=u,d}function _(){return _=Object.assign||function(d){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(d,s)&&(u[s]=d[s])}return u}function T(d,l){if(d==null)return{};var u={},s=Object.keys(d),h,m;for(m=0;m=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,l){var u=d.variant,s=d.size,h=d.color,m=d.fullWidth,w=d.ripple,E=d.className,k=d.children,P=C(d,["variant","size","color","fullWidth","ripple","className","children"]),N=(0,p.useTheme)().buttonGroup,j=N.defaultProps,I=N.styles,F=N.valid,W=I.base,G=I.dividerColor;u=u??j.variant,s=s??j.size,h=h??j.color,w=w??j.ripple,m=m??j.fullWidth,E=E??j.className;var X,H=(0,a.twMerge)((0,o.default)((0,c.default)(W.initial),(X={},v(X,(0,c.default)(W.fullWidth),m),v(X,"divide-x",u!=="outlined"),v(X,(0,c.default)(G[(0,i.default)(F.colors,h,"gray")]),u!=="outlined"),X)),E);return r.default.createElement("div",_({},P,{ref:l,className:H}),r.default.Children.map(k,function(B,U){var K;return r.default.isValidElement(B)&&r.default.cloneElement(B,{variant:u,size:s,color:h,ripple:w,fullWidth:m,className:(0,a.twMerge)((0,o.default)({"rounded-r-none":U!==r.default.Children.count(k)-1,"border-r-0":U!==r.default.Children.count(k)-1,"rounded-l-none":U!==0}),(K=B.props)===null||K===void 0?void 0:K.className)})}))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),size:n.default.oneOf(g.propTypesSize),color:n.default.oneOf(g.propTypesColor),fullWidth:g.propTypesFullWidth,ripple:g.propTypesRipple,className:g.propTypesClassName,children:g.propTypesChildren},x.displayName="MaterialTailwind.ButtonGroup";var b=x})(vP);var mP={},yP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,x){for(var b in x)Object.defineProperty(T,b,{enumerable:!0,get:x[b]})}t(e,{propTypesClassName:function(){return o},propTypesPrevArrow:function(){return a},propTypesNextArrow:function(){return i},propTypesNavigation:function(){return c},propTypesAutoplay:function(){return p},propTypesAutoplayDelay:function(){return g},propTypesTransition:function(){return v},propTypesLoop:function(){return _},propTypesChildren:function(){return O},propTypesSlideRef:function(){return C}});var r=n(Fe);function n(T){return T&&T.__esModule?T:{default:T}}var o=r.default.string,a=r.default.func,i=r.default.func,c=r.default.func,p=r.default.bool,g=r.default.number,v=r.default.object,_=r.default.bool,O=r.default.node.isRequired,C=r.default.oneOfType([r.default.func,r.default.shape({current:r.default.any})])})(yP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,w){for(var E in w)Object.defineProperty(m,E,{enumerable:!0,get:w[E]})}t(e,{Carousel:function(){return s},default:function(){return h}});var r=C(A),n=ir,o=Zt,a=C(He),i=Le,c=C(Ie),p=Ne,g=yP;function v(m,w){(w==null||w>m.length)&&(w=m.length);for(var E=0,k=new Array(w);E=0)&&Object.prototype.propertyIsEnumerable.call(m,k)&&(E[k]=m[k])}return E}function d(m,w){if(m==null)return{};var E={},k=Object.keys(m),P,N;for(N=0;N=0)&&(E[P]=m[P]);return E}function l(m,w){return _(m)||T(m,w)||u(m,w)||x()}function u(m,w){if(m){if(typeof m=="string")return v(m,w);var E=Object.prototype.toString.call(m).slice(8,-1);if(E==="Object"&&m.constructor&&(E=m.constructor.name),E==="Map"||E==="Set")return Array.from(E);if(E==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(E))return v(m,w)}}var s=r.default.forwardRef(function(m,w){var E=m.children,k=m.prevArrow,P=m.nextArrow,N=m.navigation,j=m.autoplay,I=m.autoplayDelay,F=m.transition,W=m.loop,G=m.className,X=m.slideRef,H=b(m,["children","prevArrow","nextArrow","navigation","autoplay","autoplayDelay","transition","loop","className","slideRef"]),B=(0,p.useTheme)().carousel,U=B.defaultProps,K=B.styles.base,Q=(0,n.useMotionValue)(0),ne=r.default.useRef(null),ue=l(r.default.useState(0),2),le=ue[0],re=ue[1],be=r.default.Children.toArray(E);G=G??U.className,k=k??U.prevArrow,P=P??U.nextArrow,N=N??U.navigation,j=j??U.autoplay,I=I??U.autoplayDelay,F=F??U.transition,W=W??U.loop;var fe=(0,i.twMerge)((0,a.default)((0,c.default)(K.carousel)),G),ie=(0,i.twMerge)((0,a.default)((0,c.default)(K.slide))),pe=r.default.useCallback(function(){var Ce;return-le*(((Ce=ne.current)===null||Ce===void 0?void 0:Ce.clientWidth)||0)},[le]),ce=r.default.useCallback(function(){var Ce=W?0:le;re(le+1===be.length?Ce:le+1)},[le,W,be.length]),Oe=function(){var Ce=W?be.length-1:0;re(le-1<0?Ce:le-1)};r.default.useEffect(function(){var Ce=(0,n.animate)(Q,pe(),F);return Ce.stop},[pe,le,Q,F]),r.default.useEffect(function(){window.addEventListener("resize",function(){(0,n.animate)(Q,pe(),F)})},[pe,F,Q]),r.default.useEffect(function(){if(j){var Ce=setInterval(function(){return ce()},I);return function(){return clearInterval(Ce)}}},[j,ce,I]);var Se=(0,o.useMergeRefs)([ne,w]);return r.default.createElement("div",O({},H,{ref:Se,className:fe}),be.map(function(Ce,_e){return r.default.createElement(n.LazyMotion,{key:_e,features:n.domAnimation},r.default.createElement(n.m.div,{ref:X,className:ie,style:{x:Q,left:"".concat(_e*100,"%"),right:"".concat(_e*100,"%")}},Ce))}),k&&k({loop:W,handlePrev:Oe,activeIndex:le,firstIndex:le===0}),P&&P({loop:W,handleNext:ce,activeIndex:le,lastIndex:le===be.length-1}),N&&N({setActiveIndex:re,activeIndex:le,length:be.length}))});s.propTypes={className:g.propTypesClassName,children:g.propTypesChildren,nextArrow:g.propTypesNextArrow,prevArrow:g.propTypesPrevArrow,navigation:g.propTypesNavigation,autoplay:g.propTypesAutoplay,autoplayDelay:g.propTypesAutoplayDelay,transition:g.propTypesTransition,loop:g.propTypesLoop,slideRef:g.propTypesSlideRef},s.displayName="MaterialTailwind.Carousel";var h=s})(mP);var wP={},xP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{propTypesOpen:function(){return a},propTypesSize:function(){return i},propTypesOverlay:function(){return c},propTypesChildren:function(){return p},propTypesPlacement:function(){return g},propTypesOverlayProps:function(){return v},propTypesClassName:function(){return _},propTypesOnClose:function(){return O},propTypesDismiss:function(){return C},propTypesTransition:function(){return T},propTypesOverlayRef:function(){return x}});var r=o(Fe),n=Pt;function o(b){return b&&b.__esModule?b:{default:b}}var a=r.default.bool.isRequired,i=r.default.number,c=r.default.bool,p=r.default.node.isRequired,g=["top","right","bottom","left"],v=r.default.object,_=r.default.string,O=r.default.func,C=n.propTypesDismissType,T=r.default.object,x=r.default.oneOfType([r.default.func,r.default.shape({current:r.default.any})])})(xP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{Drawer:function(){return l},default:function(){return u}});var r=T(A),n=T(Fe),o=ir,a=Zt,i=T(dr),c=T(He),p=Le,g=T(Ie),v=Ne,_=xP;function O(s,h,m){return h in s?Object.defineProperty(s,h,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[h]=m,s}function C(){return C=Object.assign||function(s){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(s,w)&&(m[w]=s[w])}return m}function d(s,h){if(s==null)return{};var m={},w=Object.keys(s),E,k;for(k=0;k=0)&&(m[E]=s[E]);return m}var l=r.default.forwardRef(function(s,h){var m=s.open,w=s.size,E=s.overlay,k=s.children,P=s.placement,N=s.overlayProps,j=s.className,I=s.onClose,F=s.dismiss,W=s.transition,G=s.overlayRef,X=b(s,["open","size","overlay","children","placement","overlayProps","className","onClose","dismiss","transition","overlayRef"]),H=(0,v.useTheme)().drawer,B=H.defaultProps,U=H.styles.base,K=(0,o.useAnimation)();w=w??B.size,E=E??B.overlay,P=P??B.placement,j=j??B.className,N=N??B.overlayProps,I=I??B.onClose;var Q;F=(Q=(0,i.default)(B.dismiss,F||{}))!==null&&Q!==void 0?Q:B.dismiss,W=W??B.transition;var ne=(0,p.twMerge)((0,c.default)((0,g.default)(U.drawer),{"top-0 right-0":P==="right","bottom-0 left-0":P==="bottom","top-0 left-0":P==="top"||P==="left"}),j),ue=(0,p.twMerge)((0,c.default)((0,g.default)(U.overlay)),N==null?void 0:N.className),le=(0,a.useFloating)({open:m,onOpenChange:I}).context,re=(0,a.useInteractions)([(0,a.useDismiss)(le,F)]).getFloatingProps;r.default.useEffect(function(){K.start(m?"open":"close")},[m,K,P]);var be={open:{x:0,y:0},close:{x:P==="left"?-w:P==="right"?w:0,y:P==="top"?-w:P==="bottom"?w:0}},fe={unmount:{opacity:0,transition:{delay:.3}},mount:{opacity:1}};return r.default.createElement(r.default.Fragment,null,r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(o.AnimatePresence,null,E&&m&&r.default.createElement(o.m.div,{ref:G,className:ue,initial:"unmount",exit:"unmount",animate:m?"mount":"unmount",variants:fe,transition:{duration:.3}})),r.default.createElement(o.m.div,C({},re(x({ref:h},X)),{className:ne,style:{maxWidth:P==="left"||P==="right"?w:"100%",maxHeight:P==="top"||P==="bottom"?w:"100%",height:P==="left"||P==="right"?"100vh":"100%"},initial:"close",animate:K,variants:be,transition:W}),k)))});l.propTypes={open:_.propTypesOpen,size:_.propTypesSize,overlay:_.propTypesOverlay,children:_.propTypesChildren,placement:n.default.oneOf(_.propTypesPlacement),overlayProps:_.propTypesOverlayProps,className:_.propTypesClassName,onClose:_.propTypesOnClose,dismiss:_.propTypesDismiss,transition:_.propTypesTransition,overlayRef:_.propTypesOverlayRef},l.displayName="MaterialTailwind.Drawer";var u=l})(wP);var _P={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Badge:function(){return b},default:function(){return d}});var r=C(A),n=C(Fe),o=C(dr),a=C(He),i=Le,c=C(Nt),p=C(Ie),g=Ne,v=Dg;function _(l,u,s){return u in l?Object.defineProperty(l,u,{value:s,enumerable:!0,configurable:!0,writable:!0}):l[u]=s,l}function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.color,h=l.invisible,m=l.withBorder,w=l.overlap,E=l.placement,k=l.className,P=l.content,N=l.children,j=l.containerProps,I=l.containerRef,F=T(l,["color","invisible","withBorder","overlap","placement","className","content","children","containerProps","containerRef"]),W=(0,g.useTheme)().badge,G=W.valid,X=W.defaultProps,H=W.styles,B=H.base,U=H.placements,K=H.colors;s=s??X.color,h=h??X.invisible,m=m??X.withBorder,w=w??X.overlap,E=E??X.placement;var Q;k=(Q=(0,a.default)(k,X.className))!==null&&Q!==void 0?Q:X.className;var ne;j=(ne=(0,o.default)(j,X.containerProps||{}))!==null&&ne!==void 0?ne:X.containerProps;var ue=(0,p.default)(B.badge.initial),le=(0,p.default)(B.badge.withBorder),re=(0,p.default)(B.badge.withContent),be=(0,p.default)(K[(0,c.default)(G.colors,s,"red")]),fe=(0,p.default)(U[(0,c.default)(G.placements,E,"top-end")][(0,c.default)(G.overlaps,w,"square")]),ie,pe=(0,i.twMerge)((0,a.default)(ue,fe,be,(ie={},_(ie,le,m),_(ie,re,P),ie)),k),ce=(0,i.twMerge)((0,a.default)((0,p.default)(B.container),j==null?void 0:j.className));return r.default.createElement("div",O({ref:I},j,{className:ce}),N,!h&&r.default.createElement("span",O({},F,{ref:u,className:pe}),P))});b.propTypes={color:n.default.oneOf(v.propTypesColor),invisible:v.propTypesInvisible,withBorder:v.propTypesWithBorder,overlap:n.default.oneOf(v.propTypesOverlap),className:v.propTypesClassName,content:v.propTypesContent,children:v.propTypesChildren,placement:n.default.oneOf(v.propTypesPlacement),containerProps:v.propTypesContainerProps,containerRef:v.propTypesContainerRef},b.displayName="MaterialTailwind.Badge";var d=b})(_P);var TP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(P,N){for(var j in N)Object.defineProperty(P,j,{enumerable:!0,get:N[j]})}t(e,{Rating:function(){return E},default:function(){return k}});var r=T(A),n=T(Fe),o=T(He),a=Le,i=T(Nt),c=T(Ie),p=Ne,g=Lg;function v(P,N){(N==null||N>P.length)&&(N=P.length);for(var j=0,I=new Array(N);j=0)&&Object.prototype.propertyIsEnumerable.call(P,I)&&(j[I]=P[I])}return j}function s(P,N){if(P==null)return{};var j={},I=Object.keys(P),F,W;for(W=0;W=0)&&(j[F]=P[F]);return j}function h(P,N){return _(P)||b(P,N)||w(P,N)||d()}function m(P){return O(P)||x(P)||w(P)||l()}function w(P,N){if(P){if(typeof P=="string")return v(P,N);var j=Object.prototype.toString.call(P).slice(8,-1);if(j==="Object"&&P.constructor&&(j=P.constructor.name),j==="Map"||j==="Set")return Array.from(j);if(j==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(j))return v(P,N)}}var E=r.default.forwardRef(function(P,N){var j=P.count,I=P.value,F=P.ratedIcon,W=P.unratedIcon,G=P.ratedColor,X=P.unratedColor,H=P.className,B=P.onChange,U=P.readonly,K=u(P,["count","value","ratedIcon","unratedIcon","ratedColor","unratedColor","className","onChange","readonly"]),Q,ne,ue=(0,p.useTheme)().rating,le=ue.valid,re=ue.defaultProps,be=ue.styles,fe=be.base,ie=be.colors;j=j??re.count,I=I??re.value,F=F??re.ratedIcon,F=F??re.ratedIcon,W=W??re.unratedIcon,G=G??re.ratedColor,X=X??re.unratedColor,H=H??re.className,B=B??re.onChange,U=U??re.readonly;var pe=h(r.default.useState(function(){return m(Array(I).fill("rated")).concat(m(Array(j-I).fill("un_rated")))}),2),ce=pe[0],Oe=pe[1],Se=h(r.default.useState(function(){return m(Array(j).fill("un_rated"))}),2),Ce=Se[0],_e=Se[1],je=h(r.default.useState(!1),2),Ge=je[0],nt=je[1],ut=(0,c.default)(ie[(0,i.default)(le.colors,G,"yellow")]),ot=(0,c.default)(ie[(0,i.default)(le.colors,X,"blue-gray")]),pt=(0,a.twMerge)((0,o.default)((0,c.default)(fe.rating),H)),We=(0,c.default)(fe.icon),xt=F,Ke=W,ae=r.default.isValidElement(F)&&r.default.cloneElement(xt,{className:(0,a.twMerge)((0,o.default)(We,ut,xt==null||(Q=xt.props)===null||Q===void 0?void 0:Q.className))}),ge=r.default.isValidElement(F)&&r.default.cloneElement(Ke,{className:(0,a.twMerge)((0,o.default)(We,ot,Ke==null||(ne=Ke.props)===null||ne===void 0?void 0:ne.className))}),Ae=!r.default.isValidElement(F)&&r.default.createElement(F,{className:(0,a.twMerge)((0,o.default)(We,ut))}),Me=!r.default.isValidElement(F)&&r.default.createElement(W,{className:(0,a.twMerge)((0,o.default)(We,ot))}),ve=function(Te){return Te.map(function($e,lt){return r.default.createElement("span",{key:lt,onClick:function(){if(!U){var ht=ce.map(function(zt,Xe){return Xe<=lt?"rated":"un_rated"});Oe(ht),B&&typeof B=="function"&&B(ht.filter(function(zt){return zt==="rated"}).length)}},onMouseEnter:function(){if(!U){var ht=Ce.map(function(zt,Xe){return Xe<=lt?"rated":"un_rated"});nt(!0),_e(ht)}},onMouseLeave:function(){return!U&&nt(!1)}},r.default.isValidElement($e==="rated"?F:W)?$e==="rated"?ae:ge:$e==="rated"?Ae:Me)})};return r.default.createElement("div",C({},K,{ref:N,className:pt}),ve(Ge?Ce:ce))});E.propTypes={count:g.propTypesCount,value:g.propTypesValue,ratedIcon:g.propTypesRatedIcon,unratedIcon:g.propTypesUnratedIcon,ratedColor:n.default.oneOf(g.propTypesColor),unratedColor:n.default.oneOf(g.propTypesColor),className:g.propTypesClassName,onChange:g.propTypesOnChange,readonly:g.propTypesReadonly},E.displayName="MaterialTailwind.Rating";var k=E})(TP);var CP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(w,E){for(var k in E)Object.defineProperty(w,k,{enumerable:!0,get:E[k]})}t(e,{Slider:function(){return h},default:function(){return m}});var r=T(A),n=T(Fe),o=T(dr),a=T(He),i=Le,c=T(Nt),p=T(Ie),g=Ne,v=Fg;function _(w,E){(E==null||E>w.length)&&(E=w.length);for(var k=0,P=new Array(E);k=0)&&Object.prototype.propertyIsEnumerable.call(w,P)&&(k[P]=w[P])}return k}function l(w,E){if(w==null)return{};var k={},P=Object.keys(w),N,j;for(j=0;j=0)&&(k[N]=w[N]);return k}function u(w,E){return O(w)||x(w,E)||s(w,E)||b()}function s(w,E){if(w){if(typeof w=="string")return _(w,E);var k=Object.prototype.toString.call(w).slice(8,-1);if(k==="Object"&&w.constructor&&(k=w.constructor.name),k==="Map"||k==="Set")return Array.from(k);if(k==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(k))return _(w,E)}}var h=r.default.forwardRef(function(w,E){var k=w.color,P=w.size,N=w.className,j=w.trackClassName,I=w.thumbClassName,F=w.barClassName,W=w.value,G=w.defaultValue,X=w.onChange,H=w.min,B=w.max,U=w.step,K=w.inputRef,Q=w.inputProps,ne=d(w,["color","size","className","trackClassName","thumbClassName","barClassName","value","defaultValue","onChange","min","max","step","inputRef","inputProps"]),ue=(0,g.useTheme)().slider,le=ue.valid,re=ue.defaultProps,be=ue.styles,fe=be.base,ie=be.sizes,pe=be.colors,ce=u(r.default.useState(G||0),2),Oe=ce[0],Se=ce[1];r.default.useMemo(function(){G&&Se(G)},[G]),k=k??re.color,P=P??re.size,H=H??re.min,B=B??re.max,U=U??re.step;var Ce;N=(Ce=(0,a.default)(re.className,N))!==null&&Ce!==void 0?Ce:re.className;var _e;I=(_e=(0,a.default)(re.thumbClassName,I))!==null&&_e!==void 0?_e:re.thumbClassName;var je;j=(je=(0,a.default)(re.trackClassName,j))!==null&&je!==void 0?je:re.trackClassName;var Ge;F=(Ge=(0,a.default)(re.barClassName,F))!==null&&Ge!==void 0?Ge:re.barClassName;var nt;Q=(nt=(0,o.default)(Q,(re==null?void 0:re.inputProps)||{}))!==null&&nt!==void 0?nt:re.inputProps;var ut=(0,i.twMerge)((0,a.default)((0,p.default)(fe.container),(0,p.default)(pe[(0,c.default)(le.colors,k,"gray")]),(0,p.default)(ie[(0,c.default)(le.sizes,P,"md")].container),N)),ot=(0,i.twMerge)((0,a.default)((0,p.default)(fe.bar),F)),pt=(0,a.default)((0,p.default)(fe.track),(0,p.default)(ie[(0,c.default)(le.sizes,P,"md")].track)),We=(0,a.default)((0,p.default)(fe.thumb),(0,p.default)(ie[(0,c.default)(le.sizes,P,"md")].thumb)),xt=(0,a.default)((0,p.default)(fe.slider),(0,i.twMerge)(pt,j),(0,i.twMerge)(We,I));return r.default.createElement("div",C({},ne,{ref:E,className:ut}),r.default.createElement("label",{className:ot,style:{width:"".concat(W||Oe,"%")}}),r.default.createElement("input",C({ref:K,type:"range",max:B,min:H,step:U,className:xt},W?{value:W}:null,{defaultValue:G,onChange:function(Ke){return X?X(Ke):Se(Number(Ke.target.value))}})))});h.propTypes={color:n.default.oneOf(v.propTypesColor),size:n.default.oneOf(v.propTypesSize),className:v.propTypesClassName,trackClassName:v.propTypesTrackClassName,thumbClassName:v.propTypesThumbClassName,barClassName:v.propTypesBarClassName,defaultValue:v.propTypesDefaultValue,value:v.propTypesValue,onChange:v.propTypesOnChange,min:v.propTypesMin,max:v.propTypesMax,step:v.propTypesStep,inputRef:v.propTypesInputRef,inputProps:v.propTypesInputProps},h.displayName="MaterialTailwind.Slider";var m=h})(CP);var OP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Spinner:function(){return b},default:function(){return d}});var r=_(Fe),n=C(A),o=_(He),a=Le,i=_(Nt),c=_(Ie),p=Ne,g=Vg;function v(){return v=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=(0,n.forwardRef)(function(l,u){var s=l.color,h=l.className,m=T(l,["color","className"]),w=(0,p.useTheme)().spinner,E=w.defaultProps,k=w.valid,P=w.styles,N=P.base,j=P.colors;s=s??E.color;var I;h=(I=(0,o.default)(E.className,h))!==null&&I!==void 0?I:E.className;var F=(0,c.default)(j[(0,i.default)(k.colors,s,"gray")]),W=(0,a.twMerge)((0,o.default)((0,c.default)(N)),h),G,X;return n.default.createElement("svg",v({},m,{ref:u,className:W,viewBox:"0 0 64 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:(G=m==null?void 0:m.width)!==null&&G!==void 0?G:24,height:(X=m==null?void 0:m.height)!==null&&X!==void 0?X:24}),n.default.createElement("path",{d:"M32 3C35.8083 3 39.5794 3.75011 43.0978 5.20749C46.6163 6.66488 49.8132 8.80101 52.5061 11.4939C55.199 14.1868 57.3351 17.3837 58.7925 20.9022C60.2499 24.4206 61 28.1917 61 32C61 35.8083 60.2499 39.5794 58.7925 43.0978C57.3351 46.6163 55.199 49.8132 52.5061 52.5061C49.8132 55.199 46.6163 57.3351 43.0978 58.7925C39.5794 60.2499 35.8083 61 32 61C28.1917 61 24.4206 60.2499 20.9022 58.7925C17.3837 57.3351 14.1868 55.199 11.4939 52.5061C8.801 49.8132 6.66487 46.6163 5.20749 43.0978C3.7501 39.5794 3 35.8083 3 32C3 28.1917 3.75011 24.4206 5.2075 20.9022C6.66489 17.3837 8.80101 14.1868 11.4939 11.4939C14.1868 8.80099 17.3838 6.66487 20.9022 5.20749C24.4206 3.7501 28.1917 3 32 3L32 3Z",stroke:"currentColor",strokeWidth:"5",strokeLinecap:"round",strokeLinejoin:"round"}),n.default.createElement("path",{d:"M32 3C36.5778 3 41.0906 4.08374 45.1692 6.16256C49.2477 8.24138 52.7762 11.2562 55.466 14.9605C58.1558 18.6647 59.9304 22.9531 60.6448 27.4748C61.3591 31.9965 60.9928 36.6232 59.5759 40.9762",stroke:"currentColor",strokeWidth:"5",strokeLinecap:"round",strokeLinejoin:"round",className:F}))});b.propTypes={color:r.default.oneOf(g.propTypesColor),className:g.propTypesClassName},b.displayName="MaterialTailwind.Spinner";var d=b})(OP);var SP={},Bs={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,m){for(var w in m)Object.defineProperty(h,w,{enumerable:!0,get:m[w]})}t(e,{useTimelineItem:function(){return l},TimelineItem:function(){return u},default:function(){return s}});var r=v(A),n=Le,o=v(Ie),a=Ne,i=so;function c(h,m){(m==null||m>h.length)&&(m=h.length);for(var w=0,E=new Array(m);w=0)&&Object.prototype.propertyIsEnumerable.call(h,E)&&(w[E]=h[E])}return w}function T(h,m){if(h==null)return{};var w={},E=Object.keys(h),k,P;for(P=0;P=0)&&(w[k]=h[k]);return w}function x(h,m){return p(h)||_(h,m)||b(h,m)||O()}function b(h,m){if(h){if(typeof h=="string")return c(h,m);var w=Object.prototype.toString.call(h).slice(8,-1);if(w==="Object"&&h.constructor&&(w=h.constructor.name),w==="Map"||w==="Set")return Array.from(w);if(w==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(w))return c(h,m)}}var d=r.default.createContext(0);d.displayName="MaterialTailwind.TimelineItemContext";function l(){var h=r.default.useContext(d);if(!h)throw new Error("useTimelineItemContext() must be used within a TimelineItem. It happens when you use TimelineIcon, TimelineConnector or TimelineBody components outside the TimelineItem component.");return h}var u=r.default.forwardRef(function(h,m){var w=h.className,E=h.children,k=C(h,["className","children"]),P=(0,a.useTheme)().timelineItem,N=P.styles,j=N.base,I=x(r.default.useState(0),2),F=I[0],W=I[1],G=r.default.useMemo(function(){return[F,W]},[F,W]),X=(0,n.twMerge)((0,o.default)(j),w);return r.default.createElement(d.Provider,{value:G},r.default.createElement("li",g({ref:m},k,{className:X}),E))});u.propTypes={className:i.propTypeClassName,children:i.propTypeChildren.isRequired},u.displayName="MaterialTailwind.TimelineItem";var s=u})(Bs);var PP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(w,E){for(var k in E)Object.defineProperty(w,k,{enumerable:!0,get:E[k]})}t(e,{TimelineIcon:function(){return h},default:function(){return m}});var r=T(A),n=T(Fe),o=Zt,a=Le,i=T(Nt),c=T(Ie),p=Ne,g=Bs,v=so;function _(w,E){(E==null||E>w.length)&&(E=w.length);for(var k=0,P=new Array(E);k=0)&&Object.prototype.propertyIsEnumerable.call(w,P)&&(k[P]=w[P])}return k}function l(w,E){if(w==null)return{};var k={},P=Object.keys(w),N,j;for(j=0;j=0)&&(k[N]=w[N]);return k}function u(w,E){return O(w)||x(w,E)||s(w,E)||b()}function s(w,E){if(w){if(typeof w=="string")return _(w,E);var k=Object.prototype.toString.call(w).slice(8,-1);if(k==="Object"&&w.constructor&&(k=w.constructor.name),k==="Map"||k==="Set")return Array.from(k);if(k==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(k))return _(w,E)}}var h=r.default.forwardRef(function(w,E){var k=w.color,P=w.variant,N=w.className,j=w.children,I=d(w,["color","variant","className","children"]),F=(0,p.useTheme)().timelineIcon,W=F.styles,G=F.valid,X=W.base,H=W.variants,B=u((0,g.useTimelineItem)(),2),U=B[1],K=r.default.useRef(null),Q=(0,o.useMergeRefs)([E,K]);r.default.useEffect(function(){var le=K.current;if(le){var re=le.getBoundingClientRect().width;return U(re),function(){U(0)}}},[U,N,j]);var ne=(0,c.default)(H[(0,i.default)(G.variants,P,"filled")][(0,i.default)(G.colors,k,"gray")]),ue=(0,a.twMerge)((0,c.default)(X),ne,N);return r.default.createElement("span",C({ref:Q},I,{className:ue}),j)});h.propTypes={children:v.propTypeChildren,className:v.propTypeClassName,color:n.default.oneOf(v.propTypeColor),variant:n.default.oneOf(v.propTypeVariant)},h.displayName="MaterialTailwind.TimelineIcon";var m=h})(PP);var kP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{TimelineHeader:function(){return l},default:function(){return u}});var r=_(A),n=Le,o=_(Ie),a=Ne,i=Bs,c=so;function p(s,h){(h==null||h>s.length)&&(h=s.length);for(var m=0,w=new Array(h);m=0)&&Object.prototype.propertyIsEnumerable.call(s,w)&&(m[w]=s[w])}return m}function x(s,h){if(s==null)return{};var m={},w=Object.keys(s),E,k;for(k=0;k=0)&&(m[E]=s[E]);return m}function b(s,h){return g(s)||O(s,h)||d(s,h)||C()}function d(s,h){if(s){if(typeof s=="string")return p(s,h);var m=Object.prototype.toString.call(s).slice(8,-1);if(m==="Object"&&s.constructor&&(m=s.constructor.name),m==="Map"||m==="Set")return Array.from(m);if(m==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(m))return p(s,h)}}var l=r.default.forwardRef(function(s,h){var m=s.className,w=s.children,E=T(s,["className","children"]),k=(0,a.useTheme)().timelineBody,P=k.styles,N=P.base,j=b((0,i.useTimelineItem)(),1),I=j[0],F=(0,n.twMerge)((0,o.default)(N),m);return r.default.createElement("div",v({},E,{ref:h,className:F}),r.default.createElement("span",{className:"pointer-events-none invisible h-full flex-shrink-0",style:{width:"".concat(I,"px")}}),r.default.createElement("div",null,w))});l.propTypes={children:c.propTypeChildren,className:c.propTypeClassName},l.displayName="MaterialTailwind.TimelineHeader";var u=l})(kP);var EP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{TimelineHeader:function(){return _},default:function(){return O}});var r=p(A),n=Le,o=p(Ie),a=Ne,i=so;function c(){return c=Object.assign||function(C){for(var T=1;T=0)&&Object.prototype.propertyIsEnumerable.call(C,b)&&(x[b]=C[b])}return x}function v(C,T){if(C==null)return{};var x={},b=Object.keys(C),d,l;for(l=0;l=0)&&(x[d]=C[d]);return x}var _=r.default.forwardRef(function(C,T){var x=C.className,b=C.children,d=g(C,["className","children"]),l=(0,a.useTheme)().timelineHeader,u=l.styles,s=u.base,h=(0,n.twMerge)((0,o.default)(s),x);return r.default.createElement("div",c({},d,{ref:T,className:h}),b)});_.propTypes={children:i.propTypeChildren,className:i.propTypeClassName},_.displayName="MaterialTailwind.TimelineHeader";var O=_})(EP);var RP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,h){for(var m in h)Object.defineProperty(s,m,{enumerable:!0,get:h[m]})}t(e,{TimelineConnector:function(){return l},default:function(){return u}});var r=_(A),n=Le,o=_(Ie),a=Ne,i=Bs,c=so;function p(s,h){(h==null||h>s.length)&&(h=s.length);for(var m=0,w=new Array(h);m=0)&&Object.prototype.propertyIsEnumerable.call(s,w)&&(m[w]=s[w])}return m}function x(s,h){if(s==null)return{};var m={},w=Object.keys(s),E,k;for(k=0;k=0)&&(m[E]=s[E]);return m}function b(s,h){return g(s)||O(s,h)||d(s,h)||C()}function d(s,h){if(s){if(typeof s=="string")return p(s,h);var m=Object.prototype.toString.call(s).slice(8,-1);if(m==="Object"&&s.constructor&&(m=s.constructor.name),m==="Map"||m==="Set")return Array.from(m);if(m==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(m))return p(s,h)}}var l=r.default.forwardRef(function(s,h){var m=s.className,w=s.children,E=T(s,["className","children"]),k,P=(0,a.useTheme)().timelineConnector,N=P.styles,j=N.base,I=b((0,i.useTimelineItem)(),1),F=I[0],W=(0,o.default)(j.line),G=(0,n.twMerge)((0,o.default)(j.container),m);return r.default.createElement("span",v({},E,{ref:h,className:G,style:{top:"".concat(F,"px"),width:"".concat(F,"px"),opacity:F?1:0,height:"calc(100% - ".concat(F,"px)")}}),w&&r.default.isValidElement(w)?r.default.cloneElement(w,{className:(0,n.twMerge)(W,(k=w.props)===null||k===void 0?void 0:k.className)}):r.default.createElement("span",{className:W}))});l.propTypes={children:c.propTypeChildren,className:c.propTypeClassName},l.displayName="MaterialTailwind.TimelineConnector";var u=l})(RP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,u){for(var s in u)Object.defineProperty(l,s,{enumerable:!0,get:u[s]})}t(e,{Timeline:function(){return b},TimelineItem:function(){return c.default},TimelineIcon:function(){return p.default},TimelineBody:function(){return g.default},TimelineHeader:function(){return v.default},TimelineConnector:function(){return _.default},default:function(){return d}});var r=C(A),n=Le,o=C(Ie),a=Ne,i=so,c=C(Bs),p=C(PP),g=C(kP),v=C(EP),_=C(RP);function O(){return O=Object.assign||function(l){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(l,h)&&(s[h]=l[h])}return s}function x(l,u){if(l==null)return{};var s={},h=Object.keys(l),m,w;for(w=0;w=0)&&(s[m]=l[m]);return s}var b=r.default.forwardRef(function(l,u){var s=l.className,h=l.children,m=T(l,["className","children"]),w=(0,a.useTheme)().timeline,E=w.styles,k=E.base,P=(0,n.twMerge)((0,o.default)(k),s);return r.default.createElement("ul",O({ref:u},m,{className:P}),h)});b.propTypes={className:i.propTypeClassName,children:i.propTypeChildren},b.displayName="MaterialTailwind.Timeline";var d=Object.assign(b,{Item:c.default,Icon:p.default,Header:v.default,Body:g.default,Connector:_.default})})(SP);var NP={},jP={},Tb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,v){for(var _ in v)Object.defineProperty(g,_,{enumerable:!0,get:v[_]})}t(e,{propTypesActiveStep:function(){return o},propTypesIsLastStep:function(){return a},propTypesIsFirstStep:function(){return i},propTypesChildren:function(){return c},propTypesClassName:function(){return p}});var r=n(Fe);function n(g){return g&&g.__esModule?g:{default:g}}var o=r.default.number,a=r.default.func,i=r.default.func,c=r.default.node,p=r.default.string})(Tb);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{Step:function(){return _},default:function(){return O}});var r=p(A),n=Le,o=p(Ie),a=Ne,i=Tb;function c(){return c=Object.assign||function(C){for(var T=1;T=0)&&Object.prototype.propertyIsEnumerable.call(C,b)&&(x[b]=C[b])}return x}function v(C,T){if(C==null)return{};var x={},b=Object.keys(C),d,l;for(l=0;l=0)&&(x[d]=C[d]);return x}var _=r.default.forwardRef(function(C,T){var x=C.className;C.activeClassName,C.completedClassName;var b=C.children,d=g(C,["className","activeClassName","completedClassName","children"]),l=(0,a.useTheme)().step,u=l.styles.base,s=(0,n.twMerge)((0,o.default)(u.initial),x);return r.default.createElement("div",c({},d,{ref:T,className:s}),b)});_.propTypes={className:i.propTypesClassName,activeClassName:i.propTypesClassName,completedClassName:i.propTypesClassName,children:i.propTypesChildren},_.displayName="MaterialTailwind.Step";var O=_})(jP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(k,P){for(var N in P)Object.defineProperty(k,N,{enumerable:!0,get:P[N]})}t(e,{Stepper:function(){return w},Step:function(){return c.default},default:function(){return E}});var r=C(A),n=Zt,o=Le,a=C(Ie),i=Ne,c=C(jP),p=Tb;function g(k,P){(P==null||P>k.length)&&(P=k.length);for(var N=0,j=new Array(P);N=0)&&Object.prototype.propertyIsEnumerable.call(k,j)&&(N[j]=k[j])}return N}function s(k,P){if(k==null)return{};var N={},j=Object.keys(k),I,F;for(F=0;F=0)&&(N[I]=k[I]);return N}function h(k,P){return v(k)||T(k,P)||m(k,P)||x()}function m(k,P){if(k){if(typeof k=="string")return g(k,P);var N=Object.prototype.toString.call(k).slice(8,-1);if(N==="Object"&&k.constructor&&(N=k.constructor.name),N==="Map"||N==="Set")return Array.from(N);if(N==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(N))return g(k,P)}}var w=r.default.forwardRef(function(k,P){var N=k.activeStep,j=k.isFirstStep,I=k.isLastStep,F=k.className,W=k.lineClassName,G=k.activeLineClassName,X=k.children,H=u(k,["activeStep","isFirstStep","isLastStep","className","lineClassName","activeLineClassName","children"]),B=(0,i.useTheme)(),U=B.stepper,K=B.step,Q=U.styles.base,ne=K.styles,ue=ne.base,le=r.default.useRef(null),re=h(r.default.useState(0),2),be=re[0],fe=re[1],ie=N===0,pe=Array.isArray(X)&&N===X.length-1,ce=Array.isArray(X)&&N>X.length-1;r.default.useEffect(function(){if(le.current){var nt=X,ut=le.current.getBoundingClientRect().width,ot=ut/(nt.length-1);fe(ot)}},[X]);var Oe=r.default.useMemo(function(){if(!ce)return be*N},[N,ce,be]);(0,n.useMergeRefs)([P,le]);var Se=(0,o.twMerge)((0,a.default)(Q.stepper),F),Ce=(0,o.twMerge)((0,a.default)(Q.line.initial),W),_e=(0,o.twMerge)(Ce,(0,a.default)(Q.line.active),G),je=(0,a.default)(ue.active),Ge=(0,a.default)(ue.completed);return r.default.useEffect(function(){I&&typeof I=="function"&&I(pe),j&&typeof j=="function"&&j(ie)},[j,ie,I,pe]),r.default.createElement("div",O({},H,{ref:le,className:Se}),r.default.createElement("div",{className:Ce}),r.default.createElement("div",{className:_e,style:{width:"".concat(Oe,"px")}}),Array.isArray(X)?X.map(function(nt,ut){var ot,pt;return r.default.cloneElement(nt,l(b({key:ut},nt.props),{className:(0,o.twMerge)(nt.props.className,ut===N?(0,o.twMerge)(je,(ot=nt.props)===null||ot===void 0?void 0:ot.activeClassName):ut=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.children,u=O(b,["children"]),s,h=(0,o.useSpeedDial)(),m=h.getReferenceProps,w=h.refs,E=(0,n.useMergeRefs)([d,w.setReference]);return r.default.cloneElement(l,g({},m(_(g({},u),{ref:E,className:(0,a.twMerge)(l==null||(s=l.props)===null||s===void 0?void 0:s.className,u==null?void 0:u.className)}))))});T.propTypes={children:i.propTypesChildren},T.displayName="MaterialTailwind.SpeedDialHandler";var x=T}(Np)),Np}var jp={},Yw;function _3(){return Yw||(Yw=1,function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,d){for(var l in d)Object.defineProperty(b,l,{enumerable:!0,get:d[l]})}t(e,{SpeedDialContent:function(){return T},default:function(){return x}});var r=_(A),n=ir,o=Zt,a=Cb(),i=Ne,c=Le,p=_(Ie),g=Ws;function v(){return v=Object.assign||function(b){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(b,u)&&(l[u]=b[u])}return l}function C(b,d){if(b==null)return{};var l={},u=Object.keys(b),s,h;for(h=0;h=0)&&(l[s]=b[s]);return l}var T=r.default.forwardRef(function(b,d){var l=b.children,u=b.className,s=O(b,["children","className"]),h=(0,i.useTheme)(),m=h.speedDialContent.styles,w=(0,a.useSpeedDial)(),E=w.x,k=w.y,P=w.refs,N=w.open,j=w.strategy,I=w.getFloatingProps,F=w.animation,W=(0,o.useMergeRefs)([d,P.setFloating]),G=(0,c.twMerge)((0,p.default)(m),u),X=n.AnimatePresence;return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(X,null,N&&r.default.createElement("div",v({},s,{ref:W,className:G,style:{position:j,top:k??0,left:E??0}},I()),r.default.Children.map(l,function(H){return r.default.createElement(n.m.div,{initial:"unmount",exit:"unmount",animate:N?"mount":"unmount",variants:F},H)}))))});T.propTypes={children:g.propTypesChildren,className:g.propTypesClassName},T.displayName="MaterialTailwind.SpeedDialContent";var x=T}(jp)),jp}var AP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,T){for(var x in T)Object.defineProperty(C,x,{enumerable:!0,get:T[x]})}t(e,{SpeedDialAction:function(){return _},default:function(){return O}});var r=p(A),n=Ne,o=Le,a=p(Ie),i=Ws;function c(){return c=Object.assign||function(C){for(var T=1;T=0)&&Object.prototype.propertyIsEnumerable.call(C,b)&&(x[b]=C[b])}return x}function v(C,T){if(C==null)return{};var x={},b=Object.keys(C),d,l;for(l=0;l=0)&&(x[d]=C[d]);return x}var _=r.default.forwardRef(function(C,T){var x=C.className,b=C.children,d=g(C,["className","children"]),l=(0,n.useTheme)(),u=l.speedDialAction.styles,s=(0,o.twMerge)((0,a.default)(u),x);return r.default.createElement("button",c({},d,{ref:T,className:s}),b)});_.propTypes={children:i.propTypesChildren,className:i.propTypesClassName},_.displayName="SpeedDialAction";var O=_})(AP);var Xw;function Cb(){return Xw||(Xw=1,function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,m){for(var w in m)Object.defineProperty(h,w,{enumerable:!0,get:m[w]})}t(e,{SpeedDialContext:function(){return d},useSpeedDial:function(){return l},SpeedDial:function(){return u},SpeedDialHandler:function(){return c.default},SpeedDialContent:function(){return p.default},SpeedDialAction:function(){return g.default},default:function(){return s}});var r=O(A),n=Zt,o=Ne,a=O(dr),i=Ws,c=O(x3()),p=O(_3()),g=O(AP);function v(h,m){(m==null||m>h.length)&&(m=h.length);for(var w=0,E=new Array(m);w.");return h}function u(h){var m=h.open,w=h.handler,E=h.placement,k=h.offset,P=h.dismiss,N=h.animate,j=h.children,I=(0,o.useTheme)(),F=I.speedDial.defaultProps,W=x(r.default.useState(!1),2),G=W[0],X=W[1];m=m??G,w=w??X,E=E??F.placement,k=k??F.offset,P=P??F.dismiss,N=N??F.animate;var H={unmount:{opacity:0,transform:"scale(0.5)",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{opacity:1,transform:"scale(1)",transition:{duration:.2,times:[.4,0,.2,1]}}},B=(0,a.default)(H,N),U=(0,n.useFloatingNodeId)(),K=(0,n.useFloating)({open:m,nodeId:U,placement:E,onOpenChange:w,whileElementsMounted:n.autoUpdate,middleware:[(0,n.offset)(k),(0,n.flip)(),(0,n.shift)()]}),Q=K.x,ne=K.y,ue=K.strategy,le=K.refs,re=K.context,be=(0,n.useInteractions)([(0,n.useHover)(re,{handleClose:(0,n.safePolygon)()}),(0,n.useDismiss)(re,P)]),fe=be.getReferenceProps,ie=be.getFloatingProps,pe=r.default.useMemo(function(){return{x:Q,y:ne,strategy:ue,refs:le,open:m,context:re,getReferenceProps:fe,getFloatingProps:ie,animation:B}},[re,ie,fe,le,ue,Q,ne,m,B]);return r.default.createElement(d.Provider,{value:pe},r.default.createElement("div",{className:"group"},r.default.createElement(n.FloatingNode,{id:U},j)))}u.propTypes={open:i.propTypesOpen,handler:i.propTypesHanlder,placement:i.propTypesPlacement,offset:i.propTypesOffset,dismiss:i.propTypesDismiss,className:i.propTypesClassName,children:i.propTypesChildren,animate:i.propTypesAnimate},u.displayName="MaterialTailwind.SpeedDial";var s=Object.assign(u,{Handler:c.default,Content:p.default,Action:g.default})}(Rp)),Rp}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),t(qT,e),t($O,e),t(qO,e),t(GO,e),t(YO,e),t(XO,e),t(eS,e),t(tS,e),t(rS,e),t(zd,e),t(US,e),t(HS,e),t(YS,e),t(QS,e),t(eP,e),t(tP,e),t(rP,e),t(oP,e),t(aP,e),t(cP,e),t(dP,e),t(fP,e),t(pP,e),t(gP,e),t(vP,e),t(mP,e),t(wP,e),t(_P,e),t(TP,e),t(CP,e),t(OP,e),t(SP,e),t(NP,e),t(Cb(),e),t(Ne,e),t(Cg,e);function t(r,n){return Object.keys(r).forEach(function(o){o!=="default"&&!Object.prototype.hasOwnProperty.call(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:function(){return r[o]}})}),r}})(xe);function T3({title:e,titleId:t,...r},n){return A.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?A.createElement("title",{id:t},e):null,A.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))}const C3=A.forwardRef(T3),MP=C3,Ob=Bn.createContext(null);Ob.displayName="MaterialTailwindContext";function O3(e,t){switch(t.type){case"OPEN_SIDENAV":return{...e,openSidenav:t.value};case"SIDENAV_TYPE":return{...e,sidenavType:t.value};case"SIDENAV_COLOR":return{...e,sidenavColor:t.value};case"TRANSPARENT_NAVBAR":return{...e,transparentNavbar:t.value};case"FIXED_NAVBAR":return{...e,fixedNavbar:t.value};case"OPEN_CONFIGURATOR":return{...e,openConfigurator:t.value};default:throw new Error(`Unhandled action type: ${t.type}`)}}function Sb({children:e}){const t={openSidenav:!1,sidenavColor:"gray",sidenavType:"white",transparentNavbar:!1,fixedNavbar:!0,openConfigurator:!1},[r,n]=Bn.useReducer(O3,t),o=Bn.useMemo(()=>[r,n],[r,n]);return D.jsx(Ob.Provider,{value:o,children:e})}function Yd(){const e=Bn.useContext(Ob);if(!e)throw new Error("useMaterialTailwindController should be used inside the MaterialTailwindControllerProvider.");return e}Sb.displayName="/src/context/index.jsx";Sb.propTypes={children:Qn.node.isRequired};const IP=(e,t)=>e({type:"OPEN_SIDENAV",value:t}),S3=(e,t)=>e({type:"SIDENAV_COLOR",value:t}),P3=(e,t)=>e({type:"FIXED_NAVBAR",value:t}),Pb=(e,t)=>e({type:"OPEN_CONFIGURATOR",value:t}),k3="/assets/stackpulse-846837e9.png";function Xd({brandImg:e,brandName:t,routes:r}){const[n,o]=Yd(),{sidenavColor:a,sidenavType:i,openSidenav:c}=n,p={dark:"bg-gradient-to-br from-gray-800 to-gray-900",white:"bg-white shadow-sm",transparent:"bg-transparent"};return D.jsxs("aside",{className:`${p[i]} ${c?"translate-x-0":"-translate-x-80"} fixed inset-0 z-50 my-4 ml-4 h-[calc(100vh-32px)] w-72 rounded-xl transition-transform duration-300 xl:translate-x-0 border border-blue-gray-100`,children:[D.jsxs("div",{className:"relative py-6 px-8 text-right",children:[D.jsx("img",{src:k3,alt:"StackPulse",className:"w-auto"}),D.jsx("span",{className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:"v0.4"}),D.jsx(xe.IconButton,{variant:"text",size:"sm",ripple:!1,className:"absolute right-0 top-0 grid rounded-br-none rounded-tl-none",onClick:()=>IP(o,!1),children:D.jsx(MP,{strokeWidth:2.5,className:"h-5 w-5 text-black"})})]}),D.jsx("div",{className:"m-4",children:r.map(({layout:g,title:v,pages:_},O)=>D.jsxs("ul",{className:"mb-4 flex flex-col gap-1",children:[v&&D.jsx("li",{className:"mx-3.5 mt-4 mb-2",children:D.jsx(xe.Typography,{variant:"small",color:i==="dark"?"white":"blue-gray",className:"font-black uppercase opacity-75",children:v})}),_.map(({icon:C,name:T,path:x})=>D.jsx("li",{children:D.jsx(KA,{to:`/${g}${x}`,children:({isActive:b})=>D.jsxs(xe.Button,{variant:b?"gradient":"text",color:b?a:i==="dark"?"white":"blue-gray",className:"flex items-center gap-4 px-4 capitalize",fullWidth:!0,children:[C,D.jsx(xe.Typography,{color:"inherit",className:"font-medium capitalize",children:T})]})})},T))]},O))})]})}Xd.defaultProps={brandImg:"/img/logo-ct.png",brandName:"Material Tailwind React"};Xd.propTypes={brandImg:Qn.string,brandName:Qn.string,routes:Qn.arrayOf(Qn.object).isRequired};Xd.displayName="/src/widgets/layout/sidnave.jsx";function DP(){const[e,t]=Yd(),{fixedNavbar:r,openSidenav:n}=e,{pathname:o}=Aa();return o.split("/").filter(a=>a!==""),D.jsx(xe.Navbar,{color:r?"white":"transparent",className:`rounded-xl transition-all ${r?"sticky top-4 z-40 py-3 shadow-md shadow-blue-gray-500/5":"px-0 py-1"}`,fullWidth:!0,blurred:r,children:D.jsxs("div",{className:"flex justify-between gap-6 flex-row items-center",children:[D.jsx("div",{className:"capitalize"}),D.jsxs("div",{className:"flex items-center",children:[D.jsx(xe.IconButton,{variant:"text",color:"blue-gray",className:"grid xl:hidden",onClick:()=>IP(t,!n),children:D.jsx(eM,{strokeWidth:3,className:"h-6 w-6 text-blue-gray-500"})}),D.jsx(xe.IconButton,{variant:"text",color:"blue-gray",onClick:()=>Pb(t,!0),children:D.jsx($T,{className:"h-5 w-5 text-blue-gray-500 "})})]})]})})}DP.displayName="/src/widgets/layout/dashboard-navbar.jsx";function E3(e,t){t=Math.pow(10,t);const r=["K","M","B","T"];for(let o=r.length-1;o>=0;o--){var n=Math.pow(10,(o+1)*3);if(n<=e){e=Math.round(e*t/n)/t,e==1e3&&o{fetch("https://api.github.com/repos/creativetimofficial/material-tailwind-dashboard-react").then(g=>g.json()).then(g=>c(E3(g.stargazers_count,1)))},[]),D.jsxs("aside",{className:`fixed top-0 right-0 z-50 h-screen w-96 bg-white px-2.5 shadow-lg transition-transform duration-300 ${r?"translate-x-0":"translate-x-96"}`,children:[D.jsxs("div",{className:"flex items-start justify-between px-6 pt-8 pb-6",children:[D.jsxs("div",{children:[D.jsx(xe.Typography,{variant:"h5",color:"blue-gray",children:"Dashboard Configurator"}),D.jsx(xe.Typography,{className:"font-normal text-blue-gray-600",children:"See our dashboard options."})]}),D.jsx(xe.IconButton,{variant:"text",color:"blue-gray",onClick:()=>Pb(t,!1),children:D.jsx(MP,{strokeWidth:2.5,className:"h-5 w-5"})})]}),D.jsxs("div",{className:"py-4 px-6",children:[D.jsxs("div",{className:"mb-12",children:[D.jsx(xe.Typography,{variant:"h6",color:"blue-gray",children:"Sidenav Colors"}),D.jsx("div",{className:"mt-3 flex items-center gap-2",children:Object.keys(p).map(g=>D.jsx("span",{className:`h-6 w-6 cursor-pointer rounded-full border bg-gradient-to-br transition-transform hover:scale-105 ${p[g]} ${n===g?"border-black":"border-transparent"}`,onClick:()=>S3(t,g)},g))})]}),D.jsxs("div",{className:"mb-12",children:[D.jsx("hr",{}),D.jsxs("div",{className:"flex items-center justify-between py-5",children:[D.jsx(xe.Typography,{variant:"h6",color:"blue-gray",children:"Navbar Fixed"}),D.jsx(xe.Switch,{defaultChecked:!0,id:"navbar-fixed",value:a,onChange:()=>P3(t,!a)})]})]})]})]})}LP.displayName="/src/widgets/layout/configurator.jsx";function FP(){const e=new Date().getFullYear();return D.jsx("footer",{children:D.jsx("div",{className:"flex w-full flex-wrap items-center justify-center md:justify-end",children:D.jsxs(xe.Typography,{variant:"small",className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:["StackPulse: © ",e," by Michael Böhmländer"]})})})}FP.displayName="/src/widgets/layout/footer.jsx";Qn.string,Qn.arrayOf(Qn.object).isRequired,Qn.node;function VP(e,t){return function(){return e.apply(t,arguments)}}const{toString:R3}=Object.prototype,{getPrototypeOf:kb}=Object,Qd=(e=>t=>{const r=R3.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Nn=e=>(e=e.toLowerCase(),t=>Qd(t)===e),Jd=e=>t=>typeof t===e,{isArray:Zi}=Array,_s=Jd("undefined");function N3(e){return e!==null&&!_s(e)&&e.constructor!==null&&!_s(e.constructor)&&Wr(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const zP=Nn("ArrayBuffer");function j3(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&zP(e.buffer),t}const A3=Jd("string"),Wr=Jd("function"),BP=Jd("number"),Zd=e=>e!==null&&typeof e=="object",M3=e=>e===!0||e===!1,oc=e=>{if(Qd(e)!=="object")return!1;const t=kb(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},I3=Nn("Date"),D3=Nn("File"),L3=Nn("Blob"),F3=Nn("FileList"),V3=e=>Zd(e)&&Wr(e.pipe),z3=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Wr(e.append)&&((t=Qd(e))==="formdata"||t==="object"&&Wr(e.toString)&&e.toString()==="[object FormData]"))},B3=Nn("URLSearchParams"),[W3,U3,H3,$3]=["ReadableStream","Request","Response","Headers"].map(Nn),q3=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Us(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),Zi(e))for(n=0,o=e.length;n0;)if(o=r[n],t===o.toLowerCase())return o;return null}const ga=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),UP=e=>!_s(e)&&e!==ga;function uh(){const{caseless:e}=UP(this)&&this||{},t={},r=(n,o)=>{const a=e&&WP(t,o)||o;oc(t[a])&&oc(n)?t[a]=uh(t[a],n):oc(n)?t[a]=uh({},n):Zi(n)?t[a]=n.slice():t[a]=n};for(let n=0,o=arguments.length;n(Us(t,(o,a)=>{r&&Wr(o)?e[a]=VP(o,r):e[a]=o},{allOwnKeys:n}),e),K3=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Y3=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},X3=(e,t,r,n)=>{let o,a,i;const c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),a=o.length;a-- >0;)i=o[a],(!n||n(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=r!==!1&&kb(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},Q3=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return n!==-1&&n===r},J3=e=>{if(!e)return null;if(Zi(e))return e;let t=e.length;if(!BP(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},Z3=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&kb(Uint8Array)),eV=(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const a=o.value;t.call(e,a[0],a[1])}},tV=(e,t)=>{let r;const n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},rV=Nn("HTMLFormElement"),nV=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),Qw=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),oV=Nn("RegExp"),HP=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};Us(r,(o,a)=>{let i;(i=t(o,a,e))!==!1&&(n[a]=i||o)}),Object.defineProperties(e,n)},aV=e=>{HP(e,(t,r)=>{if(Wr(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const n=e[r];if(Wr(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},iV=(e,t)=>{const r={},n=o=>{o.forEach(a=>{r[a]=!0})};return Zi(e)?n(e):n(String(e).split(t)),r},lV=()=>{},sV=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Ap="abcdefghijklmnopqrstuvwxyz",Jw="0123456789",$P={DIGIT:Jw,ALPHA:Ap,ALPHA_DIGIT:Ap+Ap.toUpperCase()+Jw},uV=(e=16,t=$P.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function cV(e){return!!(e&&Wr(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const dV=e=>{const t=new Array(10),r=(n,o)=>{if(Zd(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;const a=Zi(n)?[]:{};return Us(n,(i,c)=>{const p=r(i,o+1);!_s(p)&&(a[c]=p)}),t[o]=void 0,a}}return n};return r(e,0)},fV=Nn("AsyncFunction"),pV=e=>e&&(Zd(e)||Wr(e))&&Wr(e.then)&&Wr(e.catch),qP=((e,t)=>e?setImmediate:t?((r,n)=>(ga.addEventListener("message",({source:o,data:a})=>{o===ga&&a===r&&n.length&&n.shift()()},!1),o=>{n.push(o),ga.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",Wr(ga.postMessage)),hV=typeof queueMicrotask<"u"?queueMicrotask.bind(ga):typeof process<"u"&&process.nextTick||qP,de={isArray:Zi,isArrayBuffer:zP,isBuffer:N3,isFormData:z3,isArrayBufferView:j3,isString:A3,isNumber:BP,isBoolean:M3,isObject:Zd,isPlainObject:oc,isReadableStream:W3,isRequest:U3,isResponse:H3,isHeaders:$3,isUndefined:_s,isDate:I3,isFile:D3,isBlob:L3,isRegExp:oV,isFunction:Wr,isStream:V3,isURLSearchParams:B3,isTypedArray:Z3,isFileList:F3,forEach:Us,merge:uh,extend:G3,trim:q3,stripBOM:K3,inherits:Y3,toFlatObject:X3,kindOf:Qd,kindOfTest:Nn,endsWith:Q3,toArray:J3,forEachEntry:eV,matchAll:tV,isHTMLForm:rV,hasOwnProperty:Qw,hasOwnProp:Qw,reduceDescriptors:HP,freezeMethods:aV,toObjectSet:iV,toCamelCase:nV,noop:lV,toFiniteNumber:sV,findKey:WP,global:ga,isContextDefined:UP,ALPHABET:$P,generateString:uV,isSpecCompliantForm:cV,toJSONObject:dV,isAsyncFn:fV,isThenable:pV,setImmediate:qP,asap:hV};function Qe(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}de.inherits(Qe,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:de.toJSONObject(this.config),code:this.code,status:this.status}}});const GP=Qe.prototype,KP={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{KP[e]={value:e}});Object.defineProperties(Qe,KP);Object.defineProperty(GP,"isAxiosError",{value:!0});Qe.from=(e,t,r,n,o,a)=>{const i=Object.create(GP);return de.toFlatObject(e,i,function(p){return p!==Error.prototype},c=>c!=="isAxiosError"),Qe.call(i,e.message,t,r,n,o),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};const gV=null;function ch(e){return de.isPlainObject(e)||de.isArray(e)}function YP(e){return de.endsWith(e,"[]")?e.slice(0,-2):e}function Zw(e,t,r){return e?e.concat(t).map(function(o,a){return o=YP(o),!r&&a?"["+o+"]":o}).join(r?".":""):t}function bV(e){return de.isArray(e)&&!e.some(ch)}const vV=de.toFlatObject(de,{},null,function(t){return/^is[A-Z]/.test(t)});function ef(e,t,r){if(!de.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,r=de.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,b){return!de.isUndefined(b[x])});const n=r.metaTokens,o=r.visitor||v,a=r.dots,i=r.indexes,p=(r.Blob||typeof Blob<"u"&&Blob)&&de.isSpecCompliantForm(t);if(!de.isFunction(o))throw new TypeError("visitor must be a function");function g(T){if(T===null)return"";if(de.isDate(T))return T.toISOString();if(!p&&de.isBlob(T))throw new Qe("Blob is not supported. Use a Buffer instead.");return de.isArrayBuffer(T)||de.isTypedArray(T)?p&&typeof Blob=="function"?new Blob([T]):Buffer.from(T):T}function v(T,x,b){let d=T;if(T&&!b&&typeof T=="object"){if(de.endsWith(x,"{}"))x=n?x:x.slice(0,-2),T=JSON.stringify(T);else if(de.isArray(T)&&bV(T)||(de.isFileList(T)||de.endsWith(x,"[]"))&&(d=de.toArray(T)))return x=YP(x),d.forEach(function(u,s){!(de.isUndefined(u)||u===null)&&t.append(i===!0?Zw([x],s,a):i===null?x:x+"[]",g(u))}),!1}return ch(T)?!0:(t.append(Zw(b,x,a),g(T)),!1)}const _=[],O=Object.assign(vV,{defaultVisitor:v,convertValue:g,isVisitable:ch});function C(T,x){if(!de.isUndefined(T)){if(_.indexOf(T)!==-1)throw Error("Circular reference detected in "+x.join("."));_.push(T),de.forEach(T,function(d,l){(!(de.isUndefined(d)||d===null)&&o.call(t,d,de.isString(l)?l.trim():l,x,O))===!0&&C(d,x?x.concat(l):[l])}),_.pop()}}if(!de.isObject(e))throw new TypeError("data must be an object");return C(e),t}function ex(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Eb(e,t){this._pairs=[],e&&ef(e,this,t)}const XP=Eb.prototype;XP.append=function(t,r){this._pairs.push([t,r])};XP.toString=function(t){const r=t?function(n){return t.call(this,n,ex)}:ex;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};function mV(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function QP(e,t,r){if(!t)return e;const n=r&&r.encode||mV,o=r&&r.serialize;let a;if(o?a=o(t,r):a=de.isURLSearchParams(t)?t.toString():new Eb(t,r).toString(n),a){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class yV{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){de.forEach(this.handlers,function(n){n!==null&&t(n)})}}const tx=yV,JP={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},wV=typeof URLSearchParams<"u"?URLSearchParams:Eb,xV=typeof FormData<"u"?FormData:null,_V=typeof Blob<"u"?Blob:null,TV={isBrowser:!0,classes:{URLSearchParams:wV,FormData:xV,Blob:_V},protocols:["http","https","file","blob","url","data"]},Rb=typeof window<"u"&&typeof document<"u",dh=typeof navigator=="object"&&navigator||void 0,CV=Rb&&(!dh||["ReactNative","NativeScript","NS"].indexOf(dh.product)<0),OV=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),SV=Rb&&window.location.href||"http://localhost",PV=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Rb,hasStandardBrowserEnv:CV,hasStandardBrowserWebWorkerEnv:OV,navigator:dh,origin:SV},Symbol.toStringTag,{value:"Module"})),Ur={...PV,...TV};function kV(e,t){return ef(e,new Ur.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,a){return Ur.isNode&&de.isBuffer(r)?(this.append(n,r.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}function EV(e){return de.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function RV(e){const t={},r=Object.keys(e);let n;const o=r.length;let a;for(n=0;n=r.length;return i=!i&&de.isArray(o)?o.length:i,p?(de.hasOwnProp(o,i)?o[i]=[o[i],n]:o[i]=n,!c):((!o[i]||!de.isObject(o[i]))&&(o[i]=[]),t(r,n,o[i],a)&&de.isArray(o[i])&&(o[i]=RV(o[i])),!c)}if(de.isFormData(e)&&de.isFunction(e.entries)){const r={};return de.forEachEntry(e,(n,o)=>{t(EV(n),o,r,0)}),r}return null}function NV(e,t,r){if(de.isString(e))try{return(t||JSON.parse)(e),de.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}const Nb={transitional:JP,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){const n=r.getContentType()||"",o=n.indexOf("application/json")>-1,a=de.isObject(t);if(a&&de.isHTMLForm(t)&&(t=new FormData(t)),de.isFormData(t))return o?JSON.stringify(ZP(t)):t;if(de.isArrayBuffer(t)||de.isBuffer(t)||de.isStream(t)||de.isFile(t)||de.isBlob(t)||de.isReadableStream(t))return t;if(de.isArrayBufferView(t))return t.buffer;if(de.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(a){if(n.indexOf("application/x-www-form-urlencoded")>-1)return kV(t,this.formSerializer).toString();if((c=de.isFileList(t))||n.indexOf("multipart/form-data")>-1){const p=this.env&&this.env.FormData;return ef(c?{"files[]":t}:t,p&&new p,this.formSerializer)}}return a||o?(r.setContentType("application/json",!1),NV(t)):t}],transformResponse:[function(t){const r=this.transitional||Nb.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(de.isResponse(t)||de.isReadableStream(t))return t;if(t&&de.isString(t)&&(n&&!this.responseType||o)){const i=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(i)throw c.name==="SyntaxError"?Qe.from(c,Qe.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ur.classes.FormData,Blob:Ur.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};de.forEach(["delete","get","head","post","put","patch"],e=>{Nb.headers[e]={}});const jb=Nb,jV=de.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),AV=e=>{const t={};let r,n,o;return e&&e.split(` -`).forEach(function(i){o=i.indexOf(":"),r=i.substring(0,o).trim().toLowerCase(),n=i.substring(o+1).trim(),!(!r||t[r]&&jV[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t},rx=Symbol("internals");function Cl(e){return e&&String(e).trim().toLowerCase()}function ac(e){return e===!1||e==null?e:de.isArray(e)?e.map(ac):String(e)}function MV(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}const IV=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Mp(e,t,r,n,o){if(de.isFunction(n))return n.call(this,t,r);if(o&&(t=r),!!de.isString(t)){if(de.isString(n))return t.indexOf(n)!==-1;if(de.isRegExp(n))return n.test(t)}}function DV(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function LV(e,t){const r=de.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(o,a,i){return this[n].call(this,t,o,a,i)},configurable:!0})})}class tf{constructor(t){t&&this.set(t)}set(t,r,n){const o=this;function a(c,p,g){const v=Cl(p);if(!v)throw new Error("header name must be a non-empty string");const _=de.findKey(o,v);(!_||o[_]===void 0||g===!0||g===void 0&&o[_]!==!1)&&(o[_||p]=ac(c))}const i=(c,p)=>de.forEach(c,(g,v)=>a(g,v,p));if(de.isPlainObject(t)||t instanceof this.constructor)i(t,r);else if(de.isString(t)&&(t=t.trim())&&!IV(t))i(AV(t),r);else if(de.isHeaders(t))for(const[c,p]of t.entries())a(p,c,n);else t!=null&&a(r,t,n);return this}get(t,r){if(t=Cl(t),t){const n=de.findKey(this,t);if(n){const o=this[n];if(!r)return o;if(r===!0)return MV(o);if(de.isFunction(r))return r.call(this,o,n);if(de.isRegExp(r))return r.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=Cl(t),t){const n=de.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||Mp(this,this[n],n,r)))}return!1}delete(t,r){const n=this;let o=!1;function a(i){if(i=Cl(i),i){const c=de.findKey(n,i);c&&(!r||Mp(n,n[c],c,r))&&(delete n[c],o=!0)}}return de.isArray(t)?t.forEach(a):a(t),o}clear(t){const r=Object.keys(this);let n=r.length,o=!1;for(;n--;){const a=r[n];(!t||Mp(this,this[a],a,t,!0))&&(delete this[a],o=!0)}return o}normalize(t){const r=this,n={};return de.forEach(this,(o,a)=>{const i=de.findKey(n,a);if(i){r[i]=ac(o),delete r[a];return}const c=t?DV(a):String(a).trim();c!==a&&delete r[a],r[c]=ac(o),n[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const r=Object.create(null);return de.forEach(this,(n,o)=>{n!=null&&n!==!1&&(r[o]=t&&de.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){const n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){const n=(this[rx]=this[rx]={accessors:{}}).accessors,o=this.prototype;function a(i){const c=Cl(i);n[c]||(LV(o,i),n[c]=!0)}return de.isArray(t)?t.forEach(a):a(t),this}}tf.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);de.reduceDescriptors(tf.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});de.freezeMethods(tf);const On=tf;function Ip(e,t){const r=this||jb,n=t||r,o=On.from(n.headers);let a=n.data;return de.forEach(e,function(c){a=c.call(r,a,o.normalize(),t?t.status:void 0)}),o.normalize(),a}function ek(e){return!!(e&&e.__CANCEL__)}function el(e,t,r){Qe.call(this,e??"canceled",Qe.ERR_CANCELED,t,r),this.name="CanceledError"}de.inherits(el,Qe,{__CANCEL__:!0});function tk(e,t,r){const n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new Qe("Request failed with status code "+r.status,[Qe.ERR_BAD_REQUEST,Qe.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function FV(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function VV(e,t){e=e||10;const r=new Array(e),n=new Array(e);let o=0,a=0,i;return t=t!==void 0?t:1e3,function(p){const g=Date.now(),v=n[a];i||(i=g),r[o]=p,n[o]=g;let _=a,O=0;for(;_!==o;)O+=r[_++],_=_%e;if(o=(o+1)%e,o===a&&(a=(a+1)%e),g-i{r=v,o=null,a&&(clearTimeout(a),a=null),e.apply(null,g)};return[(...g)=>{const v=Date.now(),_=v-r;_>=n?i(g,v):(o=g,a||(a=setTimeout(()=>{a=null,i(o)},n-_)))},()=>o&&i(o)]}const ad=(e,t,r=3)=>{let n=0;const o=VV(50,250);return zV(a=>{const i=a.loaded,c=a.lengthComputable?a.total:void 0,p=i-n,g=o(p),v=i<=c;n=i;const _={loaded:i,total:c,progress:c?i/c:void 0,bytes:p,rate:g||void 0,estimated:g&&c&&v?(c-i)/g:void 0,event:a,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(_)},r)},nx=(e,t)=>{const r=e!=null;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},ox=e=>(...t)=>de.asap(()=>e(...t)),BV=Ur.hasStandardBrowserEnv?function(){const t=Ur.navigator&&/(msie|trident)/i.test(Ur.navigator.userAgent),r=document.createElement("a");let n;function o(a){let i=a;return t&&(r.setAttribute("href",i),i=r.href),r.setAttribute("href",i),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=o(window.location.href),function(i){const c=de.isString(i)?o(i):i;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}(),WV=Ur.hasStandardBrowserEnv?{write(e,t,r,n,o,a){const i=[e+"="+encodeURIComponent(t)];de.isNumber(r)&&i.push("expires="+new Date(r).toGMTString()),de.isString(n)&&i.push("path="+n),de.isString(o)&&i.push("domain="+o),a===!0&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function UV(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function HV(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function rk(e,t){return e&&!UV(t)?HV(e,t):t}const ax=e=>e instanceof On?{...e}:e;function Ea(e,t){t=t||{};const r={};function n(g,v,_){return de.isPlainObject(g)&&de.isPlainObject(v)?de.merge.call({caseless:_},g,v):de.isPlainObject(v)?de.merge({},v):de.isArray(v)?v.slice():v}function o(g,v,_){if(de.isUndefined(v)){if(!de.isUndefined(g))return n(void 0,g,_)}else return n(g,v,_)}function a(g,v){if(!de.isUndefined(v))return n(void 0,v)}function i(g,v){if(de.isUndefined(v)){if(!de.isUndefined(g))return n(void 0,g)}else return n(void 0,v)}function c(g,v,_){if(_ in t)return n(g,v);if(_ in e)return n(void 0,g)}const p={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:c,headers:(g,v)=>o(ax(g),ax(v),!0)};return de.forEach(Object.keys(Object.assign({},e,t)),function(v){const _=p[v]||o,O=_(e[v],t[v],v);de.isUndefined(O)&&_!==c||(r[v]=O)}),r}const nk=e=>{const t=Ea({},e);let{data:r,withXSRFToken:n,xsrfHeaderName:o,xsrfCookieName:a,headers:i,auth:c}=t;t.headers=i=On.from(i),t.url=QP(rk(t.baseURL,t.url),e.params,e.paramsSerializer),c&&i.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let p;if(de.isFormData(r)){if(Ur.hasStandardBrowserEnv||Ur.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if((p=i.getContentType())!==!1){const[g,...v]=p?p.split(";").map(_=>_.trim()).filter(Boolean):[];i.setContentType([g||"multipart/form-data",...v].join("; "))}}if(Ur.hasStandardBrowserEnv&&(n&&de.isFunction(n)&&(n=n(t)),n||n!==!1&&BV(t.url))){const g=o&&a&&WV.read(a);g&&i.set(o,g)}return t},$V=typeof XMLHttpRequest<"u",qV=$V&&function(e){return new Promise(function(r,n){const o=nk(e);let a=o.data;const i=On.from(o.headers).normalize();let{responseType:c,onUploadProgress:p,onDownloadProgress:g}=o,v,_,O,C,T;function x(){C&&C(),T&&T(),o.cancelToken&&o.cancelToken.unsubscribe(v),o.signal&&o.signal.removeEventListener("abort",v)}let b=new XMLHttpRequest;b.open(o.method.toUpperCase(),o.url,!0),b.timeout=o.timeout;function d(){if(!b)return;const u=On.from("getAllResponseHeaders"in b&&b.getAllResponseHeaders()),h={data:!c||c==="text"||c==="json"?b.responseText:b.response,status:b.status,statusText:b.statusText,headers:u,config:e,request:b};tk(function(w){r(w),x()},function(w){n(w),x()},h),b=null}"onloadend"in b?b.onloadend=d:b.onreadystatechange=function(){!b||b.readyState!==4||b.status===0&&!(b.responseURL&&b.responseURL.indexOf("file:")===0)||setTimeout(d)},b.onabort=function(){b&&(n(new Qe("Request aborted",Qe.ECONNABORTED,e,b)),b=null)},b.onerror=function(){n(new Qe("Network Error",Qe.ERR_NETWORK,e,b)),b=null},b.ontimeout=function(){let s=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const h=o.transitional||JP;o.timeoutErrorMessage&&(s=o.timeoutErrorMessage),n(new Qe(s,h.clarifyTimeoutError?Qe.ETIMEDOUT:Qe.ECONNABORTED,e,b)),b=null},a===void 0&&i.setContentType(null),"setRequestHeader"in b&&de.forEach(i.toJSON(),function(s,h){b.setRequestHeader(h,s)}),de.isUndefined(o.withCredentials)||(b.withCredentials=!!o.withCredentials),c&&c!=="json"&&(b.responseType=o.responseType),g&&([O,T]=ad(g,!0),b.addEventListener("progress",O)),p&&b.upload&&([_,C]=ad(p),b.upload.addEventListener("progress",_),b.upload.addEventListener("loadend",C)),(o.cancelToken||o.signal)&&(v=u=>{b&&(n(!u||u.type?new el(null,e,b):u),b.abort(),b=null)},o.cancelToken&&o.cancelToken.subscribe(v),o.signal&&(o.signal.aborted?v():o.signal.addEventListener("abort",v)));const l=FV(o.url);if(l&&Ur.protocols.indexOf(l)===-1){n(new Qe("Unsupported protocol "+l+":",Qe.ERR_BAD_REQUEST,e));return}b.send(a||null)})},GV=(e,t)=>{let r=new AbortController,n;const o=function(p){if(!n){n=!0,i();const g=p instanceof Error?p:this.reason;r.abort(g instanceof Qe?g:new el(g instanceof Error?g.message:g))}};let a=t&&setTimeout(()=>{o(new Qe(`timeout ${t} of ms exceeded`,Qe.ETIMEDOUT))},t);const i=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(p=>{p&&(p.removeEventListener?p.removeEventListener("abort",o):p.unsubscribe(o))}),e=null)};e.forEach(p=>p&&p.addEventListener&&p.addEventListener("abort",o));const{signal:c}=r;return c.unsubscribe=i,[c,()=>{a&&clearTimeout(a),a=null}]},KV=GV,YV=function*(e,t){let r=e.byteLength;if(!t||r{const a=XV(e,t,o);let i=0,c,p=g=>{c||(c=!0,n&&n(g))};return new ReadableStream({async pull(g){try{const{done:v,value:_}=await a.next();if(v){p(),g.close();return}let O=_.byteLength;if(r){let C=i+=O;r(C)}g.enqueue(new Uint8Array(_))}catch(v){throw p(v),v}},cancel(g){return p(g),a.return()}},{highWaterMark:2})},rf=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ok=rf&&typeof ReadableStream=="function",fh=rf&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),ak=(e,...t)=>{try{return!!e(...t)}catch{return!1}},QV=ok&&ak(()=>{let e=!1;const t=new Request(Ur.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),lx=64*1024,ph=ok&&ak(()=>de.isReadableStream(new Response("").body)),id={stream:ph&&(e=>e.body)};rf&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!id[t]&&(id[t]=de.isFunction(e[t])?r=>r[t]():(r,n)=>{throw new Qe(`Response type '${t}' is not supported`,Qe.ERR_NOT_SUPPORT,n)})})})(new Response);const JV=async e=>{if(e==null)return 0;if(de.isBlob(e))return e.size;if(de.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(de.isArrayBufferView(e)||de.isArrayBuffer(e))return e.byteLength;if(de.isURLSearchParams(e)&&(e=e+""),de.isString(e))return(await fh(e)).byteLength},ZV=async(e,t)=>{const r=de.toFiniteNumber(e.getContentLength());return r??JV(t)},ez=rf&&(async e=>{let{url:t,method:r,data:n,signal:o,cancelToken:a,timeout:i,onDownloadProgress:c,onUploadProgress:p,responseType:g,headers:v,withCredentials:_="same-origin",fetchOptions:O}=nk(e);g=g?(g+"").toLowerCase():"text";let[C,T]=o||a||i?KV([o,a],i):[],x,b;const d=()=>{!x&&setTimeout(()=>{C&&C.unsubscribe()}),x=!0};let l;try{if(p&&QV&&r!=="get"&&r!=="head"&&(l=await ZV(v,n))!==0){let w=new Request(t,{method:"POST",body:n,duplex:"half"}),E;if(de.isFormData(n)&&(E=w.headers.get("content-type"))&&v.setContentType(E),w.body){const[k,P]=nx(l,ad(ox(p)));n=ix(w.body,lx,k,P,fh)}}de.isString(_)||(_=_?"include":"omit");const u="credentials"in Request.prototype;b=new Request(t,{...O,signal:C,method:r.toUpperCase(),headers:v.normalize().toJSON(),body:n,duplex:"half",credentials:u?_:void 0});let s=await fetch(b);const h=ph&&(g==="stream"||g==="response");if(ph&&(c||h)){const w={};["status","statusText","headers"].forEach(N=>{w[N]=s[N]});const E=de.toFiniteNumber(s.headers.get("content-length")),[k,P]=c&&nx(E,ad(ox(c),!0))||[];s=new Response(ix(s.body,lx,k,()=>{P&&P(),h&&d()},fh),w)}g=g||"text";let m=await id[de.findKey(id,g)||"text"](s,e);return!h&&d(),T&&T(),await new Promise((w,E)=>{tk(w,E,{data:m,headers:On.from(s.headers),status:s.status,statusText:s.statusText,config:e,request:b})})}catch(u){throw d(),u&&u.name==="TypeError"&&/fetch/i.test(u.message)?Object.assign(new Qe("Network Error",Qe.ERR_NETWORK,e,b),{cause:u.cause||u}):Qe.from(u,u&&u.code,e,b)}}),hh={http:gV,xhr:qV,fetch:ez};de.forEach(hh,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const sx=e=>`- ${e}`,tz=e=>de.isFunction(e)||e===null||e===!1,ik={getAdapter:e=>{e=de.isArray(e)?e:[e];const{length:t}=e;let r,n;const o={};for(let a=0;a`adapter ${c} `+(p===!1?"is not supported by the environment":"is not available in the build"));let i=t?a.length>1?`since : -`+a.map(sx).join(` -`):" "+sx(a[0]):"as no adapter specified";throw new Qe("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return n},adapters:hh};function Dp(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new el(null,e)}function ux(e){return Dp(e),e.headers=On.from(e.headers),e.data=Ip.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ik.getAdapter(e.adapter||jb.adapter)(e).then(function(n){return Dp(e),n.data=Ip.call(e,e.transformResponse,n),n.headers=On.from(n.headers),n},function(n){return ek(n)||(Dp(e),n&&n.response&&(n.response.data=Ip.call(e,e.transformResponse,n.response),n.response.headers=On.from(n.response.headers))),Promise.reject(n)})}const lk="1.7.5",Ab={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ab[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const cx={};Ab.transitional=function(t,r,n){function o(a,i){return"[Axios v"+lk+"] Transitional option '"+a+"'"+i+(n?". "+n:"")}return(a,i,c)=>{if(t===!1)throw new Qe(o(i," has been removed"+(r?" in "+r:"")),Qe.ERR_DEPRECATED);return r&&!cx[i]&&(cx[i]=!0,console.warn(o(i," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(a,i,c):!0}};function rz(e,t,r){if(typeof e!="object")throw new Qe("options must be an object",Qe.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let o=n.length;for(;o-- >0;){const a=n[o],i=t[a];if(i){const c=e[a],p=c===void 0||i(c,a,e);if(p!==!0)throw new Qe("option "+a+" must be "+p,Qe.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new Qe("Unknown option "+a,Qe.ERR_BAD_OPTION)}}const gh={assertOptions:rz,validators:Ab},To=gh.validators;class ld{constructor(t){this.defaults=t,this.interceptors={request:new tx,response:new tx}}async request(t,r){try{return await this._request(t,r)}catch(n){if(n instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{n.stack?a&&!String(n.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(n.stack+=` -`+a):n.stack=a}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=Ea(this.defaults,r);const{transitional:n,paramsSerializer:o,headers:a}=r;n!==void 0&&gh.assertOptions(n,{silentJSONParsing:To.transitional(To.boolean),forcedJSONParsing:To.transitional(To.boolean),clarifyTimeoutError:To.transitional(To.boolean)},!1),o!=null&&(de.isFunction(o)?r.paramsSerializer={serialize:o}:gh.assertOptions(o,{encode:To.function,serialize:To.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let i=a&&de.merge(a.common,a[r.method]);a&&de.forEach(["delete","get","head","post","put","patch","common"],T=>{delete a[T]}),r.headers=On.concat(i,a);const c=[];let p=!0;this.interceptors.request.forEach(function(x){typeof x.runWhen=="function"&&x.runWhen(r)===!1||(p=p&&x.synchronous,c.unshift(x.fulfilled,x.rejected))});const g=[];this.interceptors.response.forEach(function(x){g.push(x.fulfilled,x.rejected)});let v,_=0,O;if(!p){const T=[ux.bind(this),void 0];for(T.unshift.apply(T,c),T.push.apply(T,g),O=T.length,v=Promise.resolve(r);_{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](o);n._listeners=null}),this.promise.then=o=>{let a;const i=new Promise(c=>{n.subscribe(c),a=c}).then(o);return i.cancel=function(){n.unsubscribe(a)},i},t(function(a,i,c){n.reason||(n.reason=new el(a,i,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}static source(){let t;return{token:new Mb(function(o){t=o}),cancel:t}}}const nz=Mb;function oz(e){return function(r){return e.apply(null,r)}}function az(e){return de.isObject(e)&&e.isAxiosError===!0}const bh={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(bh).forEach(([e,t])=>{bh[t]=e});const iz=bh;function sk(e){const t=new ic(e),r=VP(ic.prototype.request,t);return de.extend(r,ic.prototype,t,{allOwnKeys:!0}),de.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return sk(Ea(e,o))},r}const Yt=sk(jb);Yt.Axios=ic;Yt.CanceledError=el;Yt.CancelToken=nz;Yt.isCancel=ek;Yt.VERSION=lk;Yt.toFormData=ef;Yt.AxiosError=Qe;Yt.Cancel=Yt.CanceledError;Yt.all=function(t){return Promise.all(t)};Yt.spread=oz;Yt.isAxiosError=az;Yt.mergeConfig=Ea;Yt.AxiosHeaders=On;Yt.formToJSON=e=>ZP(de.isHTMLForm(e)?new FormData(e):e);Yt.getAdapter=ik.getAdapter;Yt.HttpStatusCode=iz;Yt.default=Yt;const Mt=Yt,Un=Object.create(null);Un.open="0";Un.close="1";Un.ping="2";Un.pong="3";Un.message="4";Un.upgrade="5";Un.noop="6";const lc=Object.create(null);Object.keys(Un).forEach(e=>{lc[Un[e]]=e});const vh={type:"error",data:"parser error"},uk=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",ck=typeof ArrayBuffer=="function",dk=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,Ib=({type:e,data:t},r,n)=>uk&&t instanceof Blob?r?n(t):dx(t,n):ck&&(t instanceof ArrayBuffer||dk(t))?r?n(t):dx(new Blob([t]),n):n(Un[e]+(t||"")),dx=(e,t)=>{const r=new FileReader;return r.onload=function(){const n=r.result.split(",")[1];t("b"+(n||""))},r.readAsDataURL(e)};function fx(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Lp;function lz(e,t){if(uk&&e.data instanceof Blob)return e.data.arrayBuffer().then(fx).then(t);if(ck&&(e.data instanceof ArrayBuffer||dk(e.data)))return t(fx(e.data));Ib(e,!1,r=>{Lp||(Lp=new TextEncoder),t(Lp.encode(r))})}const px="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Al=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,r=e.length,n,o=0,a,i,c,p;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const g=new ArrayBuffer(t),v=new Uint8Array(g);for(n=0;n>4,v[o++]=(i&15)<<4|c>>2,v[o++]=(c&3)<<6|p&63;return g},uz=typeof ArrayBuffer=="function",Db=(e,t)=>{if(typeof e!="string")return{type:"message",data:fk(e,t)};const r=e.charAt(0);return r==="b"?{type:"message",data:cz(e.substring(1),t)}:lc[r]?e.length>1?{type:lc[r],data:e.substring(1)}:{type:lc[r]}:vh},cz=(e,t)=>{if(uz){const r=sz(e);return fk(r,t)}else return{base64:!0,data:e}},fk=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},pk=String.fromCharCode(30),dz=(e,t)=>{const r=e.length,n=new Array(r);let o=0;e.forEach((a,i)=>{Ib(a,!1,c=>{n[i]=c,++o===r&&t(n.join(pk))})})},fz=(e,t)=>{const r=e.split(pk),n=[];for(let o=0;o{const n=r.length;let o;if(n<126)o=new Uint8Array(1),new DataView(o.buffer).setUint8(0,n);else if(n<65536){o=new Uint8Array(3);const a=new DataView(o.buffer);a.setUint8(0,126),a.setUint16(1,n)}else{o=new Uint8Array(9);const a=new DataView(o.buffer);a.setUint8(0,127),a.setBigUint64(1,BigInt(n))}e.data&&typeof e.data!="string"&&(o[0]|=128),t.enqueue(o),t.enqueue(r)})}})}let Fp;function Ru(e){return e.reduce((t,r)=>t+r.length,0)}function Nu(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let n=0;for(let o=0;oMath.pow(2,53-32)-1){c.enqueue(vh);break}o=v*Math.pow(2,32)+g.getUint32(4),n=3}else{if(Ru(r)e){c.enqueue(vh);break}}}})}const hk=4;function Kt(e){if(e)return gz(e)}function gz(e){for(var t in Kt.prototype)e[t]=Kt.prototype[t];return e}Kt.prototype.on=Kt.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};Kt.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this};Kt.prototype.off=Kt.prototype.removeListener=Kt.prototype.removeAllListeners=Kt.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var r=this._callbacks["$"+e];if(!r)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var n,o=0;otypeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,r)=>r(t,0))(),on=(()=>typeof self<"u"?self:typeof window<"u"?window:Function("return this")())(),bz="arraybuffer";function gk(e,...t){return t.reduce((r,n)=>(e.hasOwnProperty(n)&&(r[n]=e[n]),r),{})}const vz=on.setTimeout,mz=on.clearTimeout;function of(e,t){t.useNativeTimers?(e.setTimeoutFn=vz.bind(on),e.clearTimeoutFn=mz.bind(on)):(e.setTimeoutFn=on.setTimeout.bind(on),e.clearTimeoutFn=on.clearTimeout.bind(on))}const yz=1.33;function wz(e){return typeof e=="string"?xz(e):Math.ceil((e.byteLength||e.size)*yz)}function xz(e){let t=0,r=0;for(let n=0,o=e.length;n=57344?r+=3:(n++,r+=4);return r}function bk(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function _z(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function Tz(e){let t={},r=e.split("&");for(let n=0,o=r.length;n{this.readyState="paused",t()};if(this._polling||!this.writable){let n=0;this._polling&&(n++,this.once("pollComplete",function(){--n||r()})),this.writable||(n++,this.once("drain",function(){--n||r()}))}else r()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const r=n=>{if(this.readyState==="opening"&&n.type==="open"&&this.onOpen(),n.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(n)};fz(t,this.socket.binaryType).forEach(r),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,dz(t,r=>{this.doWrite(r,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",r=this.query||{};return this.opts.timestampRequests!==!1&&(r[this.opts.timestampParam]=bk()),!this.supportsBinary&&!r.sid&&(r.b64=1),this.createUri(t,r)}}let vk=!1;try{vk=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const Sz=vk;function Pz(){}class kz extends Oz{constructor(t){if(super(t),typeof location<"u"){const r=location.protocol==="https:";let n=location.port;n||(n=r?"443":"80"),this.xd=typeof location<"u"&&t.hostname!==location.hostname||n!==t.port}}doWrite(t,r){const n=this.request({method:"POST",data:t});n.on("success",r),n.on("error",(o,a)=>{this.onError("xhr post error",o,a)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(r,n)=>{this.onError("xhr poll error",r,n)}),this.pollXhr=t}}let Ti=class sc extends Kt{constructor(t,r,n){super(),this.createRequest=t,of(this,n),this._opts=n,this._method=n.method||"GET",this._uri=r,this._data=n.data!==void 0?n.data:null,this._create()}_create(){var t;const r=gk(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");r.xdomain=!!this._opts.xd;const n=this._xhr=this.createRequest(r);try{n.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let o in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(o)&&n.setRequestHeader(o,this._opts.extraHeaders[o])}}catch{}if(this._method==="POST")try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{n.setRequestHeader("Accept","*/*")}catch{}(t=this._opts.cookieJar)===null||t===void 0||t.addCookies(n),"withCredentials"in n&&(n.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(n.timeout=this._opts.requestTimeout),n.onreadystatechange=()=>{var o;n.readyState===3&&((o=this._opts.cookieJar)===null||o===void 0||o.parseCookies(n.getResponseHeader("set-cookie"))),n.readyState===4&&(n.status===200||n.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof n.status=="number"?n.status:0)},0))},n.send(this._data)}catch(o){this.setTimeoutFn(()=>{this._onError(o)},0);return}typeof document<"u"&&(this._index=sc.requestsCount++,sc.requests[this._index]=this)}_onError(t){this.emitReserved("error",t,this._xhr),this._cleanup(!0)}_cleanup(t){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Pz,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete sc.requests[this._index],this._xhr=null}}_onLoad(){const t=this._xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};Ti.requestsCount=0;Ti.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",hx);else if(typeof addEventListener=="function"){const e="onpagehide"in on?"pagehide":"unload";addEventListener(e,hx,!1)}}function hx(){for(let e in Ti.requests)Ti.requests.hasOwnProperty(e)&&Ti.requests[e].abort()}const Ez=function(){const e=mk({xdomain:!1});return e&&e.responseType!==null}();class Rz extends kz{constructor(t){super(t);const r=t&&t.forceBase64;this.supportsBinary=Ez&&!r}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new Ti(mk,this.uri(),t)}}function mk(e){const t=e.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||Sz))return new XMLHttpRequest}catch{}if(!t)try{return new on[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const yk=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Nz extends Lb{get name(){return"websocket"}doOpen(){const t=this.uri(),r=this.opts.protocols,n=yk?{}:gk(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(t,r,n)}catch(o){return this.emitReserved("error",o)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let r=0;r{try{this.doWrite(n,a)}catch{}o&&nf(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",r=this.query||{};return this.opts.timestampRequests&&(r[this.opts.timestampParam]=bk()),this.supportsBinary||(r.b64=1),this.createUri(t,r)}}const Vp=on.WebSocket||on.MozWebSocket;class jz extends Nz{createSocket(t,r,n){return yk?new Vp(t,r,n):r?new Vp(t,r):new Vp(t)}doWrite(t,r){this.ws.send(r)}}class Az extends Lb{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(t){return this.emitReserved("error",t)}this._transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(t=>{const r=hz(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=t.readable.pipeThrough(r).getReader(),o=pz();o.readable.pipeTo(t.writable),this._writer=o.writable.getWriter();const a=()=>{n.read().then(({done:c,value:p})=>{c||(this.onPacket(p),a())}).catch(c=>{})};a();const i={type:"open"};this.query.sid&&(i.data=`{"sid":"${this.query.sid}"}`),this._writer.write(i).then(()=>this.onOpen())})})}write(t){this.writable=!1;for(let r=0;r{o&&nf(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const Mz={websocket:jz,webtransport:Az,polling:Rz},Iz=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Dz=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function mh(e){if(e.length>8e3)throw"URI too long";const t=e,r=e.indexOf("["),n=e.indexOf("]");r!=-1&&n!=-1&&(e=e.substring(0,r)+e.substring(r,n).replace(/:/g,";")+e.substring(n,e.length));let o=Iz.exec(e||""),a={},i=14;for(;i--;)a[Dz[i]]=o[i]||"";return r!=-1&&n!=-1&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=Lz(a,a.path),a.queryKey=Fz(a,a.query),a}function Lz(e,t){const r=/\/{2,9}/g,n=t.replace(r,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&n.splice(0,1),t.slice(-1)=="/"&&n.splice(n.length-1,1),n}function Fz(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(n,o,a){o&&(r[o]=a)}),r}const yh=typeof addEventListener=="function"&&typeof removeEventListener=="function",uc=[];yh&&addEventListener("offline",()=>{uc.forEach(e=>e())},!1);class Ho extends Kt{constructor(t,r){if(super(),this.binaryType=bz,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,t&&typeof t=="object"&&(r=t,t=null),t){const n=mh(t);r.hostname=n.host,r.secure=n.protocol==="https"||n.protocol==="wss",r.port=n.port,n.query&&(r.query=n.query)}else r.host&&(r.hostname=mh(r.host).host);of(this,r),this.secure=r.secure!=null?r.secure:typeof location<"u"&&location.protocol==="https:",r.hostname&&!r.port&&(r.port=this.secure?"443":"80"),this.hostname=r.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=r.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},r.transports.forEach(n=>{const o=n.prototype.name;this.transports.push(o),this._transportsByName[o]=n}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},r),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=Tz(this.opts.query)),yh&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},uc.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const r=Object.assign({},this.opts.query);r.EIO=hk,r.transport=t,this.id&&(r.sid=this.id);const n=Object.assign({},this.opts,{query:r,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new this._transportsByName[t](n)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const t=this.opts.rememberUpgrade&&Ho.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const r=this.createTransport(t);r.open(),this.setTransport(r)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",r=>this._onClose("transport close",r))}onOpen(){this.readyState="open",Ho.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const r=new Error("server error");r.code=t.data,this._onError(r);break;case"message":this.emitReserved("data",t.data),this.emitReserved("message",t.data);break}}onHandshake(t){this.emitReserved("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this._pingInterval=t.pingInterval,this._pingTimeout=t.pingTimeout,this._maxPayload=t.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const t=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+t,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},t),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this._getWritablePackets();this.transport.send(t),this._prevBufferLen=t.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let r=1;for(let n=0;n0&&r>this._maxPayload)return this.writeBuffer.slice(0,n);r+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const t=Date.now()>this._pingTimeoutTime;return t&&(this._pingTimeoutTime=0,nf(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),t}write(t,r,n){return this._sendPacket("message",t,r,n),this}send(t,r,n){return this._sendPacket("message",t,r,n),this}_sendPacket(t,r,n,o){if(typeof r=="function"&&(o=r,r=void 0),typeof n=="function"&&(o=n,n=null),this.readyState==="closing"||this.readyState==="closed")return;n=n||{},n.compress=n.compress!==!1;const a={type:t,data:r,options:n};this.emitReserved("packetCreate",a),this.writeBuffer.push(a),o&&this.once("flush",o),this.flush()}close(){const t=()=>{this._onClose("forced close"),this.transport.close()},r=()=>{this.off("upgrade",r),this.off("upgradeError",r),t()},n=()=>{this.once("upgrade",r),this.once("upgradeError",r)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?n():t()}):this.upgrading?n():t()),this}_onError(t){if(Ho.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",t),this._onClose("transport error",t)}_onClose(t,r){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),yh&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const n=uc.indexOf(this._offlineEventListener);n!==-1&&uc.splice(n,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,r),this.writeBuffer=[],this._prevBufferLen=0}}}Ho.protocol=hk;class Vz extends Ho{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let t=0;t{n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",_=>{if(!n)if(_.type==="pong"&&_.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",r),!r)return;Ho.priorWebsocketSuccess=r.name==="websocket",this.transport.pause(()=>{n||this.readyState!=="closed"&&(v(),this.setTransport(r),r.send([{type:"upgrade"}]),this.emitReserved("upgrade",r),r=null,this.upgrading=!1,this.flush())})}else{const O=new Error("probe error");O.transport=r.name,this.emitReserved("upgradeError",O)}}))};function a(){n||(n=!0,v(),r.close(),r=null)}const i=_=>{const O=new Error("probe error: "+_);O.transport=r.name,a(),this.emitReserved("upgradeError",O)};function c(){i("transport closed")}function p(){i("socket closed")}function g(_){r&&_.name!==r.name&&a()}const v=()=>{r.removeListener("open",o),r.removeListener("error",i),r.removeListener("close",c),this.off("close",p),this.off("upgrading",g)};r.once("open",o),r.once("error",i),r.once("close",c),this.once("close",p),this.once("upgrading",g),this._upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{n||r.open()},200):r.open()}onHandshake(t){this._upgrades=this._filterUpgrades(t.upgrades),super.onHandshake(t)}_filterUpgrades(t){const r=[];for(let n=0;nMz[o]).filter(o=>!!o)),super(t,n)}};function Bz(e,t="",r){let n=e;r=r||typeof location<"u"&&location,e==null&&(e=r.protocol+"//"+r.host),typeof e=="string"&&(e.charAt(0)==="/"&&(e.charAt(1)==="/"?e=r.protocol+e:e=r.host+e),/^(https?|wss?):\/\//.test(e)||(typeof r<"u"?e=r.protocol+"//"+e:e="https://"+e),n=mh(e)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";const a=n.host.indexOf(":")!==-1?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+a+":"+n.port+t,n.href=n.protocol+"://"+a+(r&&r.port===n.port?"":":"+n.port),n}const Wz=typeof ArrayBuffer=="function",Uz=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,wk=Object.prototype.toString,Hz=typeof Blob=="function"||typeof Blob<"u"&&wk.call(Blob)==="[object BlobConstructor]",$z=typeof File=="function"||typeof File<"u"&&wk.call(File)==="[object FileConstructor]";function Fb(e){return Wz&&(e instanceof ArrayBuffer||Uz(e))||Hz&&e instanceof Blob||$z&&e instanceof File}function cc(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let r=0,n=e.length;r=0&&e.num{delete this.acks[t];for(let c=0;c{this.io.clearTimeoutFn(a),r.apply(this,c)};i.withError=!0,this.acks[t]=i}emitWithAck(t,...r){return new Promise((n,o)=>{const a=(i,c)=>i?o(i):n(c);a.withError=!0,r.push(a),this.emit(t,...r)})}_addToQueue(t){let r;typeof t[t.length-1]=="function"&&(r=t.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((o,...a)=>n!==this._queue[0]?void 0:(o!==null?n.tryCount>this._opts.retries&&(this._queue.shift(),r&&r(o)):(this._queue.shift(),r&&r(null,...a)),n.pending=!1,this._drainQueue())),this._queue.push(n),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const r=this._queue[0];r.pending&&!t||(r.pending=!0,r.tryCount++,this.flags=r.flags,this.emit.apply(this,r.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:st.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,r){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,r),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(t=>{if(!this.sendBuffer.some(n=>String(n.id)===t)){const n=this.acks[t];delete this.acks[t],n.withError&&n.call(this,new Error("socket has been disconnected"))}})}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case st.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case st.EVENT:case st.BINARY_EVENT:this.onevent(t);break;case st.ACK:case st.BINARY_ACK:this.onack(t);break;case st.DISCONNECT:this.ondisconnect();break;case st.CONNECT_ERROR:this.destroy();const n=new Error(t.data.message);n.data=t.data.data,this.emitReserved("connect_error",n);break}}onevent(t){const r=t.data||[];t.id!=null&&r.push(this.ack(t.id)),this.connected?this.emitEvent(r):this.receiveBuffer.push(Object.freeze(r))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const r=this._anyListeners.slice();for(const n of r)n.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const r=this;let n=!1;return function(...o){n||(n=!0,r.packet({type:st.ACK,id:t,data:o}))}}onack(t){const r=this.acks[t.id];typeof r=="function"&&(delete this.acks[t.id],r.withError&&t.data.unshift(null),r.apply(this,t.data))}onconnect(t,r){this.id=t,this.recovered=r&&this._pid===r,this._pid=r,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:st.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const r=this._anyListeners;for(let n=0;n0&&e.jitter<=1?e.jitter:0,this.attempts=0}tl.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+r:e-r}return Math.min(e,this.max)|0};tl.prototype.reset=function(){this.attempts=0};tl.prototype.setMin=function(e){this.ms=e};tl.prototype.setMax=function(e){this.max=e};tl.prototype.setJitter=function(e){this.jitter=e};class _h extends Kt{constructor(t,r){var n;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(r=t,t=void 0),r=r||{},r.path=r.path||"/socket.io",this.opts=r,of(this,r),this.reconnection(r.reconnection!==!1),this.reconnectionAttempts(r.reconnectionAttempts||1/0),this.reconnectionDelay(r.reconnectionDelay||1e3),this.reconnectionDelayMax(r.reconnectionDelayMax||5e3),this.randomizationFactor((n=r.randomizationFactor)!==null&&n!==void 0?n:.5),this.backoff=new tl({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(r.timeout==null?2e4:r.timeout),this._readyState="closed",this.uri=t;const o=r.parser||Jz;this.encoder=new o.Encoder,this.decoder=new o.Decoder,this._autoConnect=r.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,t||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var r;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(r=this.backoff)===null||r===void 0||r.setMin(t),this)}randomizationFactor(t){var r;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(r=this.backoff)===null||r===void 0||r.setJitter(t),this)}reconnectionDelayMax(t){var r;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(r=this.backoff)===null||r===void 0||r.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new zz(this.uri,this.opts);const r=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const o=mn(r,"open",function(){n.onopen(),t&&t()}),a=c=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",c),t?t(c):this.maybeReconnectOnOpen()},i=mn(r,"error",a);if(this._timeout!==!1){const c=this._timeout,p=this.setTimeoutFn(()=>{o(),a(new Error("timeout")),r.close()},c);this.opts.autoUnref&&p.unref(),this.subs.push(()=>{this.clearTimeoutFn(p)})}return this.subs.push(o),this.subs.push(i),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(mn(t,"ping",this.onping.bind(this)),mn(t,"data",this.ondata.bind(this)),mn(t,"error",this.onerror.bind(this)),mn(t,"close",this.onclose.bind(this)),mn(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(r){this.onclose("parse error",r)}}ondecoded(t){nf(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,r){let n=this.nsps[t];return n?this._autoConnect&&!n.active&&n.connect():(n=new xk(this,t,r),this.nsps[t]=n),n}_destroy(t){const r=Object.keys(this.nsps);for(const n of r)if(this.nsps[n].active)return;this._close()}_packet(t){const r=this.encoder.encode(t);for(let n=0;nt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(t,r){var n;this.cleanup(),(n=this.engine)===null||n===void 0||n.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,r),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const r=this.backoff.duration();this._reconnecting=!0;const n=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(o=>{o?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",o)):t.onreconnect()}))},r);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const Ol={};function dc(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const r=Bz(e,t.path||"/socket.io"),n=r.source,o=r.id,a=r.path,i=Ol[o]&&a in Ol[o].nsps,c=t.forceNew||t["force new connection"]||t.multiplex===!1||i;let p;return c?p=new _h(n,t):(Ol[o]||(Ol[o]=new _h(n,t)),p=Ol[o]),r.query&&!t.query&&(t.query=r.queryKey),p.socket(r.path,t)}Object.assign(dc,{Manager:_h,Socket:xk,io:dc,connect:dc});const _k=A.createContext(null),zp={success:{container:"border-mossGreen-500/80 bg-mossGreen-900/90 text-white",accent:"bg-mossGreen-400"},warning:{container:"border-warmAmberGlow-500/80 bg-warmAmberGlow-900/90 text-white",accent:"bg-warmAmberGlow-400"},error:{container:"border-sunsetCoral-500/80 bg-sunsetCoral-900/90 text-white",accent:"bg-sunsetCoral-400"},info:{container:"border-arcticBlue-500 bg-arcticBlue-900/90 text-white",accent:"bg-arcticBlue-400"}},e6=6e3;function t6({children:e}){const[t,r]=A.useState([]),n=A.useRef(new Map),o=A.useCallback(c=>{r(g=>g.filter(v=>v.id!==c));const p=n.current.get(c);p&&typeof window<"u"&&window.clearTimeout(p),n.current.delete(c)},[]),a=A.useCallback(({id:c,title:p,description:g,variant:v="info",duration:_=e6}={})=>{const O=c??`${Date.now()}-${Math.random().toString(16).slice(2)}`,C=zp[v]?v:"info";if(r(T=>[...T.filter(b=>b.id!==O),{id:O,title:p,description:g,variant:C}]),_!==null&&_!==1/0&&typeof window<"u"){const T=window.setTimeout(()=>{o(O)},_),x=n.current.get(O);x&&window.clearTimeout(x),n.current.set(O,T)}return O},[o]);A.useEffect(()=>()=>{typeof window>"u"||(n.current.forEach(c=>window.clearTimeout(c)),n.current.clear())},[]);const i=A.useMemo(()=>({showToast:a,dismissToast:o}),[a,o]);return D.jsxs(_k.Provider,{value:i,children:[e,D.jsx("div",{className:"pointer-events-none fixed right-4 top-4 z-50 flex w-80 max-w-full flex-col gap-3",children:t.map(c=>{const p=zp[c.variant]??zp.info;return D.jsx("div",{className:`pointer-events-auto overflow-hidden rounded-lg border px-4 py-3 shadow-xl backdrop-blur ${p.container}`,children:D.jsxs("div",{className:"flex items-start gap-3",children:[D.jsx("span",{className:`mt-1 h-2 flex-shrink-0 w-2 rounded-full ${p.accent}`}),D.jsxs("div",{className:"flex-1",children:[c.title&&D.jsx("p",{className:"text-sm font-semibold",children:c.title}),c.description&&D.jsx("p",{className:"mt-1 text-sm leading-snug text-white/80",children:c.description})]}),D.jsx("button",{type:"button",onClick:()=>o(c.id),className:"ml-2 rounded-md p-1 text-xs uppercase tracking-wide text-white/60 transition hover:text-white/90",children:"Schließen"})]})},c.id)})})]})}function zb(){const e=A.useContext(_k);if(!e)throw new Error("useToast must be used within a ToastProvider");return e}const Tk=A.createContext(null),r6={maintenance:null,update:null,script:null,ssh:null,loading:!0,error:"",lastUpdated:null};function n6({children:e}){var b,d;const[t,r]=A.useState(r6),n=A.useRef(null),o=A.useRef(!1),a=A.useCallback(l=>{r(u=>({...u,...l}))},[]),i=A.useCallback(async()=>{var l,u;a({loading:!0,error:""});try{const h=(await Mt.get("/api/maintenance/config")).data??{};a({maintenance:h.maintenance??null,update:h.update??null,script:h.script??null,ssh:h.ssh??null,loading:!1,error:"",lastUpdated:new Date})}catch(s){const h=((u=(l=s.response)==null?void 0:l.data)==null?void 0:u.error)||s.message||"Fehler beim Laden der Wartungsdaten";a({loading:!1,error:h})}},[a]),c=A.useCallback(async()=>{var l,u;try{const h=(await Mt.get("/api/maintenance/update-status")).data??{};r(m=>({...m,maintenance:h.maintenance??m.maintenance,update:h.update??m.update,error:""}))}catch(s){const h=((u=(l=s.response)==null?void 0:l.data)==null?void 0:u.error)||s.message||"Fehler beim Aktualisieren des Wartungsstatus";r(m=>({...m,error:h}))}},[]);A.useEffect(()=>{i()},[i]),A.useEffect(()=>{var l;if((l=t.update)!=null&&l.running){c();const u=setInterval(()=>{c()},5e3);return n.current=u,()=>clearInterval(u)}n.current&&(clearInterval(n.current),n.current=null)},[(b=t.update)==null?void 0:b.running,c]),A.useEffect(()=>{var u;const l=!!((u=t.update)!=null&&u.running);!l&&o.current&&i(),o.current=l},[(d=t.update)==null?void 0:d.running,i]);const p=A.useCallback(async(l={})=>{await Mt.post("/api/maintenance/portainer-update",l),await c()},[c]),g=A.useCallback(async l=>{await Mt.put("/api/maintenance/update-script",{script:l}),await i()},[i]),v=A.useCallback(async()=>{await Mt.delete("/api/maintenance/update-script"),await i()},[i]),_=A.useCallback(async l=>{await Mt.put("/api/maintenance/ssh-config",l),await i()},[i]),O=A.useCallback(async()=>{await Mt.delete("/api/maintenance/ssh-config"),await i()},[i]),C=A.useCallback(async({active:l,message:u}={})=>{var w;const s={active:!!l};u!==void 0&&(s.message=u);const m=((w=(await Mt.post("/api/maintenance/mode",s)).data)==null?void 0:w.maintenance)??null;return a({maintenance:m,error:""}),m},[a]),T=A.useCallback(async l=>(await Mt.post("/api/maintenance/test-ssh",l??{})).data,[]),x=A.useMemo(()=>({maintenance:t.maintenance,update:t.update,script:t.script,ssh:t.ssh,loading:t.loading,error:t.error,lastUpdated:t.lastUpdated,refreshConfig:i,refreshUpdateStatus:c,setMaintenanceMode:C,triggerUpdate:p,saveScript:g,resetScript:v,saveSshConfig:_,deleteSshConfig:O,testSshConnection:T}),[t,i,c,C,p,g,v,_,O,T]);return D.jsx(Tk.Provider,{value:x,children:e})}function Bb(){const e=A.useContext(Tk);if(!e)throw new Error("useMaintenance must be used within a MaintenanceProvider");return e}const o6=[{value:"10",label:"10"},{value:"25",label:"25"},{value:"50",label:"50"},{value:"100",label:"100"},{value:"all",label:"Alle"}],bx="50",Ck=A.createContext(null),a6=(e,t)=>{const r=Number(e);if(Number.isFinite(r)&&r>0)return r;const n=Number(t);return Number.isFinite(n)&&n>0?n:1};function i6({children:e,initialPage:t=1,initialPerPage:r=bx,perPageOptions:n=o6}){const[o,a]=A.useState(t),[i,c]=A.useState(r),[p,g]=A.useState(0),[v,_]=A.useState(0),O=A.useRef(t),C=A.useRef(r),T=A.useMemo(()=>new Set(n.map(N=>String(N.value))),[n]),x=i==="all",b=A.useCallback(()=>x?null:a6(i,r),[i,x,r]),d=A.useCallback((N,j)=>{g(Math.max(0,Number(N)||0)),_(Math.max(0,Number(j)||0))},[]),l=A.useCallback(()=>{a(O.current??1),c(C.current??bx),g(0),_(0)},[]),u=A.useCallback((N,{resetPage:j=!0}={})=>{if(N==null)return;const I=String(N);T.has(I)&&(c(I),j&&a(1))},[T]),s=A.useCallback(N=>{var I;const j=typeof N=="string"?N:(I=N==null?void 0:N.target)==null?void 0:I.value;u(j,{resetPage:!0})},[u]),h=A.useCallback(N=>{if(x)return;const j=Number(N);if(!Number.isFinite(j)||j<1)return;const I=b();if(!I)return;const F=Math.max(1,Math.ceil((p||0)/I));j>F||a(j)},[x,b,p]),m=A.useMemo(()=>{if(x)return 1;const N=b();return N?Math.max(1,Math.ceil((p||0)/N)):1},[x,b,p]),w=A.useMemo(()=>{if(!p)return 0;if(x)return 1;const N=b();return(o-1)*N+1},[p,x,b,o]),E=A.useMemo(()=>{if(!p)return 0;if(x)return p;const N=b(),j=(o-1)*N+(v||N);return Math.min(p,j)},[p,x,b,o,v]),k=A.useMemo(()=>p?x?`Zeige alle ${p.toLocaleString()} Einträge`:`Zeige ${w.toLocaleString()} – ${E.toLocaleString()} von ${p.toLocaleString()} Einträgen`:"Keine Einträge",[p,x,w,E]),P=A.useMemo(()=>({page:o,perPage:i,perPageOptions:n,perPageIsAll:x,totalItems:p,visibleItems:v,totalPages:m,rangeStart:w,rangeEnd:E,summaryLabel:k,setPage:a,setPerPage:u,setTotals:d,setTotalItems:g,setVisibleItems:_,handlePageChange:h,handlePerPageChange:s,validPerPageValues:T,resetPagination:l}),[o,i,n,x,p,v,m,w,E,k,d,u,h,s,T,l]);return D.jsx(Ck.Provider,{value:P,children:e})}function Wb(){const e=A.useContext(Ck);if(!e)throw new Error("usePage must be used within a PageProvider");return e}function Ok({disabled:e=!1}){const{summaryLabel:t,perPageIsAll:r,page:n,totalPages:o,handlePageChange:a}=Wb();return D.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[D.jsx("span",{children:t}),!r&&D.jsxs("div",{className:"flex items-center gap-2",children:[D.jsx("button",{onClick:()=>a(n-1),disabled:e||n<=1,className:"rounded-md border border-slate-300 p-2.5 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-slate-800 hover:border-slate-800 focus:text-white focus:bg-slate-800 focus:border-slate-800 active:border-slate-800 active:text-white active:bg-slate-800 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none",type:"button",children:D.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"h-4 w-4",children:D.jsx("path",{d:"M11.03 3.97a.75.75 0 0 1 0 1.06l-6.22 6.22H21a.75.75 0 0 1 0 1.5H4.81l6.22 6.22a.75.75 0 1 1-1.06 1.06l-7.5-7.5a.75.75 0 0 1 0-1.06l7.5-7.5a.75.75 0 0 1 1.06 0Z"})})}),D.jsxs("p",{className:"text-slate-600",children:["Seite ",D.jsx("strong",{className:"text-slate-800",children:n})," / ",D.jsx("strong",{className:"text-slate-800",children:o})]}),D.jsx("button",{onClick:()=>a(n+1),disabled:e||n>=o,className:"rounded-md border border-slate-300 p-2.5 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-slate-800 hover:border-slate-800 focus:text-white focus:bg-slate-800 focus:border-slate-800 active:border-slate-800 active:text-white active:bg-slate-800 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none",type:"button",children:D.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"h-4 w-4",children:D.jsx("path",{d:"M12.97 3.97a.75.75 0 0 1 1.06 0l7.5 7.5a.75.75 0 0 1 0 1.06l-7.5 7.5a.75.75 0 1 1-1.06-1.06l6.22-6.22H3a.75.75 0 0 1 0-1.5h16.19l-6.22-6.22a.75.75 0 0 1 0-1.06Z"})})})]})]})}const ju="stackSelectionPreference",l6=30*1e3,s6=30*1e3;let ba={data:null,timestamp:0},Au=null;const ct={QUEUED:"queued",STARTED:"started",SUCCESS:"success",ERROR:"error",INFO:"info"},u6={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},c6=()=>!!ba.data&&Date.now()-ba.timestamp{ba={data:e,timestamp:Date.now()}},d6=e=>Array.isArray(e)?[...e].sort((t,r)=>((t==null?void 0:t.Name)||"").localeCompare((r==null?void 0:r.Name)||"")):[];function f6(){const[e,t]=A.useState(()=>d6(ba.data)),[r,n]=A.useState(()=>!ba.data),[o,a]=A.useState(""),[i,c]=A.useState([]),[p,g]=A.useState("all"),[v,_]=A.useState(""),[O,C]=A.useState(!1),[T,x]=A.useState(!1),[b,d]=A.useState(!1),{showToast:l}=zb(),{maintenance:u,update:s,script:h,ssh:m}=Bb(),w=!!(u!=null&&u.active),E=u==null?void 0:u.message,k=!!(s!=null&&s.running),P=w||k,N=s!=null&&s.stage?u6[s.stage]??s.stage:"–",{page:j,perPage:I,perPageOptions:F,setPage:W,setTotals:G,handlePerPageChange:X,resetPagination:H}=Wb(),B=A.useCallback(()=>{},[]);A.useEffect(()=>()=>H(),[H]),A.useEffect(()=>{P&&(n(!1),t([]),c([]))},[P]);const U=A.useRef(new Map),K=A.useCallback((ae,ge)=>{const Ae=new Map(ae.map(ve=>[ve.Id,ve]));return[...ge].sort((ve,Te)=>ve.Name.localeCompare(Te.Name)).map(ve=>{const Te=Ae.get(ve.Id);if(Te&&Te.updateStatus==="✅"&&ve.updateStatus==="⚠️"){const Xe=ve.Name?`${ve.Name} (ID: ${ve.Id})`:`Stack ${ve.Id}`;l({variant:"warning",title:"Aktualisierung gefunden",description:Xe})}let $e=ve.redeployPhase??(Te==null?void 0:Te.redeployPhase)??null;!$e&&(ve.redeploying||Te!=null&&Te.redeploying)&&($e=ct.STARTED);const lt=$e===ct.QUEUED,ht=$e===ct.STARTED;return{...ve,redeployPhase:$e,redeployQueued:lt,redeploying:lt||ht,redeployDisabled:ve.redeployDisabled??(Te==null?void 0:Te.redeployDisabled)??!1,duplicateName:ve.duplicateName??(Te==null?void 0:Te.duplicateName)??!1}})},[l]);A.useEffect(()=>{const ae=dc("/",{path:"/socket.io",transports:["websocket"]});return console.log("🔌 Socket connected"),ae.on("redeployStatus",async(ge={})=>{const{stackId:Ae}=ge;if(!Ae)return;let Me=Ae;if(typeof Ae=="string"){const Xe=Number(Ae);Number.isNaN(Xe)||(Me=Xe)}const ve=ge.redeployPhase??ge.phase;let Te=ve;Te?ve==="started"||ve==="running"?Te=ct.STARTED:ve==="queued"?Te=ct.QUEUED:ve==="success"?Te=ct.SUCCESS:ve==="error"?Te=ct.ERROR:ve==="info"&&(Te=ct.INFO):ge.isRedeploying===!0?Te=ct.STARTED:ge.isRedeploying===!1&&(Te=ct.SUCCESS);const $e=U.current.get(Me)??U.current.get(String(Me)),lt=ge.stackName??($e==null?void 0:$e.Name),ht=lt?`${lt} (ID: ${Me})`:`Stack ${Me}`;if(console.log(`🔄 Stack ${Me} Redeploy Update: ${Te??"unbekannt"}`),Te===ct.STARTED)l({variant:"info",title:"Redeploy gestartet",description:ht});else if(Te===ct.SUCCESS)l({variant:"success",title:"Redeploy abgeschlossen",description:ht});else if(Te===ct.ERROR){const Xe=ge.message?` – ${ge.message}`:"";l({variant:"error",title:"Redeploy fehlgeschlagen",description:`${ht}${Xe}`})}if(t(Xe=>Xe.map(Wt=>{if(String(Wt.Id)!==String(Me))return Wt;const lr=Te??Wt.redeployPhase??null,Ht=lr===ct.QUEUED,Kr=lr===ct.STARTED,oe=lr===ct.SUCCESS,he=lr===ct.ERROR,ke=Ht||Kr,Je={...Wt,redeployPhase:lr,redeployQueued:Ht,redeploying:ke};return oe&&(Je.updateStatus="✅",Je.redeploying=!1,Je.redeployQueued=!1),he&&(Je.redeploying=!1,Je.redeployQueued=!1),!ke&&!oe&&!he&&Te===void 0&&(Je.redeploying=!1,Je.redeployQueued=!1,Je.redeployPhase=Wt.redeployPhase??null),Je})),Te===ct.SUCCESS||Te===ct.ERROR||ge.isRedeploying===!1&&!Te)try{const Xe=await Mt.get("/api/stacks");vx(Xe.data),t(Wt=>K(Wt,Xe.data))}catch(Xe){console.error("Fehler beim Aktualisieren nach Redeploy:",Xe)}}),()=>ae.disconnect()},[]);const Q=A.useCallback(async({force:ae=!1,silent:ge=!1}={})=>{if(w||k){ge||n(!1);return}const Ae=!!ba.data;if(!ae&&Ae&&(t(ve=>K(ve,ba.data)),!ge&&(n(!1),c6())))return;const Me=!ge&&(!Ae||ae);Me&&n(!0);try{(ae||!Au)&&(Au=Mt.get("/api/stacks").then(Te=>(vx(Te.data),Te.data)).finally(()=>{Au=null}));const ve=await Au;t(Te=>K(Te,ve)),a("")}catch(ve){console.error("❌ Fehler beim Abrufen der Stacks:",ve),!Ae&&!ge&&a("Fehler beim Laden der Stacks")}finally{Me&&n(!1)}},[w,k,K]);A.useEffect(()=>{Q()},[Q]),A.useEffect(()=>{if(typeof document>"u"||w||k)return;const ae=setInterval(()=>{document.hidden||Q({force:!0,silent:!0})},s6);return()=>clearInterval(ae)},[Q,w,k]),A.useEffect(()=>{if(typeof document>"u"||w||k)return;const ae=()=>{document.hidden||Q({force:!0,silent:!0})};return document.addEventListener("visibilitychange",ae),()=>{document.removeEventListener("visibilitychange",ae)}},[Q,w,k]),A.useEffect(()=>{c(ae=>{const ge=ae.filter(Ae=>{const Me=e.find(Te=>Te.Id===Ae);if(!Me||Me.updateStatus==="✅"||Me.redeployDisabled)return!1;const ve=Me.redeployPhase;return!(ve===ct.STARTED||ve===ct.QUEUED)});return ge.length===ae.length?ae:ge})},[e]),A.useEffect(()=>{const ae=new Map;e.forEach(ge=>{ae.set(ge.Id,ge),ae.set(String(ge.Id),ge)}),U.current=ae},[e]);const ne=v.trim().toLowerCase(),ue=A.useMemo(()=>e.filter(ae=>!(p==="current"&&ae.updateStatus!=="✅"||p==="outdated"&&ae.updateStatus==="✅"||ne&&!`${ae.Name??""} ${ae.Id??""}`.toLowerCase().includes(ne))),[e,p,ne]),le=A.useMemo(()=>ue.filter(ae=>{if(ae.updateStatus==="✅"||ae.redeployDisabled)return!1;const ge=ae.redeployPhase;return!(ge===ct.STARTED||ge===ct.QUEUED)}),[ue]),re=A.useMemo(()=>{const ae=new Map;return e.forEach(ge=>{ae.set(ge.Id,ge)}),ae},[e]);A.useMemo(()=>new Set(ue.map(ae=>ae.Id)),[ue]);const be=A.useMemo(()=>{if(I==="all")return ue;const ae=Number(I),ge=(j-1)*ae;return ue.slice(ge,ge+ae)},[ue,I,j]);A.useEffect(()=>{G(ue.length,be.length)},[ue.length,be.length,G]);const fe=A.useRef({action:"keep",remember:!1}),ie=A.useRef({status:p,search:ne}),pe=A.useRef(!1);A.useEffect(()=>{if(!(typeof window>"u"))try{const ae=window.sessionStorage.getItem(ju);if(!ae)return;const ge=JSON.parse(ae);ge&&(ge.action==="keep"||ge.action==="clear")&&(fe.current={action:ge.action,remember:!0},d(!0))}catch(ae){console.error("⚠️ Konnte gespeicherte Auswahl-Einstellung nicht laden:",ae),fe.current={action:"keep",remember:!1}}},[]),A.useEffect(()=>{const ae=ne;if(!pe.current){pe.current=!0,ie.current={status:p,search:ae};return}const ge=ie.current;if(!(ge.status!==p||ge.search!==ae)){p==="all"&&ae.length===0&&O&&C(!1);return}if(ie.current={status:p,search:ae},i.length===0){C(!1);return}if(!(p!=="all"||ae.length>0)){C(!1);return}const ve=fe.current;if(ve!=null&&ve.remember){ve.action==="clear"&&c([]),C(!1);return}x(!!(ve!=null&&ve.remember)),C(!0)},[p,ne,i.length,O]),A.useEffect(()=>{i.length===0&&O&&C(!1)},[i.length,O]);const ce=p!=="all"||ne.length>0;A.useEffect(()=>{W(1)},[p,ne,W]),A.useEffect(()=>{if(I==="all"){j!==1&&W(1);return}const ae=Number(I)||1,ge=Math.max(1,Math.ceil(ue.length/ae));j>ge&&W(ge)},[ue.length,I,j,W]);const Oe=(ae,ge)=>{ge||c(Ae=>Ae.includes(ae)?Ae.filter(Me=>Me!==ae):[...Ae,ae])},Se=ae=>{const ge=T;if(typeof window<"u")try{if(ge){const Ae={action:ae,remember:!0};window.sessionStorage.setItem(ju,JSON.stringify(Ae)),fe.current=Ae}else window.sessionStorage.removeItem(ju),fe.current={action:ae,remember:!1}}catch(Ae){console.error("⚠️ Konnte Auswahl-Einstellung nicht speichern:",Ae),fe.current={action:ae,remember:!1}}else fe.current={action:ae,remember:!1};d(ge),x(ge),ae==="clear"&&c([]),C(!1)},Ce=()=>{if(typeof window<"u")try{window.sessionStorage.removeItem(ju)}catch(ae){console.error("⚠️ Konnte gespeicherte Auswahl-Einstellung nicht löschen:",ae)}fe.current={action:"keep",remember:!1},d(!1),x(!1),ce&&i.length>0&&C(!0)},_e=()=>{c([]),C(!1)},je=ae=>{c(ge=>ge.filter(Ae=>Ae!==ae))},Ge=async ae=>{const ge=U.current.get(ae),Ae=ge==null?void 0:ge.redeployPhase;if(!(Ae===ct.STARTED||Ae===ct.QUEUED)){c(Me=>Me.filter(ve=>ve!==ae)),t(Me=>Me.map(ve=>ve.Id===ae?{...ve,redeployPhase:ct.STARTED,redeploying:!0,redeployQueued:!1}:ve));try{await Mt.put(`/api/stacks/${ae}/redeploy`)}catch(Me){if(console.error("❌ Fehler beim Redeploy:",Me),t(ve=>ve.map(Te=>Te.Id===ae?{...Te,redeployPhase:null,redeploying:!1,redeployQueued:!1}:Te)),!Me.response){const ve=U.current.get(ae),Te=ve!=null&&ve.Name?`${ve.Name} (ID: ${ae})`:`Stack ${ae}`,$e=Me.message||"Unbekannter Fehler";l({variant:"error",title:"Redeploy fehlgeschlagen",description:`${Te} – ${$e}`})}}}},nt=async()=>{var Ae,Me;if(!le.length)return;const ae=le.map(ve=>ve.Id),ge=new Set(ae.map(ve=>String(ve)));t(ve=>ve.map(Te=>{const $e=String(Te.Id);return ge.has($e)?{...Te,redeployPhase:ct.QUEUED,redeploying:!0,redeployQueued:!0}:Te}));try{ce?await Mt.put("/api/stacks/redeploy-selection",{stackIds:ae}):await Mt.put("/api/stacks/redeploy-all"),c(ve=>ve.filter(Te=>!ge.has(String(Te))))}catch(ve){console.error("❌ Fehler beim Redeploy ALL:",ve),t($e=>$e.map(lt=>{const ht=String(lt.Id);return ge.has(ht)?{...lt,redeployPhase:null,redeploying:!1,redeployQueued:!1}:lt}));const Te=((Me=(Ae=ve.response)==null?void 0:Ae.data)==null?void 0:Me.error)||ve.message||"Unbekannter Fehler";l({variant:"error",title:"Redeploy ALL fehlgeschlagen",description:Te})}},ut=async()=>{var Ae,Me;if(!i.length)return;const ae=i.filter(ve=>{const Te=e.find(lt=>lt.Id===ve);if(!Te||Te.updateStatus==="✅"||Te.redeployDisabled)return!1;const $e=Te.redeployPhase;return!($e===ct.STARTED||$e===ct.QUEUED)});if(!ae.length){c([]);return}const ge=new Set(ae);t(ve=>ve.map(Te=>ge.has(Te.Id)?{...Te,redeployPhase:ct.QUEUED,redeploying:!0,redeployQueued:!0}:Te));try{await Mt.put("/api/stacks/redeploy-selection",{stackIds:ae}),c(ve=>ve.filter(Te=>!ge.has(Te)))}catch(ve){console.error("❌ Fehler beim Redeploy Auswahl:",ve),t($e=>$e.map(lt=>ge.has(lt.Id)?{...lt,redeployPhase:null,redeploying:!1,redeployQueued:!1}:lt));const Te=((Me=(Ae=ve.response)==null?void 0:Ae.data)==null?void 0:Me.error)||ve.message||"Unbekannter Fehler";l({variant:"error",title:"Redeploy Auswahl fehlgeschlagen",description:Te})}},ot=i.length>0,pt=le.length>0,We=ot?`Redeploy Auswahl (${i.length})`:"Redeploy Alle",xt=P||(ot?O||i.length===0||i.every(ae=>{const ge=e.find(Me=>Me.Id===ae);if(!ge||ge.updateStatus==="✅"||ge.redeployDisabled)return!0;const Ae=ge.redeployPhase;return Ae===ct.STARTED||Ae===ct.QUEUED}):!pt),Ke=()=>{if(P){l({variant:"warning",title:"Wartungsmodus aktiv",description:"Redeploy-Aktionen sind während des Wartungsmodus deaktiviert."});return}ot?ut():nt()};return D.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(w||k)&&D.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:D.jsxs("div",{className:"flex flex-col gap-1",children:[D.jsxs("span",{children:["Wartungsmodus aktiv",E?` – ${E}`:k?" – Portainer-Update läuft":"","."]}),k&&D.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",N]})]})}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"p-4 pt-2 pb-2",children:!r&&!o?D.jsx(xe.Typography,{variant:"h6",color:"white",children:D.jsx("span",{className:"flex items-center gap-2",children:D.jsx("span",{children:"Filter und Optionen"})})}):D.jsx(xe.Typography,{variant:"h6",color:"white",children:D.jsx("span",{className:"flex items-center gap-2",children:D.jsx("span",{children:"Lade Stacks"})})})}),D.jsxs(xe.CardBody,{children:[r?D.jsxs("p",{className:"flex py-6 text-center text-sm font-medium text-gray-400",children:[D.jsx(xe.Spinner,{className:"mr-2 h-4 w-4 flex"}),"Lade Stacks..."]}):o?D.jsx("p",{className:"py-6 text-sm font-medium text-red-400",children:o}):D.jsxs("div",{className:"gap-4",children:[D.jsx("div",{className:"w-full",children:D.jsxs(xe.ButtonGroup,{fullWidth:!0,children:[D.jsx(xe.Button,{onClick:()=>g("all"),children:"Alle"}),D.jsx(xe.Button,{onClick:()=>g("current"),children:"Aktuell"}),D.jsx(xe.Button,{onClick:()=>g("outdated"),children:"Veraltet"})]})}),D.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mt-8",children:[D.jsx("div",{className:"md:flex-1",children:D.jsx(xe.Input,{value:v,onChange:ae=>_(ae.target.value),variant:"static",placeholder:"Name oder ID"})}),D.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:D.jsx(xe.Select,{variant:"static",label:"Einträge pro Seite",onChange:B,value:I,children:F.map(({value:ae,label:ge})=>D.jsx(xe.Option,{value:ae,onClick:()=>X(ae),children:ge},ae))})})]}),D.jsx("div",{className:"flex items-center justify-end gap-3 mt-5",children:b&&D.jsx("button",{onClick:Ce,className:"block antialiased font-sans text-sm leading-normal text-inherit text-xs font-medium text-warmAmberGlow-500 underline underline-offset-2 transition hover:text-warmAmberGlow-600",children:"Gespeicherte Entscheidung löschen"})})]}),O&&D.jsx("div",{className:"flex flex-col mt-5",children:D.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-arcticBlue-800 bg-arcticBlue-900/90 px-4 py-3 text-arcticBlue-100 md:flex-row md:items-center md:justify-between",children:[D.jsxs("div",{className:"space-y-2 block antialiased font-sans text-sm font-light leading-normal text-inherit",children:[D.jsxs("p",{children:[i.length===1?"1 Stack ist weiterhin ausgewählt.":`${i.length} Stacks sind weiterhin ausgewählt.`," ","Soll die Auswahl entfernt werden?"]}),D.jsxs("label",{className:"flex items-center gap-2",children:[D.jsx("input",{type:"checkbox",checked:T,onChange:ae=>x(ae.target.checked),className:"h-4 w-4 rounded border border-arcticBlue-400 bg-arcticBlue-900 text-arcticBlue-400 focus:ring-arcticBlue-300"}),D.jsx("span",{className:"text-xs",children:"Einstellung merken (bis Browser geschlossen wird)"})]})]}),D.jsxs("div",{className:"flex gap-2",children:[D.jsx(xe.Button,{onClick:()=>Se("keep"),className:"rounded-md border border-arcticBlue-600 bg-arcticBlue-700 px-4 py-2 font-sans font-bold text-center uppercase transition-all hover:bg-arcticBlue-800",children:"Auswahl behalten"}),D.jsx(xe.Button,{onClick:()=>Se("clear"),className:"rounded-md border border-sunsetCoral-500 bg-sunsetCoral-600 px-4 py-2 font-sans font-bold text-center uppercase transition-all hover:bg-sunsetCoral-600",children:"Auswahl entfernen"})]})]})}),D.jsxs("div",{id:"collect",className:"mt-8 flex flex-col gap-4 md:flex-row md:items-start md:gap-6",children:[i.length>0&&D.jsx("div",{className:"w-full md:order-first order-last md:w-3/4",children:D.jsxs("div",{className:"flex flex-col gap-3 text-sm text-gray-300",children:[D.jsx("div",{className:"flex flex-wrap items-center gap-2",children:i.map(ae=>{const ge=re.get(ae),Ae=(ge==null?void 0:ge.Name)||`Stack ${ae}`;return D.jsxs("button",{type:"button",onClick:()=>je(ae),className:"inline-flex items-center gap-2 rounded-full bg-lavenderSmoke-600/80 px-2 py-0.5 text-white transition hover:bg-lavenderSmoke-600/90 focus:outline-none focus:ring-2 focus:ring-lavenderSmoke-400 cursor-pointer",children:[D.jsx("span",{children:Ae}),D.jsx("span",{className:"text-xs font-semibold text-lavenderSmoke-200",children:"x"})]},ae)})}),D.jsx("button",{type:"button",onClick:_e,className:"md:order-last self-start mt-1 text-xs font-medium text-gray-400 underline underline-offset-2 transition hover:text-gray-200",children:"Auswahl aufheben"})]})}),D.jsx("div",{className:"w-full md:w-1/4 md:ml-auto",children:D.jsx(xe.Button,{className:"w-full bg-arcticBlue-500 hover:bg-arcticBlue-600",onClick:Ke,disabled:xt,children:We})})]})]})]}),D.jsx("div",{className:"grid grid-cols-1 gap-6 md:grid-cols-2",children:be.map(ae=>{const ge=ae.redeployPhase,Ae=ge===ct.QUEUED,Me=ge===ct.STARTED,ve=Ae||Me,Te=i.includes(ae.Id),$e=ae.updateStatus==="✅",lt=!!ae.redeployDisabled,ht=!ve&&!$e&&!lt;return D.jsx(xe.Card,{children:D.jsxs(xe.CardBody,{className:`flex w-full text-stormGrey-500 items-center justify-between gap-4 rounded-xl shadow-lg transition border - ${Te?"border-purple-500 ring-1 ring-purple-500/40":"border-transparent"} - ${!ht||ve?"opacity-75 bg-stormGrey-200/20":""}`,children:[D.jsxs("div",{className:"flex items-center space-x-4",id:"left",children:[D.jsx("input",{type:"checkbox",checked:Te,onChange:()=>Oe(ae.Id,!ht),className:`h-5 w-5 text-purple-500 focus:ring-purple-400 border-gray-600 bg-gray-900 rounded ${ht?"":"opacity-40 cursor-not-allowed"}`,disabled:!ht}),D.jsx("div",{className:`w-12 h-12 flex items-center justify-center rounded-full - ${ae.updateStatus==="✅"?"bg-mossGreen-600":ae.updateStatus==="⚠️"?"bg-warmAmberGlow-400":"bg-sunsetCoral-500"}`}),D.jsxs("div",{children:[D.jsx("p",{className:"text-lg antialiased font-sans font-semibold leading-normal text-inherit",children:ae.Name}),D.jsxs("p",{className:"text-sm antialiased font-sans font-light leading-normal text-inherit",children:["ID: ",ae.Id]}),ae.duplicateName&&D.jsx("p",{className:"text-xs text-amber-700",children:"⚠️ Doppelter Name erkannt"})]})]}),D.jsx("div",{className:"ml-auto flex flex-col items-end gap-1 text-sm",id:"right",children:Me?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-warmAmberGlow-600",children:"Redeploy"}),D.jsx("span",{className:"text-warmAmberGlow-500",children:"läuft…"})]}):Ae?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-warmAmberGlow-600",children:"Redeploy"}),D.jsx("span",{className:"text-warmAmberGlow-500",children:"in Warteliste…"})]}):lt?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-stormGrey-500",children:"System"}),D.jsx("span",{className:"text-gray-300",children:"Redeploy deaktiviert"})]}):$e?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-stormGrey-500",children:"Status"}),D.jsx("span",{className:"text-mossGreen-600",children:"Aktuell"})]}):D.jsx(xe.Button,{onClick:()=>Ge(ae.Id),disabled:ve,className:"disabled:opacity-50 disabled:cursor-not-allowed",children:"Redeploy"})})]})},ae.Id)})}),D.jsx(Ok,{disabled:r||!!o})]})}const p6={idle:"Bereit",running:"Läuft",success:"Erfolgreich",error:"Fehlgeschlagen"},Sl={idle:"bg-stormGrey-700 text-gray-200",running:"bg-arcticBlue-600 text-white",success:"bg-mossGreen-600 text-white",error:"bg-sunsetCoral-600 text-white"},h6={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},g6={info:"text-arcticBlue-700",success:"text-mossGreen-700",warning:"text-warmAmberGlow-700",error:"text-sunsetCoral-700",stdout:"text-stormGrey-700",stderr:"text-warmAmberGlow-700",debug:"text-lavenderSmoke-700"},b6=e=>{if(!e)return"-";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})},ua=e=>{if(!e&&e!==0)return"-";const r=(n=>{if(n instanceof Date)return n;if(typeof n=="number"){const o=n>1e12?n:n*1e3;return new Date(o)}if(typeof n=="string"){const o=Number(n);if(!Number.isNaN(o)){const a=o>1e12?o:o*1e3;return new Date(a)}return new Date(n)}return null})(e);return!r||Number.isNaN(r.getTime())?String(e):r.toLocaleString("de-DE",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})},mx=e=>e===1?"Git":e===2?"Compose":e??"-",Bp=()=>({host:"",port:"22",username:"",password:"",extraSshArgs:""});function v6(){var Wa,fo,po;const{showToast:e}=zb(),{maintenance:t,update:r,script:n,ssh:o,loading:a,error:i,setMaintenanceMode:c,triggerUpdate:p,saveScript:g,resetScript:v,saveSshConfig:_,deleteSshConfig:O,testSshConnection:C}=Bb(),T=!!(t!=null&&t.active),x=t==null?void 0:t.message,b=(Wa=t==null?void 0:t.extra)==null?void 0:Wa.type,d=!!(r!=null&&r.running),[l,u]=A.useState(""),[s,h]=A.useState(!1),[m,w]=A.useState(!1),[E,k]=A.useState(""),[P,N]=A.useState(!1),[j,I]=A.useState(()=>Bp()),[F,W]=A.useState(!1),[G,X]=A.useState(!1),[H,B]=A.useState(!1),[U,K]=A.useState(!1),[Q,ne]=A.useState(!1),[ue,le]=A.useState(null);A.useEffect(()=>{if(!n)return;const ye=n.custom??n.default??n.effective??"";u(ye)},[n]),A.useEffect(()=>{if(!o){I(Bp()),W(!1),X(!1),le(null);return}I({host:o.host??"",port:String(o.port??"22"),username:o.username??"",password:"",extraSshArgs:Array.isArray(o.extraSshArgs)?o.extraSshArgs.join(` -`):""}),W(!!o.passwordStored),X(!1),le(null)},[o]);const re=A.useMemo(()=>n?n.source==="custom"&&typeof n.custom=="string"?n.custom:n.default??n.effective??"":"",[n]),be=n?l!==re:!1,fe=(n==null?void 0:n.source)==="custom"?"Benutzerdefiniert":"Standard",[ie,pe]=A.useState([]),[ce,Oe]=A.useState(!0),[Se,Ce]=A.useState(""),[_e,je]=A.useState(!1),[Ge,nt]=A.useState(null),[ut,ot]=A.useState(null),pt=A.useRef(null),[We,xt]=A.useState(null),[Ke,ae]=A.useState(!0),[ge,Ae]=A.useState(""),[Me,ve]=A.useState(!1),[Te,$e]=A.useState(null),lt=A.useRef(null),ht=A.useCallback(async({silent:ye=!1}={})=>{if(lt.current)return lt.current;const Ve=(async()=>{var ze,tt;ye?ve(!0):ae(!0),Ae("");try{const $t=(await Mt.get("/api/maintenance/portainer-status")).data??{};xt($t),$e(new Date)}catch(bt){const $t=((tt=(ze=bt.response)==null?void 0:ze.data)==null?void 0:tt.error)||bt.message||"Fehler beim Prüfen des Portainer-Status";Ae($t),e({variant:"error",title:"Statusaktualisierung fehlgeschlagen",description:$t})}finally{ye?ve(!1):ae(!1),lt.current=null}})();return lt.current=Ve,Ve},[e]),zt=A.useCallback(async({silent:ye=!1}={})=>{if(T||d){pe([]),Ce("Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert."),Oe(!1),je(!1);return}if(pt.current)return pt.current;const Ve=(async()=>{var ze,tt,bt;ye?je(!0):Oe(!0),Ce("");try{const jt=(await Mt.get("/api/maintenance/duplicates")).data,Dr=Array.isArray(jt)?jt:(jt==null?void 0:jt.items)??[];pe(Dr),ot(new Date)}catch($t){if(((ze=$t.response)==null?void 0:ze.status)===423){const jt="Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.";pe([]),Ce(jt),e({variant:"warning",title:"Duplikat-Verwaltung gesperrt",description:jt})}else{const jt=((bt=(tt=$t.response)==null?void 0:tt.data)==null?void 0:bt.error)||$t.message||"Fehler beim Laden der Wartungsdaten";Ce(jt),e({variant:"error",title:"Duplikate konnten nicht geladen werden",description:jt})}}finally{ye?je(!1):Oe(!1),pt.current=null}})();return pt.current=Ve,Ve},[T,d,e]);A.useEffect(()=>{ht()},[ht]),A.useEffect(()=>{zt()},[zt]);const Xe=A.useMemo(()=>{const ye=Array.isArray(ie)?ie.length:0,Ve=Array.isArray(ie)?ie.reduce((ze,tt)=>{var bt;return ze+(((bt=tt==null?void 0:tt.duplicates)==null?void 0:bt.length)||0)},0):0;return{groups:ye,duplicateCount:Ve}},[ie]),Wt=A.useCallback((ye,Ve)=>{I(ze=>({...ze,[ye]:Ve})),ye==="password"&&W(!1)},[]),lr=A.useMemo(()=>{const ye={host:j.host.trim(),port:Number.parseInt(j.port,10)||22,username:j.username.trim(),extraSshArgs:(j.extraSshArgs||"").split(/\r?\n/).map(ze=>ze.trim()).filter(Boolean)},Ve=j.password??"";return Ve?ye.password=Ve:F||(ye.password=""),ye},[j,F]),Ht=A.useCallback(async()=>{var ye,Ve;if(n)try{h(!0),await g(l),e({variant:"success",title:"Skript gespeichert",description:"Das benutzerdefinierte Portainer-Update-Skript wurde aktualisiert."})}catch(ze){const tt=((Ve=(ye=ze.response)==null?void 0:ye.data)==null?void 0:Ve.error)||ze.message||"Skript konnte nicht gespeichert werden";e({variant:"error",title:"Speichern fehlgeschlagen",description:tt})}finally{h(!1)}},[g,l,n,e]),Kr=A.useCallback(async()=>{var ye,Ve;try{h(!0),await v(),e({variant:"info",title:"Standardskript wiederhergestellt",description:"Es wird wieder das Standard-Update-Skript verwendet."})}catch(ze){const tt=((Ve=(ye=ze.response)==null?void 0:ye.data)==null?void 0:Ve.error)||ze.message||"Standardskript konnte nicht wiederhergestellt werden";e({variant:"error",title:"Zurücksetzen fehlgeschlagen",description:tt})}finally{h(!1)}},[v,e]),oe=A.useCallback(async()=>{var ye,Ve;try{B(!0),await _(lr),le(null),X(!1),e({variant:"success",title:"SSH-Konfiguration gespeichert",description:"Verbindungseinstellungen wurden aktualisiert."})}catch(ze){const tt=((Ve=(ye=ze.response)==null?void 0:ye.data)==null?void 0:Ve.error)||ze.message||"SSH-Konfiguration konnte nicht gespeichert werden";e({variant:"error",title:"Speichern fehlgeschlagen",description:tt})}finally{B(!1)}},[lr,_,e]),he=A.useCallback(async()=>{var ye,Ve;try{K(!0);const ze=await C(lr);le({success:!0,timestamp:new Date,details:ze==null?void 0:ze.result}),e({variant:"success",title:"SSH-Verbindung erfolgreich",description:"Verbindung zum Portainer-Host wurde hergestellt."})}catch(ze){const tt=((Ve=(ye=ze.response)==null?void 0:ye.data)==null?void 0:Ve.error)||ze.message||"SSH-Verbindung fehlgeschlagen";le({success:!1,timestamp:new Date,error:tt}),e({variant:"error",title:"SSH-Test fehlgeschlagen",description:tt})}finally{K(!1)}},[lr,C,e]),ke=A.useCallback(async()=>{var ye,Ve;try{ne(!0),await O(),I(Bp()),W(!1),X(!1),le(null),e({variant:"info",title:"SSH-Konfiguration gelöscht",description:"Die Verbindungseinstellungen wurden zurückgesetzt."})}catch(ze){const tt=((Ve=(ye=ze.response)==null?void 0:ye.data)==null?void 0:Ve.error)||ze.message||"SSH-Konfiguration konnte nicht gelöscht werden";e({variant:"error",title:"Löschen fehlgeschlagen",description:tt})}finally{ne(!1)}},[O,e]),Je=A.useCallback(async ye=>{var Ve,ze;if(!(a||P)&&ye!==T){if(d){e({variant:"warning",title:"Aktion nicht möglich",description:"Während eines laufenden Updates kann der Wartungsmodus nicht geändert werden."});return}N(!0);try{const tt=ye&&!!b,bt={active:ye};tt&&x?bt.message=x:bt.message=null,await c(bt),e({variant:ye?"info":"success",title:ye?"Wartungsmodus aktiviert":"Wartungsmodus deaktiviert",description:ye?"Benutzer sehen jetzt die Wartungsseite.":"StackPulse steht wieder zur Verfügung."})}catch(tt){const bt=((ze=(Ve=tt.response)==null?void 0:Ve.data)==null?void 0:ze.error)||tt.message||"Wartungsmodus konnte nicht geändert werden";e({variant:"error",title:"Änderung fehlgeschlagen",description:bt})}finally{N(!1)}}},[a,P,T,d,c,x,b,e]),at=A.useCallback(async()=>{var Ve,ze;if(T||d){e({variant:"warning",title:"Update nicht möglich",description:"Während eines aktiven Wartungsmodus kann kein weiteres Update gestartet werden."});return}const ye=(We==null?void 0:We.latestVersion)??(We==null?void 0:We.currentVersion)??"unbekannt";if(!(typeof window<"u"&&!window.confirm(`Portainer-Update starten? -Zielversion: ${ye}. -Während des Updates befindet sich StackPulse im Wartungsmodus. -Fortfahren?`)))try{k(""),w(!0),await p(),e({variant:"info",title:"Update gestartet",description:"Das Portainer-Update wurde gestartet."})}catch(tt){const bt=((ze=(Ve=tt.response)==null?void 0:Ve.data)==null?void 0:ze.error)||tt.message||"Portainer-Update konnte nicht gestartet werden";k(bt),e({variant:"error",title:"Update fehlgeschlagen",description:bt})}finally{w(!1)}},[T,d,We,p,e]),gt=A.useCallback(async ye=>{var bt,$t,jt,Dr;if(!ye)return;if(T||d){e({variant:"warning",title:"Aktion nicht möglich",description:"Während des Wartungsmodus sind Bereinigungen deaktiviert."});return}const Ve=(bt=ye.canonical)==null?void 0:bt.Id;if(!Ve)return;const ze=(ye.duplicates||[]).map(tr=>tr.Id).filter(Boolean);if(!ze.length)return;const tt=(($t=ye.canonical)==null?void 0:$t.Name)||ye.name||`Stack ${Ve}`;if(!(typeof window<"u"&&!window.confirm(`Bereinigung für "${tt}" starten? -Es werden ${ze.length} Duplikate entfernt: ${ze.join(", ")}`))){nt(String(Ve));try{const Xr=(await Mt.post("/api/maintenance/duplicates/cleanup",{canonicalId:Ve,duplicateIds:ze})).data??{};if(Xr.success===!1)throw new Error(Xr.error||"Bereinigung fehlgeschlagen");const ta=Array.isArray(Xr.results)?Xr.results.filter(fn=>fn.status==="deleted").map(fn=>fn.id):ze;e({variant:"success",title:"Bereinigung abgeschlossen",description:`${tt} – entfernte IDs: ${ta.join(", ")}`}),await zt({silent:!0})}catch(tr){const Xr=((Dr=(jt=tr.response)==null?void 0:jt.data)==null?void 0:Dr.error)||tr.message||"Bereinigung fehlgeschlagen";e({variant:"error",title:"Bereinigung fehlgeschlagen",description:Xr})}finally{nt(null)}}},[zt,T,e,d]);t!=null&&t.activatedAt&&ua(t.activatedAt),t!=null&&t.updatedAt&&ua(t.updatedAt);const Ze=T||d,Tt=(r==null?void 0:r.status)??(d?"running":"idle"),er=p6[Tt]??Tt,Zo=Sl[Tt]??Sl.idle,Or=r!=null&&r.stage?h6[r.stage]??r.stage:"–",$n=(r==null?void 0:r.logs)??[],uo=(r==null?void 0:r.targetVersion)??"-",za=(r==null?void 0:r.resultVersion)??"-",co=r!=null&&r.startedAt?ua(r.startedAt):"-",Yr=r!=null&&r.finishedAt?ua(r.finishedAt):"-",Ba=(r==null?void 0:r.message)??(d?"Update läuft…":""),ea=d||s||a;return D.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(T||d)&&D.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:D.jsxs("div",{className:"flex flex-col gap-1",children:[D.jsxs("span",{children:["Wartungsmodus aktiv",x?` – ${x}`:d?" – Portainer-Update läuft":"","."]}),d&&D.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",Or]})]})}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:D.jsx(xe.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:D.jsx("span",{children:"Wartungsmodus"})})}),D.jsxs(xe.CardBody,{className:"flex flex-col gap-4 p-4",children:[D.jsxs("div",{className:"flex items-start justify-between gap-4",children:[D.jsx("div",{className:"space-y-1",children:D.jsx("p",{className:"text-sm antialiased font-sans text-sm font-light leading-normal text-inherit",children:"Schaltet StackPulse für Benutzer in den Wartungsmodus."})}),D.jsx(xe.Switch,{checked:T,disabled:P||a||d,onChange:ye=>Je(ye.target.checked),ripple:!1,color:"amber"})]}),P&&D.jsx("p",{className:"text-xs text-stormGrey-500",children:"Wartungsmodus wird aktualisiert…"})]})]}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:D.jsx(xe.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:D.jsx("span",{children:"Portainer"})})}),D.jsxs(xe.CardBody,{className:"flex flex-col gap-4 p-4 pt-0",children:[D.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[D.jsxs("div",{children:[D.jsx("h2",{className:"block antialiased font-sans text-lg font-semibold",children:"Portainer Status"}),D.jsx("p",{className:"block antialiased font-sans text-sm font-light leading-normal text-inherit",children:Ke?"Status wird geprüft…":ge||(d?"Portainer wird aktuell aktualisiert.":(We==null?void 0:We.updateAvailable)===!0?"Es ist ein Update für Portainer verfügbar.":"Portainer ist auf dem aktuellen Stand.")}),Te&&!Ke&&D.jsxs("p",{className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:["Stand: ",Te.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})]})]}),D.jsx("div",{className:"flex items-center gap-3",children:D.jsx(xe.Button,{onClick:()=>ht({silent:!1}),disabled:Ke||Me,className:"w-full",children:"Status aktualisieren"})})]}),D.jsx("div",{className:"flex flex-col gap-4 mt-5 space-y-4 block antialiased font-sans text-sm font-light leading-normal text-inherit",children:!Ke&&!ge&&We&&D.jsxs("div",{className:"",children:[D.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[D.jsx("span",{children:"Installierte Version"}),D.jsx("span",{className:"font-medium",children:We.currentVersion??"Unbekannt"})]}),D.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[D.jsx("span",{children:"Neueste Version"}),D.jsx("span",{className:"font-medium",children:We.latestVersion??"Unbekannt"})]}),D.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[D.jsx("span",{children:"Status"}),D.jsx("span",{className:`rounded-full px-3 py-0.5 text-xs font-semibold ${We.updateAvailable===!0?Sl.error:We.updateAvailable===!1?Sl.success:Sl.idle}`,children:We.updateAvailable===!0?"Update verfügbar":We.updateAvailable===!1?"Aktuell":"Unbekannt"})]}),We.edition&&D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{className:"text-stormGrey-400",children:"Edition"}),D.jsx("span",{className:"font-medium",children:We.edition})]}),We.build&&D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{className:"text-stormGrey-400",children:"Build"}),D.jsx("span",{className:"font-medium",children:We.build})]}),((fo=We.errors)==null?void 0:fo.latestVersion)&&D.jsxs("div",{className:"rounded-md mt-8 border bg-sunsetCoral-600 text-white px-3 py-2 text-xs",children:["Neueste Version konnte nicht ermittelt werden: ",We.errors.latestVersion]}),((po=We.errors)==null?void 0:po.container)&&D.jsxs("div",{className:"rounded-md mt-8 border bg-sunsetCoral-600 text-white px-3 py-2 text-xs",children:["Container-Details konnten nicht ermittelt werden: ",We.errors.container]})]})}),D.jsxs("div",{className:"mt-6 grid gap-6 lg:grid-cols-2 xl:grid-cols-3",children:[D.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[D.jsx("div",{className:"flex items-center justify-between",children:D.jsx("h3",{className:"text-sm font-semibold",children:"SSH-Verbindung"})}),D.jsxs("div",{className:"mt-3 grid gap-3 text-sm",children:[D.jsxs("label",{className:"grid gap-1",children:[D.jsx("span",{className:"text-xs uppercase tracking-wide",children:"Host"}),D.jsx("input",{type:"text",value:j.host,onChange:ye=>Wt("host",ye.target.value),disabled:H||U||Q||d,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]}),D.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[D.jsxs("label",{className:"grid gap-1",children:[D.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Port"}),D.jsx("input",{type:"number",min:"1",value:j.port,onChange:ye=>Wt("port",ye.target.value),disabled:H||U||Q||d,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]}),D.jsxs("label",{className:"grid gap-1",children:[D.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Benutzer"}),D.jsx("input",{type:"text",value:j.username,onChange:ye=>Wt("username",ye.target.value),disabled:H||U||Q||d,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]})]}),D.jsxs("div",{className:"grid gap-1",children:[D.jsxs("div",{className:"flex items-center justify-between text-xs uppercase tracking-wide ",children:[D.jsx("label",{htmlFor:"maintenance-ssh-password",className:"cursor-pointer",children:"Passwort"}),D.jsx("button",{type:"button",onClick:()=>X(ye=>!ye),disabled:H||U||Q||d,className:"text-[11px] font-medium text-blue-500 transition hover:text-blue-800 disabled:opacity-50",children:G?"Verbergen":"Anzeigen"})]}),D.jsx("input",{id:"maintenance-ssh-password",type:G?"text":"password",value:j.password,onChange:ye=>Wt("password",ye.target.value),disabled:H||U||Q||d,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none",placeholder:"Passwort für den SSH-Benutzer",autoComplete:"off",spellCheck:!1}),F&&!j.password&&D.jsx("span",{className:"text-[11px] ",children:"Ein Passwort ist gespeichert. Neuer Inhalt ersetzt es oder lösche die Konfiguration unten."})]}),D.jsxs("label",{className:"grid gap-1",children:[D.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Weitere SSH-Argumente"}),D.jsx("textarea",{rows:3,value:j.extraSshArgs,onChange:ye=>Wt("extraSshArgs",ye.target.value),disabled:H||U||Q||d,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 font-mono text-[11px] focus:border-purple-500 focus:outline-none",placeholder:"je Zeile ein Argument (optional)"})]})]}),D.jsxs("div",{className:"mt-4 grid gap-2",children:[D.jsx(xe.Button,{onClick:oe,disabled:H||U||Q||d,className:"mt-3 w-full",children:H?"Speichern…":"SSH-Konfiguration speichern"}),D.jsx(xe.Button,{onClick:he,disabled:H||U||Q||d,className:"w-full bg-arcticBlue-500 hover:bg-arcticBlue-600",children:U?"Test läuft…":"Verbindung testen"}),D.jsx(xe.Button,{onClick:ke,disabled:H||U||Q||d,className:"w-full hover:bg-sunsetCoral-600 bg-sunsetCoral-500",children:Q?"Löschen…":"SSH-Einstellungen löschen"})]}),ue&&D.jsx("p",{className:`mt-3 text-xs ${ue.success?"text-mossGreen-600":"text-sunsetCoral-500"}`,children:ue.success?"SSH-Verbindung erfolgreich.":`SSH-Verbindung fehlgeschlagen: ${ue.error}`})]}),D.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("h3",{className:"text-sm font-semibold",children:"Update-Skript"}),D.jsxs("span",{className:"text-xs",children:["Quelle: ",fe]})]}),D.jsx("textarea",{value:l,onChange:ye=>u(ye.target.value),rows:10,disabled:s||d,className:"mt-3 w-full rounded-md border border-gray-700/20 px-3 py-2 font-mono text-xs focus:border-purple-500 focus:outline-none"}),D.jsxs("div",{className:"mt-3 grid gap-2",children:[D.jsx(xe.Button,{onClick:Ht,disabled:!be||s||d,className:"mt-3 w-full",children:"Speichern"}),D.jsx(xe.Button,{color:"purple",onClick:Kr,disabled:!n||n.source!=="custom"||s||d,className:"w-full hover:bg-sunsetCoral-600 bg-sunsetCoral-500",children:"Standard wiederherstellen"})]}),(n==null?void 0:n.customUpdatedAt)&&D.jsxs("p",{className:"mt-2 text-xs text-stormGrey-500",children:["Zuletzt geändert: ",ua(n.customUpdatedAt)]})]}),D.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("h3",{className:"text-sm font-semibold",children:"Update-Status"}),D.jsx("span",{className:`rounded-full px-3 py-0.5 text-xs font-semibold ${Zo}`,children:er})]}),D.jsxs("div",{className:"mt-3 grid gap-2 text-xs",children:[D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{children:"Phase"}),D.jsx("span",{className:"font-medium",children:Or})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{children:"Ziel-Version"}),D.jsx("span",{className:"font-medium",children:uo})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{children:"Installierte Version"}),D.jsx("span",{className:"font-medium",children:za})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{children:"Gestartet"}),D.jsx("span",{children:co})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{children:"Beendet"}),D.jsx("span",{children:Yr})]}),Ba&&D.jsx("div",{className:"rounded-md border border-mossGreen-700 bg-mossGreen-800 px-3 py-2 text-xs text-white",children:Ba}),(r==null?void 0:r.error)&&D.jsx("div",{className:"rounded-md border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-3 py-2 text-xs text-white",children:r.error}),E&&D.jsx("div",{className:"rounded-md border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-3 py-2 text-xs text-white",children:E})]}),D.jsx("div",{className:"mt-3 h-40 overflow-y-auto rounded-md border border-gray-700/20 bg-gray-950/70 p-3 font-mono text-[11px] leading-relaxed",children:$n.length===0?D.jsx("p",{className:"text-stormGrey-500",children:"Noch keine Protokolle vorhanden."}):$n.map((ye,Ve)=>D.jsxs("div",{className:"mb-2 last:mb-0",children:[D.jsxs("span",{className:"text-gray-500",children:["[",b6(ye.timestamp),"]"]})," ",D.jsx("span",{className:(g6[ye.level]??"text-stormGrey-300")+" whitespace-normal break-words",style:{overflowWrap:"anywhere",wordBreak:"normal"},children:ye.message})]},`${ye.timestamp}-${Ve}`))}),D.jsx(xe.Button,{onClick:at,disabled:ea||m,className:"mt-3 w-full",children:m?"Update wird gestartet…":"Portainer aktualisieren"})]})]})]})]}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:D.jsx(xe.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:D.jsx("span",{children:"Doppelte Stacks"})})}),D.jsxs(xe.CardBody,{className:"flex flex-col gap-4 p-4",children:[D.jsx("div",{className:"rounded-lg border border-warmAmberGlow-600 bg-warmAmberGlow-700 px-4 py-3 text-sm text-white",children:"Das Entfernen von deppelten Stacks ist noch nicht getestet. Bitte nicht in Produktivumgebungen einsetzen."}),D.jsxs("div",{className:"flex items-start justify-between gap-4",children:[D.jsxs("div",{className:"space-y-1",children:[D.jsx("p",{className:"text-sm antialiased font-sans text-sm font-light leading-normal text-inherit",children:Ze?"Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.":ce?"Analyse läuft…":Xe.groups===0?"Keine Duplikate gefunden":`${Xe.groups} Stack-Namen mit insgesamt ${Xe.duplicateCount} Duplikaten gefunden`}),ut&&!ce&&!Ze&&D.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:["Stand: ",ut.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})]})]}),D.jsx(xe.Button,{onClick:()=>zt({silent:!1}),disabled:Ze||ce||_e||Ge!==null,className:"",children:"Aktualisieren"}),Se&&!Ze&&D.jsx("div",{className:"rounded-lg border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-4 py-3 text-sm text-white",children:Se})]}),ce?D.jsx("div",{className:"flex flex-col gap-4 p-4",children:"Daten werden geladen…"}):Xe.groups===0||Ze?D.jsx("div",{className:"rounded-xl border-mossGreen-500/80 bg-mossGreen-900/90 text-mossGreen-100 p-8 text-center text-sm text-white",children:Ze?"Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.":"Es wurden keine doppelten Stacks gefunden."}):D.jsx("div",{className:"space-y-5",children:ie.map(ye=>{var bt,$t,jt,Dr;const Ve=(bt=ye==null?void 0:ye.canonical)==null?void 0:bt.Id,ze=(ye==null?void 0:ye.duplicates)||[],tt=Ge===String(Ve);return D.jsxs("div",{className:"rounded-xl border border-gray-700 bg-gray-800/70 p-6 shadow",children:[D.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[D.jsxs("div",{className:"space-y-1",children:[D.jsxs("div",{className:"flex items-center gap-2",children:[D.jsx("h3",{className:"text-lg font-semibold text-white",children:ye.name}),D.jsxs("span",{className:"rounded-full bg-amber-500/20 px-3 py-0.5 text-xs font-medium text-amber-200",children:[ze.length," Duplikat",ze.length===1?"":"e"]})]}),D.jsxs("p",{className:"text-sm text-gray-300",children:["Behaltener Stack: ID ",Ve," (Endpoint ",(($t=ye==null?void 0:ye.canonical)==null?void 0:$t.EndpointId)??"-",")"]}),D.jsxs("p",{className:"text-xs text-gray-500",children:["Typ: ",mx((jt=ye==null?void 0:ye.canonical)==null?void 0:jt.Type)," • Erstellt: ",ua((Dr=ye==null?void 0:ye.canonical)==null?void 0:Dr.Created)]})]}),D.jsx("button",{type:"button",onClick:()=>gt(ye),disabled:Ze||tt||_e||ce,className:"self-start rounded-lg bg-sunsetCoral-500 px-4 py-2 text-sm font-semibold text-white transition hover:bg-sunsetCoral-600 disabled:opacity-50",children:tt?"Bereinigung läuft…":`Bereinigen (${ze.length})`})]}),D.jsx("div",{className:"mt-5 grid gap-3",children:ze.map(tr=>D.jsx("div",{className:"rounded-lg border border-sunsetCoral-500/40 bg-sunsetCoral-900/20 p-4 text-sm text-white",children:D.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[D.jsxs("span",{className:"font-semibold text-white",children:["ID: ",tr.Id]}),D.jsxs("span",{children:["Endpoint: ",tr.EndpointId??"-"]}),D.jsxs("span",{children:["Typ: ",mx(tr.Type)]}),D.jsxs("span",{children:["Erstellt: ",ua(tr.Created)]})]})},tr.Id))})]},Ve||ye.name)})})]})]})]})}const m6={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},Ml=Bn.forwardRef(({value:e,onClick:t,onKeyDown:r,...n},o)=>{const{setOpen:a}=xe.useSelect(),i=A.useCallback(()=>{(typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame:v=>setTimeout(v,0))(()=>{a(!0)})},[a]),c=A.useCallback(g=>{typeof t=="function"&&t(g),i()},[t,i]),p=A.useCallback(g=>{typeof r=="function"&&r(g),(g.key==="Enter"||g.key===" ")&&i()},[r,i]);return D.jsx(xe.Option,{...n,value:e,ref:o,onClick:c,onKeyDown:p})});Ml.displayName="StickyOption";const y6={success:"text-mossGreen-500",warning:"text-warmAmberGlow-500",error:"text-sunsetCoral-500",started:"text-arcticBlue-500"},w6=e=>{if(!e)return"-";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("de-DE",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})},yx=e=>{if(e)return e.replace("T"," ")},wx="redeployLogFilters",Pr="__all__",Mu="- Alle -",Wp={Einzeln:"Einzeln",Alle:"Alle",Auswahl:"Auswahl",single:"Einzeln",all:"Alle",selection:"Auswahl"},x6=e=>!!(e.stacks&&e.stacks.length||e.statuses&&e.statuses.length||e.endpoints&&e.endpoints.length||e.redeployTypes&&e.redeployTypes.length||e.message&&e.message.trim()||e.from&&e.from.trim()||e.to&&e.to.trim());function _6(){const[e,t]=A.useState([]),[r,n]=A.useState(!0),[o,a]=A.useState(""),[i,c]=A.useState(!1),[p,g]=A.useState([]),[v,_]=A.useState([]),[O,C]=A.useState([]),[T,x]=A.useState([]),[b,d]=A.useState([]),[l,u]=A.useState([]),[s,h]=A.useState([]),[m,w]=A.useState([]),[E,k]=A.useState(""),[P,N]=A.useState(""),[j,I]=A.useState(""),[F,W]=A.useState(!1),[G,X]=A.useState(!1),[H,B]=A.useState(!1),[U,K]=A.useState(0);zb();const{maintenance:Q,update:ne,script:ue,ssh:le}=Bb(),re=!!(Q!=null&&Q.active),be=Q==null?void 0:Q.message,fe=!!(ne!=null&&ne.running),ie=ne!=null&&ne.stage?m6[ne.stage]??ne.stage:"–",{page:pe,perPage:ce,perPageOptions:Oe,setPage:Se,setPerPage:Ce,setTotals:_e,handlePerPageChange:je,validPerPageValues:Ge,resetPagination:nt}=Wb(),ut=A.useCallback(()=>{},[]);A.useEffect(()=>()=>nt(),[nt]);const ot=A.useCallback(oe=>{const he=Array.isArray(oe)?oe:(oe==null?void 0:oe.items)??[],ke=new Map,Je=new Set,at=new Set,gt=new Set;he.forEach(Ze=>{if(Ze.stackId){const Tt=String(Ze.stackId),er=Ze.stackName||`Stack ${Tt}`;ke.set(Tt,er)}Ze.status&&Je.add(Ze.status),Ze.endpoint!==null&&Ze.endpoint!==void 0&&Ze.endpoint!==""&&at.add(String(Ze.endpoint)),Ze.redeployType&>.add(Ze.redeployType)}),g(Array.from(ke.entries()).map(([Ze,Tt])=>({value:Ze,label:Tt})).sort((Ze,Tt)=>Ze.label.localeCompare(Tt.label))),_(Array.from(Je).sort()),C(Array.from(at).sort((Ze,Tt)=>Ze.localeCompare(Tt,void 0,{numeric:!0}))),x(Array.from(gt).sort()),B(!0)},[]),pt=A.useMemo(()=>{const oe=new Map;return p.forEach(he=>{oe.set(he.value,he.label)}),oe},[p]);A.useEffect(()=>{H&&d(oe=>{const he=oe.filter(ke=>p.some(Je=>Je.value===ke));return he.length===oe.length?oe:he})},[H,p]),A.useEffect(()=>{H&&u(oe=>{const he=oe.filter(ke=>v.includes(ke));return he.length===oe.length?oe:he})},[H,v]),A.useEffect(()=>{H&&h(oe=>{const he=oe.filter(ke=>O.includes(ke));return he.length===oe.length?oe:he})},[H,O]),A.useEffect(()=>{H&&w(oe=>{const he=oe.filter(ke=>T.includes(ke));return he.length===oe.length?oe:he})},[H,T]),A.useEffect(()=>{if(typeof window>"u"){X(!0);return}try{const oe=window.localStorage.getItem(wx);if(oe){const he=JSON.parse(oe),ke=(he==null?void 0:he.filters)??he??{},Je=(he==null?void 0:he.pagination)??{};d(ke.stacks||[]),u(ke.statuses||[]),h(ke.endpoints||[]),w(ke.redeployTypes||[]),k(ke.message||""),N(ke.from||""),I(ke.to||""),W(x6(ke));const at=Je.perPage;if(at!==void 0){const Ze=String(at);Ge.has(Ze)&&Ce(Ze,{resetPage:!1})}const gt=Je.page;typeof gt=="number"&>>0&&Se(gt)}}catch(oe){console.error("❌ Fehler beim Laden der gespeicherten Log-Filter:",oe)}finally{X(!0)}},[Se,Ce,Ge]);const We=A.useCallback(()=>{const oe={};b.length&&(oe.stackIds=b.join(",")),l.length&&(oe.statuses=l.join(",")),s.length&&(oe.endpoints=s.join(",")),m.length&&(oe.redeployTypes=m.join(",")),E.trim()&&(oe.message=E.trim());const he=yx(P);he&&(oe.from=he);const ke=yx(j);return ke&&(oe.to=ke),oe},[b,l,s,m,E,P,j]);A.useEffect(()=>{if(!G)return;let oe=!1;return Mt.get("/api/logs",{params:{perPage:"all",page:1}}).then(he=>{oe||ot(he.data)}).catch(he=>{oe||console.error("⚠️ Konnte Filteroptionen nicht aktualisieren:",he)}),()=>{oe=!0}},[G,ot,U]);const xt=A.useMemo(()=>({stacks:b,statuses:l,endpoints:s,redeployTypes:m,message:E,from:P,to:j}),[b,l,s,m,E,P,j]);A.useEffect(()=>{if(!G)return;const oe={...We()};ce==="all"?(oe.perPage="all",oe.page=1):(oe.perPage=ce,oe.page=pe);let he=!1;return n(!0),a(""),Mt.get("/api/logs",{params:oe}).then(ke=>{if(he)return;const Je=ke.data||{},at=Array.isArray(Je)?Je:Je.items??[],gt=Array.isArray(Je)?at.length:Je.total??at.length;if(t(at),_e(gt,at.length),ce==="all")pe!==1&&Se(1);else{const Ze=Math.max(1,Math.ceil((gt||0)/Number(ce))),Tt=Math.min(Math.max(pe,1),Ze);Tt!==pe&&Se(Tt)}}).catch(ke=>{he||(console.error("❌ Fehler beim Laden der Logs:",ke),a("Fehler beim Laden der Redeploy-Logs"))}).finally(()=>{he||n(!1)}),()=>{he=!0}},[G,We,ot,U,ce,pe,_e]),A.useEffect(()=>{if(G&&!(typeof window>"u"))try{window.localStorage.setItem(wx,JSON.stringify({filters:xt,pagination:{perPage:ce,page:pe}}))}catch(oe){console.error("⚠️ Konnte Filter nicht speichern:",oe)}},[G,xt,ce,pe]);const Ke=A.useCallback(oe=>he=>{var at;if(typeof he=="string"){const gt=he;if(gt==="")return;oe(Ze=>gt===Pr?[]:Ze.includes(gt)?Ze.filter(Tt=>Tt!==gt):[...Ze,gt]),Se(1);return}const ke=(at=he==null?void 0:he.target)==null?void 0:at.selectedOptions;if(!ke)return;const Je=Array.from(ke).map(gt=>gt.value);Je.includes(Pr)?oe([]):oe(Je),Se(1)},[Se]),ae=A.useMemo(()=>Ke(d),[Ke,d]),ge=A.useMemo(()=>Ke(u),[Ke,u]),Ae=A.useMemo(()=>Ke(w),[Ke,w]),Me=A.useMemo(()=>Ke(h),[Ke,h]),ve=(oe,he)=>{oe(ke=>ke.filter(Je=>Je!==he)),Se(1)},Te=()=>{d([]),u([]),h([]),w([]),k(""),N(""),I(""),W(!1),Se(1)},$e=()=>{W(oe=>!oe)},lt=A.useMemo(()=>{const oe=p.filter(he=>he.value!==Pr);return[{value:Pr,label:Mu},...oe]},[p]),ht=A.useMemo(()=>{const oe=v.filter(he=>he!==Pr).map(he=>({value:he,label:he}));return[{value:Pr,label:Mu},...oe]},[v]),zt=A.useMemo(()=>{const oe=O.filter(he=>he!==Pr).map(he=>({value:he,label:he}));return[{value:Pr,label:Mu},...oe]},[O]),Xe=A.useMemo(()=>{const oe=T.filter(he=>he!==Pr).map(he=>({value:he,label:Wp[he]??he}));return[{value:Pr,label:Mu},...oe]},[T]),Wt=A.useMemo(()=>{let oe=0;return b.length&&(oe+=b.length),l.length&&(oe+=l.length),s.length&&(oe+=s.length),m.length&&(oe+=m.length),E.trim()&&(oe+=1),P&&(oe+=1),j&&(oe+=1),oe},[b,l,s,E,P,j]),lr=async oe=>{if(window.confirm("Diesen Log-Eintrag dauerhaft löschen?")){c(!0),a("");try{await Mt.delete(`/api/logs/${oe}`),K(he=>he+1)}catch(he){console.error("❌ Fehler beim Löschen des Logs:",he),a("Fehler beim Löschen des Redeploy-Logs")}finally{c(!1)}}},Ht=async()=>{if(e.length&&window.confirm("Alle angezeigten Logs (entsprechend Filter) löschen?")){c(!0),a("");try{const oe={...We(),ids:e.map(he=>he.id).join(",")};await Mt.delete("/api/logs",{params:oe}),K(he=>he+1)}catch(oe){console.error("❌ Fehler beim Löschen der gefilterten Logs:",oe),a("Fehler beim Löschen der gefilterten Logs")}finally{c(!1)}}},Kr=async oe=>{c(!0),a("");try{const he=await Mt.get("/api/logs/export",{params:{...We(),format:oe},responseType:"blob"}),ke=he.headers["content-type"]||(oe==="sql"?"application/sql":"text/plain"),at=(he.headers["content-disposition"]||"").match(/filename="?([^";]+)"?/i),gt=(at==null?void 0:at[1])||`redeploy-logs.${oe}`,Ze=new Blob([he.data],{type:ke}),Tt=window.URL.createObjectURL(Ze),er=document.createElement("a");er.href=Tt,er.download=gt,document.body.appendChild(er),er.click(),er.remove(),window.URL.revokeObjectURL(Tt)}catch(he){console.error("❌ Fehler beim Export der Logs:",he),a("Fehler beim Export der Redeploy-Logs")}finally{c(!1)}};return Bn.useState(!1),D.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(re||fe)&&D.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:D.jsxs("div",{className:"flex flex-col gap-1",children:[D.jsxs("span",{children:["Wartungsmodus aktiv",be?` – ${be}`:fe?" – Portainer-Update läuft":"","."]}),fe&&D.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",ie]})]})}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"p-4 pt-2 pb-2",children:D.jsx(xe.Typography,{variant:"h6",color:"white",children:D.jsxs("button",{onClick:$e,className:"flex w-full items-center justify-between",children:[D.jsxs("span",{className:"flex items-center gap-2",children:[D.jsx("span",{children:"Filter und Optionen"}),Wt>0&&D.jsxs("span",{className:"rounded-full bg-blue-gray-500/80 px-2 py-0.5 text-xs text-white",children:[Wt," aktiv"]})]}),D.jsx("span",{className:"text-xs uppercase tracking-wide text-gray-400",children:F?"Ausblenden":"Anzeigen"})]})})}),D.jsx(xe.CardBody,{children:F&&D.jsxs("div",{children:[D.jsxs("div",{className:"flex flex-wrap gap-2",children:[D.jsx(xe.Button,{onClick:()=>Kr("txt"),disabled:i||r,className:"w-full md:flex-1",children:"Export TXT"}),D.jsx(xe.Button,{onClick:()=>Kr("sql"),disabled:i||r,className:"w-full md:flex-1",children:"Export SQL"}),D.jsx(xe.Button,{onClick:Ht,disabled:i||r||e.length===0,className:"w-full md:flex-1 bg-sunsetCoral-500 hover:bg-sunsetCoral-600",children:"Angezeigte löschen"})]}),D.jsxs("div",{className:"flex flex-wrap gap-2 mt-10",children:[D.jsxs("div",{className:"grid gap-4 flex-1",children:[D.jsx(xe.Select,{multiple:!0,onChange:ut,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Stacks",children:lt.map(({value:oe,label:he})=>D.jsx(Ml,{value:oe,onClick:()=>ae(oe),onKeyDown:ke=>{(ke.key==="Enter"||ke.key===" ")&&(ke.preventDefault(),ae(oe))},className:`text-black-600 ${oe===Pr?"font-semibold text-black-800":""}`,children:he},oe))}),D.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:b.length===0?D.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white ",children:"Alle Stacks"}):D.jsx("span",{children:b.map(oe=>D.jsx("button",{type:"button",onClick:()=>ve(d,oe),className:"rounded-full bg-lavenderSmoke-600/80 px-2 py-0.5 text-white transition hover:bg-lavenderSmoke-600/90 focus:outline-none focus:ring-2 focus:ring-lavenderSmoke-400 cursor-pointer",title:"Filter entfernen",children:pt.get(oe)??`Stack ${oe}`},oe))})})]}),D.jsxs("div",{className:"grid gap-4 flex-1",children:[D.jsx(xe.Select,{multiple:!0,onChange:ut,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Status",children:ht.map(({value:oe,label:he})=>D.jsx(Ml,{value:oe,onClick:()=>ge(oe),onKeyDown:ke=>{(ke.key==="Enter"||ke.key===" ")&&(ke.preventDefault(),ge(oe))},className:`text-black-600 ${oe===Pr?"font-semibold text-black-800":""}`,children:he},oe))}),D.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:l.length===0?D.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Status"}):D.jsx("span",{children:l.map(oe=>D.jsx("button",{type:"button",onClick:()=>ve(u,oe),className:"rounded-full bg-copperRust-600/80 px-2 py-0.5 text-white transition hover:bg-copperRust-600/90 focus:outline-none focus:ring-2 focus:ring-copperRust-400 cursor-pointer",title:"Filter entfernen",children:oe},oe))})})]}),D.jsxs("div",{className:"grid gap-4 flex-1",children:[D.jsx(xe.Select,{multiple:!0,onChange:ut,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Redeploy-Typ",children:Xe.map(({value:oe,label:he})=>D.jsx(Ml,{value:oe,onClick:()=>Ae(oe),onKeyDown:ke=>{(ke.key==="Enter"||ke.key===" ")&&(ke.preventDefault(),Ae(oe))},className:`text-black-600 ${oe===Pr?"font-semibold text-black-800":""}`,children:he},oe))}),D.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:m.length===0?D.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Typen"}):D.jsx("span",{children:m.map(oe=>D.jsx("button",{type:"button",onClick:()=>ve(w,oe),className:"rounded-full bg-citrusPunch-600/80 px-2 py-0.5 text-white transition hover:bg-citrusPunch-600/90 focus:outline-none focus:ring-2 focus:ring-citrusPunch-400 cursor-pointer",title:"Filter entfernen",children:Wp[oe]??oe},oe))})})]}),D.jsxs("div",{className:"grid gap-4 flex-1",children:[D.jsx(xe.Select,{multiple:!0,onChange:ut,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Endpoints",children:zt.map(({value:oe,label:he})=>D.jsx(Ml,{value:oe,onClick:()=>Me(oe),onKeyDown:ke=>{(ke.key==="Enter"||ke.key===" ")&&(ke.preventDefault(),Me(oe))},className:`text-black-600 ${oe===Pr?"font-semibold text-black-800":""}`,children:he},oe))}),D.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:s.length===0?D.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Endpoints"}):D.jsx("span",{children:s.map(oe=>D.jsxs("button",{type:"button",onClick:()=>ve(h,oe),className:"rounded-full bg-emeraldMist-500/80 px-2 py-0.5 text-white transition hover:bg-emeraldMist-500/90 focus:outline-none focus:ring-2 focus:ring-emeraldMist-400 cursor-pointer",title:"Filter entfernen",children:["Endpoint ",oe]},oe))})})]})]}),D.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mt-8",children:[D.jsx("div",{className:"md:flex-1",children:D.jsx(xe.Input,{value:E,onChange:oe=>{k(oe.target.value),Se(1)},variant:"static",label:"Nachricht (Freitext)",placeholder:"Suche"})}),D.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:D.jsx(xe.Select,{variant:"static",label:"Einträge pro Seite",onChange:ut,value:ce,children:Oe.map(({value:oe,label:he})=>D.jsx(xe.Option,{value:oe,onClick:()=>je(oe),children:he},oe))})})]}),D.jsxs("div",{className:"flex flex-col md:flex-row flex-wrap gap-4 mt-8",children:[D.jsx("div",{className:"flex-1",children:D.jsx(xe.Input,{type:"datetime-local",variant:"static",label:"Von",value:P,onChange:oe=>{N(oe.target.value),Se(1)},className:"w-full"})}),D.jsx("div",{className:"flex-1",children:D.jsx(xe.Input,{type:"datetime-local",variant:"static",label:"Bis",value:j,onChange:oe=>{I(oe.target.value),Se(1)},className:"w-full"})}),D.jsx("div",{className:"flex-1",children:D.jsx(xe.Button,{onClick:Te,disabled:i||r,className:"w-full",children:"Zurücksetzen"})})]})]})})]}),D.jsxs(xe.Card,{children:[D.jsx(xe.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:D.jsx(xe.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:D.jsx("span",{children:"Logs"})})}),D.jsx(xe.CardBody,{className:"overflow-x-scroll px-0 pt-0 pb-2",children:D.jsxs("table",{className:"w-full min-w-[640px] table-auto",children:[D.jsx("thead",{children:D.jsx("tr",{children:["Zeitpunkt","Stack","Art","Status","Nachricht","Endpoint","Aktionen"].map(oe=>D.jsx("th",{className:"border-b border-stormGrey-50 py-3 px-5 text-left",children:D.jsx(xe.Typography,{variant:"small",className:"text-[11px] font-bold uppercase text-stormGrey-400",children:oe})},oe))})}),D.jsx("tbody",{children:e.map(oe=>{const he=y6[oe.status]||"text-blue-300",ke="py-3 px-5",Je=oe.stackName||"Unbekannt",at=Je!=="---"&&oe.stackId!==void 0&&oe.stackId!==null,gt=oe.redeployType?Wp[oe.redeployType]??oe.redeployType:"---";return D.jsxs("tr",{children:[D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",className:"mb-1 block text-xs font-medium text-stormGrey-600",children:w6(oe.timestamp)})}),D.jsx("td",{className:ke,children:D.jsxs("div",{className:"flex flex-col",children:[D.jsx("span",{className:"font-medium",children:Je}),D.jsx(xe.Typography,{variant:"small",children:at&&D.jsxs("span",{className:"text-xs text-stormGrey-400",children:["ID: ",oe.stackId]})})]})}),D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",children:gt})}),D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",className:`font-semibold ${he}`,children:oe.status})}),D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",children:oe.message||"-"})}),D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",children:oe.endpoint??"-"})}),D.jsx("td",{className:ke,children:D.jsx(xe.Typography,{variant:"small",children:D.jsx("button",{onClick:()=>lr(oe.id),disabled:i,className:"rounded-md border border-sunsetCoral-600 px-3 py-1 text-xs text-sunsetCoral-800 transition hover:bg-sunsetCoral-600/20 disabled:opacity-60",children:"Löschen"})})})]},oe.id)})})]})})]}),D.jsx(Ok,{disabled:i})]})}const Up={className:"w-5 h-5 text-inherit"},Th=[{layout:"dashboard",pages:[{icon:D.jsx(sM,{...Up}),name:"stacks",path:"/stacks",element:D.jsx(f6,{})},{icon:D.jsx(dM,{...Up}),name:"wartung",path:"/maintenance",element:D.jsx(v6,{})},{icon:D.jsx(aM,{...Up}),name:"logs",path:"/logs",element:D.jsx(_6,{})}]}];function Sk(){const[e,t]=Yd(),{sidenavType:r}=e;return D.jsxs("div",{className:"min-h-screen bg-blue-gray-50/50",children:[D.jsx(Xd,{routes:Th,brandImg:r==="dark"?"/img/logo-ct.png":"/img/logo-ct-dark.png"}),D.jsxs("div",{className:"p-4 xl:ml-80",children:[D.jsx(DP,{}),D.jsx(LP,{}),D.jsx(xe.IconButton,{size:"lg",color:"white",className:"fixed bottom-8 right-8 z-40 rounded-full shadow-blue-gray-900/10 xl:hidden",ripple:!1,onClick:()=>Pb(t,!0),children:D.jsx($T,{className:"h-5 w-5"})}),D.jsx(_g,{children:Th.map(({layout:n,pages:o})=>n==="dashboard"&&o.map(({path:a,element:i})=>D.jsx(mi,{exact:!0,path:a,element:i})))}),D.jsx("div",{className:"text-blue-gray-600",children:D.jsx(FP,{})})]})]})}Sk.displayName="/src/layout/dashboard.jsx";function Pk(){return D.jsx("div",{className:"relative min-h-screen w-full",children:D.jsx(_g,{children:Th.map(({layout:e,pages:t})=>e==="auth"&&t.map(({path:r,element:n})=>D.jsx(mi,{exact:!0,path:r,element:n})))})})}Pk.displayName="/src/layout/Auth.jsx";function T6(){return D.jsxs(_g,{children:[D.jsx(mi,{path:"/dashboard/*",element:D.jsx(Sk,{})}),D.jsx(mi,{path:"/auth/*",element:D.jsx(Pk,{})}),D.jsx(mi,{path:"*",element:D.jsx(DA,{to:"/dashboard/stacks",replace:!0})})]})}Hp.createRoot(document.getElementById("root")).render(D.jsx(Bn.StrictMode,{children:D.jsx(HA,{children:D.jsx(n6,{children:D.jsx(t6,{children:D.jsx(i6,{children:D.jsx(xe.ThemeProvider,{children:D.jsx(Sb,{children:D.jsx(T6,{})})})})})})})})); diff --git a/backend/public/assets/index-71db1823.js b/backend/public/assets/index-71db1823.js new file mode 100644 index 0000000..634e285 --- /dev/null +++ b/backend/public/assets/index-71db1823.js @@ -0,0 +1,93 @@ +function $j(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();function t_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function lu(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}),r}var r_={exports:{}},tf={},n_={exports:{}},xt={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var uu=Symbol.for("react.element"),Hj=Symbol.for("react.portal"),qj=Symbol.for("react.fragment"),Gj=Symbol.for("react.strict_mode"),Kj=Symbol.for("react.profiler"),Yj=Symbol.for("react.provider"),Qj=Symbol.for("react.context"),Xj=Symbol.for("react.forward_ref"),Zj=Symbol.for("react.suspense"),Jj=Symbol.for("react.memo"),e2=Symbol.for("react.lazy"),uy=Symbol.iterator;function t2(e){return e===null||typeof e!="object"?null:(e=uy&&e[uy]||e["@@iterator"],typeof e=="function"?e:null)}var o_={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},a_=Object.assign,i_={};function _s(e,t,r){this.props=e,this.context=t,this.refs=i_,this.updater=r||o_}_s.prototype.isReactComponent={};_s.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};_s.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function s_(){}s_.prototype=_s.prototype;function bg(e,t,r){this.props=e,this.context=t,this.refs=i_,this.updater=r||o_}var vg=bg.prototype=new s_;vg.constructor=bg;a_(vg,_s.prototype);vg.isPureReactComponent=!0;var cy=Array.isArray,l_=Object.prototype.hasOwnProperty,yg={current:null},u_={key:!0,ref:!0,__self:!0,__source:!0};function c_(e,t,r){var n,o={},a=null,i=null;if(t!=null)for(n in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(a=""+t.key),t)l_.call(t,n)&&!u_.hasOwnProperty(n)&&(o[n]=t[n]);var c=arguments.length-2;if(c===1)o.children=r;else if(1t=>{const r=f2.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),ro=e=>(e=e.toLowerCase(),t=>rf(t)===e),nf=e=>t=>typeof t===e,{isArray:Ss}=Array,Ml=nf("undefined");function p2(e){return e!==null&&!Ml(e)&&e.constructor!==null&&!Ml(e.constructor)&&ln(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const p_=ro("ArrayBuffer");function h2(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&p_(e.buffer),t}const g2=nf("string"),ln=nf("function"),h_=nf("number"),of=e=>e!==null&&typeof e=="object",m2=e=>e===!0||e===!1,Ec=e=>{if(rf(e)!=="object")return!1;const t=_g(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},b2=ro("Date"),v2=ro("File"),y2=ro("Blob"),x2=ro("FileList"),w2=e=>of(e)&&ln(e.pipe),_2=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||ln(e.append)&&((t=rf(e))==="formdata"||t==="object"&&ln(e.toString)&&e.toString()==="[object FormData]"))},S2=ro("URLSearchParams"),[C2,T2,O2,P2]=["ReadableStream","Request","Response","Headers"].map(ro),k2=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function cu(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),Ss(e))for(n=0,o=e.length;n0;)if(o=r[n],t===o.toLowerCase())return o;return null}const qa=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),m_=e=>!Ml(e)&&e!==qa;function Lh(){const{caseless:e}=m_(this)&&this||{},t={},r=(n,o)=>{const a=e&&g_(t,o)||o;Ec(t[a])&&Ec(n)?t[a]=Lh(t[a],n):Ec(n)?t[a]=Lh({},n):Ss(n)?t[a]=n.slice():t[a]=n};for(let n=0,o=arguments.length;n(cu(t,(o,a)=>{r&&ln(o)?e[a]=f_(o,r):e[a]=o},{allOwnKeys:n}),e),E2=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),j2=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},A2=(e,t,r,n)=>{let o,a,i;const c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),a=o.length;a-- >0;)i=o[a],(!n||n(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=r!==!1&&_g(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},R2=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return n!==-1&&n===r},M2=e=>{if(!e)return null;if(Ss(e))return e;let t=e.length;if(!h_(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},I2=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&_g(Uint8Array)),D2=(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const a=o.value;t.call(e,a[0],a[1])}},L2=(e,t)=>{let r;const n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},F2=ro("HTMLFormElement"),z2=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),fy=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),B2=ro("RegExp"),b_=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};cu(r,(o,a)=>{let i;(i=t(o,a,e))!==!1&&(n[a]=i||o)}),Object.defineProperties(e,n)},V2=e=>{b_(e,(t,r)=>{if(ln(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const n=e[r];if(ln(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},U2=(e,t)=>{const r={},n=o=>{o.forEach(a=>{r[a]=!0})};return Ss(e)?n(e):n(String(e).split(t)),r},W2=()=>{},$2=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Lp="abcdefghijklmnopqrstuvwxyz",py="0123456789",v_={DIGIT:py,ALPHA:Lp,ALPHA_DIGIT:Lp+Lp.toUpperCase()+py},H2=(e=16,t=v_.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function q2(e){return!!(e&&ln(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const G2=e=>{const t=new Array(10),r=(n,o)=>{if(of(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;const a=Ss(n)?[]:{};return cu(n,(i,c)=>{const f=r(i,o+1);!Ml(f)&&(a[c]=f)}),t[o]=void 0,a}}return n};return r(e,0)},K2=ro("AsyncFunction"),Y2=e=>e&&(of(e)||ln(e))&&ln(e.then)&&ln(e.catch),y_=((e,t)=>e?setImmediate:t?((r,n)=>(qa.addEventListener("message",({source:o,data:a})=>{o===qa&&a===r&&n.length&&n.shift()()},!1),o=>{n.push(o),qa.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",ln(qa.postMessage)),Q2=typeof queueMicrotask<"u"?queueMicrotask.bind(qa):typeof process<"u"&&process.nextTick||y_,_e={isArray:Ss,isArrayBuffer:p_,isBuffer:p2,isFormData:_2,isArrayBufferView:h2,isString:g2,isNumber:h_,isBoolean:m2,isObject:of,isPlainObject:Ec,isReadableStream:C2,isRequest:T2,isResponse:O2,isHeaders:P2,isUndefined:Ml,isDate:b2,isFile:v2,isBlob:y2,isRegExp:B2,isFunction:ln,isStream:w2,isURLSearchParams:S2,isTypedArray:I2,isFileList:x2,forEach:cu,merge:Lh,extend:N2,trim:k2,stripBOM:E2,inherits:j2,toFlatObject:A2,kindOf:rf,kindOfTest:ro,endsWith:R2,toArray:M2,forEachEntry:D2,matchAll:L2,isHTMLForm:F2,hasOwnProperty:fy,hasOwnProp:fy,reduceDescriptors:b_,freezeMethods:V2,toObjectSet:U2,toCamelCase:z2,noop:W2,toFiniteNumber:$2,findKey:g_,global:qa,isContextDefined:m_,ALPHABET:v_,generateString:H2,isSpecCompliantForm:q2,toJSONObject:G2,isAsyncFn:K2,isThenable:Y2,setImmediate:y_,asap:Q2};function mt(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}_e.inherits(mt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_e.toJSONObject(this.config),code:this.code,status:this.status}}});const x_=mt.prototype,w_={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{w_[e]={value:e}});Object.defineProperties(mt,w_);Object.defineProperty(x_,"isAxiosError",{value:!0});mt.from=(e,t,r,n,o,a)=>{const i=Object.create(x_);return _e.toFlatObject(e,i,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),mt.call(i,e.message,t,r,n,o),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};const X2=null;function Fh(e){return _e.isPlainObject(e)||_e.isArray(e)}function __(e){return _e.endsWith(e,"[]")?e.slice(0,-2):e}function hy(e,t,r){return e?e.concat(t).map(function(o,a){return o=__(o),!r&&a?"["+o+"]":o}).join(r?".":""):t}function Z2(e){return _e.isArray(e)&&!e.some(Fh)}const J2=_e.toFlatObject(_e,{},null,function(t){return/^is[A-Z]/.test(t)});function af(e,t,r){if(!_e.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,r=_e.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,m){return!_e.isUndefined(m[x])});const n=r.metaTokens,o=r.visitor||b,a=r.dots,i=r.indexes,f=(r.Blob||typeof Blob<"u"&&Blob)&&_e.isSpecCompliantForm(t);if(!_e.isFunction(o))throw new TypeError("visitor must be a function");function g(C){if(C===null)return"";if(_e.isDate(C))return C.toISOString();if(!f&&_e.isBlob(C))throw new mt("Blob is not supported. Use a Buffer instead.");return _e.isArrayBuffer(C)||_e.isTypedArray(C)?f&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function b(C,x,m){let d=C;if(C&&!m&&typeof C=="object"){if(_e.endsWith(x,"{}"))x=n?x:x.slice(0,-2),C=JSON.stringify(C);else if(_e.isArray(C)&&Z2(C)||(_e.isFileList(C)||_e.endsWith(x,"[]"))&&(d=_e.toArray(C)))return x=__(x),d.forEach(function(u,l){!(_e.isUndefined(u)||u===null)&&t.append(i===!0?hy([x],l,a):i===null?x:x+"[]",g(u))}),!1}return Fh(C)?!0:(t.append(hy(m,x,a),g(C)),!1)}const S=[],O=Object.assign(J2,{defaultVisitor:b,convertValue:g,isVisitable:Fh});function T(C,x){if(!_e.isUndefined(C)){if(S.indexOf(C)!==-1)throw Error("Circular reference detected in "+x.join("."));S.push(C),_e.forEach(C,function(d,s){(!(_e.isUndefined(d)||d===null)&&o.call(t,d,_e.isString(s)?s.trim():s,x,O))===!0&&T(d,x?x.concat(s):[s])}),S.pop()}}if(!_e.isObject(e))throw new TypeError("data must be an object");return T(e),t}function gy(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Sg(e,t){this._pairs=[],e&&af(e,this,t)}const S_=Sg.prototype;S_.append=function(t,r){this._pairs.push([t,r])};S_.toString=function(t){const r=t?function(n){return t.call(this,n,gy)}:gy;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};function eA(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function C_(e,t,r){if(!t)return e;const n=r&&r.encode||eA,o=r&&r.serialize;let a;if(o?a=o(t,r):a=_e.isURLSearchParams(t)?t.toString():new Sg(t,r).toString(n),a){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class tA{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){_e.forEach(this.handlers,function(n){n!==null&&t(n)})}}const my=tA,T_={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},rA=typeof URLSearchParams<"u"?URLSearchParams:Sg,nA=typeof FormData<"u"?FormData:null,oA=typeof Blob<"u"?Blob:null,aA={isBrowser:!0,classes:{URLSearchParams:rA,FormData:nA,Blob:oA},protocols:["http","https","file","blob","url","data"]},Cg=typeof window<"u"&&typeof document<"u",zh=typeof navigator=="object"&&navigator||void 0,iA=Cg&&(!zh||["ReactNative","NativeScript","NS"].indexOf(zh.product)<0),sA=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),lA=Cg&&window.location.href||"http://localhost",uA=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Cg,hasStandardBrowserEnv:iA,hasStandardBrowserWebWorkerEnv:sA,navigator:zh,origin:lA},Symbol.toStringTag,{value:"Module"})),un={...uA,...aA};function cA(e,t){return af(e,new un.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,a){return un.isNode&&_e.isBuffer(r)?(this.append(n,r.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}function dA(e){return _e.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function fA(e){const t={},r=Object.keys(e);let n;const o=r.length;let a;for(n=0;n=r.length;return i=!i&&_e.isArray(o)?o.length:i,f?(_e.hasOwnProp(o,i)?o[i]=[o[i],n]:o[i]=n,!c):((!o[i]||!_e.isObject(o[i]))&&(o[i]=[]),t(r,n,o[i],a)&&_e.isArray(o[i])&&(o[i]=fA(o[i])),!c)}if(_e.isFormData(e)&&_e.isFunction(e.entries)){const r={};return _e.forEachEntry(e,(n,o)=>{t(dA(n),o,r,0)}),r}return null}function pA(e,t,r){if(_e.isString(e))try{return(t||JSON.parse)(e),_e.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}const Tg={transitional:T_,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){const n=r.getContentType()||"",o=n.indexOf("application/json")>-1,a=_e.isObject(t);if(a&&_e.isHTMLForm(t)&&(t=new FormData(t)),_e.isFormData(t))return o?JSON.stringify(O_(t)):t;if(_e.isArrayBuffer(t)||_e.isBuffer(t)||_e.isStream(t)||_e.isFile(t)||_e.isBlob(t)||_e.isReadableStream(t))return t;if(_e.isArrayBufferView(t))return t.buffer;if(_e.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(a){if(n.indexOf("application/x-www-form-urlencoded")>-1)return cA(t,this.formSerializer).toString();if((c=_e.isFileList(t))||n.indexOf("multipart/form-data")>-1){const f=this.env&&this.env.FormData;return af(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return a||o?(r.setContentType("application/json",!1),pA(t)):t}],transformResponse:[function(t){const r=this.transitional||Tg.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(_e.isResponse(t)||_e.isReadableStream(t))return t;if(t&&_e.isString(t)&&(n&&!this.responseType||o)){const i=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(i)throw c.name==="SyntaxError"?mt.from(c,mt.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:un.classes.FormData,Blob:un.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_e.forEach(["delete","get","head","post","put","patch"],e=>{Tg.headers[e]={}});const Og=Tg,hA=_e.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),gA=e=>{const t={};let r,n,o;return e&&e.split(` +`).forEach(function(i){o=i.indexOf(":"),r=i.substring(0,o).trim().toLowerCase(),n=i.substring(o+1).trim(),!(!r||t[r]&&hA[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t},by=Symbol("internals");function Js(e){return e&&String(e).trim().toLowerCase()}function jc(e){return e===!1||e==null?e:_e.isArray(e)?e.map(jc):String(e)}function mA(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}const bA=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Fp(e,t,r,n,o){if(_e.isFunction(n))return n.call(this,t,r);if(o&&(t=r),!!_e.isString(t)){if(_e.isString(n))return t.indexOf(n)!==-1;if(_e.isRegExp(n))return n.test(t)}}function vA(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function yA(e,t){const r=_e.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(o,a,i){return this[n].call(this,t,o,a,i)},configurable:!0})})}class sf{constructor(t){t&&this.set(t)}set(t,r,n){const o=this;function a(c,f,g){const b=Js(f);if(!b)throw new Error("header name must be a non-empty string");const S=_e.findKey(o,b);(!S||o[S]===void 0||g===!0||g===void 0&&o[S]!==!1)&&(o[S||f]=jc(c))}const i=(c,f)=>_e.forEach(c,(g,b)=>a(g,b,f));if(_e.isPlainObject(t)||t instanceof this.constructor)i(t,r);else if(_e.isString(t)&&(t=t.trim())&&!bA(t))i(gA(t),r);else if(_e.isHeaders(t))for(const[c,f]of t.entries())a(f,c,n);else t!=null&&a(r,t,n);return this}get(t,r){if(t=Js(t),t){const n=_e.findKey(this,t);if(n){const o=this[n];if(!r)return o;if(r===!0)return mA(o);if(_e.isFunction(r))return r.call(this,o,n);if(_e.isRegExp(r))return r.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=Js(t),t){const n=_e.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||Fp(this,this[n],n,r)))}return!1}delete(t,r){const n=this;let o=!1;function a(i){if(i=Js(i),i){const c=_e.findKey(n,i);c&&(!r||Fp(n,n[c],c,r))&&(delete n[c],o=!0)}}return _e.isArray(t)?t.forEach(a):a(t),o}clear(t){const r=Object.keys(this);let n=r.length,o=!1;for(;n--;){const a=r[n];(!t||Fp(this,this[a],a,t,!0))&&(delete this[a],o=!0)}return o}normalize(t){const r=this,n={};return _e.forEach(this,(o,a)=>{const i=_e.findKey(n,a);if(i){r[i]=jc(o),delete r[a];return}const c=t?vA(a):String(a).trim();c!==a&&delete r[a],r[c]=jc(o),n[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const r=Object.create(null);return _e.forEach(this,(n,o)=>{n!=null&&n!==!1&&(r[o]=t&&_e.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){const n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){const n=(this[by]=this[by]={accessors:{}}).accessors,o=this.prototype;function a(i){const c=Js(i);n[c]||(yA(o,i),n[c]=!0)}return _e.isArray(t)?t.forEach(a):a(t),this}}sf.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);_e.reduceDescriptors(sf.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});_e.freezeMethods(sf);const Gn=sf;function zp(e,t){const r=this||Og,n=t||r,o=Gn.from(n.headers);let a=n.data;return _e.forEach(e,function(c){a=c.call(r,a,o.normalize(),t?t.status:void 0)}),o.normalize(),a}function P_(e){return!!(e&&e.__CANCEL__)}function Cs(e,t,r){mt.call(this,e??"canceled",mt.ERR_CANCELED,t,r),this.name="CanceledError"}_e.inherits(Cs,mt,{__CANCEL__:!0});function k_(e,t,r){const n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new mt("Request failed with status code "+r.status,[mt.ERR_BAD_REQUEST,mt.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function xA(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function wA(e,t){e=e||10;const r=new Array(e),n=new Array(e);let o=0,a=0,i;return t=t!==void 0?t:1e3,function(f){const g=Date.now(),b=n[a];i||(i=g),r[o]=f,n[o]=g;let S=a,O=0;for(;S!==o;)O+=r[S++],S=S%e;if(o=(o+1)%e,o===a&&(a=(a+1)%e),g-i{r=b,o=null,a&&(clearTimeout(a),a=null),e.apply(null,g)};return[(...g)=>{const b=Date.now(),S=b-r;S>=n?i(g,b):(o=g,a||(a=setTimeout(()=>{a=null,i(o)},n-S)))},()=>o&&i(o)]}const ad=(e,t,r=3)=>{let n=0;const o=wA(50,250);return _A(a=>{const i=a.loaded,c=a.lengthComputable?a.total:void 0,f=i-n,g=o(f),b=i<=c;n=i;const S={loaded:i,total:c,progress:c?i/c:void 0,bytes:f,rate:g||void 0,estimated:g&&c&&b?(c-i)/g:void 0,event:a,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(S)},r)},vy=(e,t)=>{const r=e!=null;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},yy=e=>(...t)=>_e.asap(()=>e(...t)),SA=un.hasStandardBrowserEnv?function(){const t=un.navigator&&/(msie|trident)/i.test(un.navigator.userAgent),r=document.createElement("a");let n;function o(a){let i=a;return t&&(r.setAttribute("href",i),i=r.href),r.setAttribute("href",i),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=o(window.location.href),function(i){const c=_e.isString(i)?o(i):i;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}(),CA=un.hasStandardBrowserEnv?{write(e,t,r,n,o,a){const i=[e+"="+encodeURIComponent(t)];_e.isNumber(r)&&i.push("expires="+new Date(r).toGMTString()),_e.isString(n)&&i.push("path="+n),_e.isString(o)&&i.push("domain="+o),a===!0&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function TA(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function OA(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function N_(e,t){return e&&!TA(t)?OA(e,t):t}const xy=e=>e instanceof Gn?{...e}:e;function ti(e,t){t=t||{};const r={};function n(g,b,S){return _e.isPlainObject(g)&&_e.isPlainObject(b)?_e.merge.call({caseless:S},g,b):_e.isPlainObject(b)?_e.merge({},b):_e.isArray(b)?b.slice():b}function o(g,b,S){if(_e.isUndefined(b)){if(!_e.isUndefined(g))return n(void 0,g,S)}else return n(g,b,S)}function a(g,b){if(!_e.isUndefined(b))return n(void 0,b)}function i(g,b){if(_e.isUndefined(b)){if(!_e.isUndefined(g))return n(void 0,g)}else return n(void 0,b)}function c(g,b,S){if(S in t)return n(g,b);if(S in e)return n(void 0,g)}const f={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:c,headers:(g,b)=>o(xy(g),xy(b),!0)};return _e.forEach(Object.keys(Object.assign({},e,t)),function(b){const S=f[b]||o,O=S(e[b],t[b],b);_e.isUndefined(O)&&S!==c||(r[b]=O)}),r}const E_=e=>{const t=ti({},e);let{data:r,withXSRFToken:n,xsrfHeaderName:o,xsrfCookieName:a,headers:i,auth:c}=t;t.headers=i=Gn.from(i),t.url=C_(N_(t.baseURL,t.url),e.params,e.paramsSerializer),c&&i.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let f;if(_e.isFormData(r)){if(un.hasStandardBrowserEnv||un.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if((f=i.getContentType())!==!1){const[g,...b]=f?f.split(";").map(S=>S.trim()).filter(Boolean):[];i.setContentType([g||"multipart/form-data",...b].join("; "))}}if(un.hasStandardBrowserEnv&&(n&&_e.isFunction(n)&&(n=n(t)),n||n!==!1&&SA(t.url))){const g=o&&a&&CA.read(a);g&&i.set(o,g)}return t},PA=typeof XMLHttpRequest<"u",kA=PA&&function(e){return new Promise(function(r,n){const o=E_(e);let a=o.data;const i=Gn.from(o.headers).normalize();let{responseType:c,onUploadProgress:f,onDownloadProgress:g}=o,b,S,O,T,C;function x(){T&&T(),C&&C(),o.cancelToken&&o.cancelToken.unsubscribe(b),o.signal&&o.signal.removeEventListener("abort",b)}let m=new XMLHttpRequest;m.open(o.method.toUpperCase(),o.url,!0),m.timeout=o.timeout;function d(){if(!m)return;const u=Gn.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders()),h={data:!c||c==="text"||c==="json"?m.responseText:m.response,status:m.status,statusText:m.statusText,headers:u,config:e,request:m};k_(function(w){r(w),x()},function(w){n(w),x()},h),m=null}"onloadend"in m?m.onloadend=d:m.onreadystatechange=function(){!m||m.readyState!==4||m.status===0&&!(m.responseURL&&m.responseURL.indexOf("file:")===0)||setTimeout(d)},m.onabort=function(){m&&(n(new mt("Request aborted",mt.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new mt("Network Error",mt.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let l=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const h=o.transitional||T_;o.timeoutErrorMessage&&(l=o.timeoutErrorMessage),n(new mt(l,h.clarifyTimeoutError?mt.ETIMEDOUT:mt.ECONNABORTED,e,m)),m=null},a===void 0&&i.setContentType(null),"setRequestHeader"in m&&_e.forEach(i.toJSON(),function(l,h){m.setRequestHeader(h,l)}),_e.isUndefined(o.withCredentials)||(m.withCredentials=!!o.withCredentials),c&&c!=="json"&&(m.responseType=o.responseType),g&&([O,C]=ad(g,!0),m.addEventListener("progress",O)),f&&m.upload&&([S,T]=ad(f),m.upload.addEventListener("progress",S),m.upload.addEventListener("loadend",T)),(o.cancelToken||o.signal)&&(b=u=>{m&&(n(!u||u.type?new Cs(null,e,m):u),m.abort(),m=null)},o.cancelToken&&o.cancelToken.subscribe(b),o.signal&&(o.signal.aborted?b():o.signal.addEventListener("abort",b)));const s=xA(o.url);if(s&&un.protocols.indexOf(s)===-1){n(new mt("Unsupported protocol "+s+":",mt.ERR_BAD_REQUEST,e));return}m.send(a||null)})},NA=(e,t)=>{let r=new AbortController,n;const o=function(f){if(!n){n=!0,i();const g=f instanceof Error?f:this.reason;r.abort(g instanceof mt?g:new Cs(g instanceof Error?g.message:g))}};let a=t&&setTimeout(()=>{o(new mt(`timeout ${t} of ms exceeded`,mt.ETIMEDOUT))},t);const i=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(f=>{f&&(f.removeEventListener?f.removeEventListener("abort",o):f.unsubscribe(o))}),e=null)};e.forEach(f=>f&&f.addEventListener&&f.addEventListener("abort",o));const{signal:c}=r;return c.unsubscribe=i,[c,()=>{a&&clearTimeout(a),a=null}]},EA=NA,jA=function*(e,t){let r=e.byteLength;if(!t||r{const a=AA(e,t,o);let i=0,c,f=g=>{c||(c=!0,n&&n(g))};return new ReadableStream({async pull(g){try{const{done:b,value:S}=await a.next();if(b){f(),g.close();return}let O=S.byteLength;if(r){let T=i+=O;r(T)}g.enqueue(new Uint8Array(S))}catch(b){throw f(b),b}},cancel(g){return f(g),a.return()}},{highWaterMark:2})},lf=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",j_=lf&&typeof ReadableStream=="function",Bh=lf&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),A_=(e,...t)=>{try{return!!e(...t)}catch{return!1}},RA=j_&&A_(()=>{let e=!1;const t=new Request(un.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),_y=64*1024,Vh=j_&&A_(()=>_e.isReadableStream(new Response("").body)),id={stream:Vh&&(e=>e.body)};lf&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!id[t]&&(id[t]=_e.isFunction(e[t])?r=>r[t]():(r,n)=>{throw new mt(`Response type '${t}' is not supported`,mt.ERR_NOT_SUPPORT,n)})})})(new Response);const MA=async e=>{if(e==null)return 0;if(_e.isBlob(e))return e.size;if(_e.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(_e.isArrayBufferView(e)||_e.isArrayBuffer(e))return e.byteLength;if(_e.isURLSearchParams(e)&&(e=e+""),_e.isString(e))return(await Bh(e)).byteLength},IA=async(e,t)=>{const r=_e.toFiniteNumber(e.getContentLength());return r??MA(t)},DA=lf&&(async e=>{let{url:t,method:r,data:n,signal:o,cancelToken:a,timeout:i,onDownloadProgress:c,onUploadProgress:f,responseType:g,headers:b,withCredentials:S="same-origin",fetchOptions:O}=E_(e);g=g?(g+"").toLowerCase():"text";let[T,C]=o||a||i?EA([o,a],i):[],x,m;const d=()=>{!x&&setTimeout(()=>{T&&T.unsubscribe()}),x=!0};let s;try{if(f&&RA&&r!=="get"&&r!=="head"&&(s=await IA(b,n))!==0){let w=new Request(t,{method:"POST",body:n,duplex:"half"}),j;if(_e.isFormData(n)&&(j=w.headers.get("content-type"))&&b.setContentType(j),w.body){const[N,k]=vy(s,ad(yy(f)));n=wy(w.body,_y,N,k,Bh)}}_e.isString(S)||(S=S?"include":"omit");const u="credentials"in Request.prototype;m=new Request(t,{...O,signal:T,method:r.toUpperCase(),headers:b.normalize().toJSON(),body:n,duplex:"half",credentials:u?S:void 0});let l=await fetch(m);const h=Vh&&(g==="stream"||g==="response");if(Vh&&(c||h)){const w={};["status","statusText","headers"].forEach(A=>{w[A]=l[A]});const j=_e.toFiniteNumber(l.headers.get("content-length")),[N,k]=c&&vy(j,ad(yy(c),!0))||[];l=new Response(wy(l.body,_y,N,()=>{k&&k(),h&&d()},Bh),w)}g=g||"text";let v=await id[_e.findKey(id,g)||"text"](l,e);return!h&&d(),C&&C(),await new Promise((w,j)=>{k_(w,j,{data:v,headers:Gn.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:m})})}catch(u){throw d(),u&&u.name==="TypeError"&&/fetch/i.test(u.message)?Object.assign(new mt("Network Error",mt.ERR_NETWORK,e,m),{cause:u.cause||u}):mt.from(u,u&&u.code,e,m)}}),Uh={http:X2,xhr:kA,fetch:DA};_e.forEach(Uh,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Sy=e=>`- ${e}`,LA=e=>_e.isFunction(e)||e===null||e===!1,R_={getAdapter:e=>{e=_e.isArray(e)?e:[e];const{length:t}=e;let r,n;const o={};for(let a=0;a`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let i=t?a.length>1?`since : +`+a.map(Sy).join(` +`):" "+Sy(a[0]):"as no adapter specified";throw new mt("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return n},adapters:Uh};function Bp(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Cs(null,e)}function Cy(e){return Bp(e),e.headers=Gn.from(e.headers),e.data=zp.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),R_.getAdapter(e.adapter||Og.adapter)(e).then(function(n){return Bp(e),n.data=zp.call(e,e.transformResponse,n),n.headers=Gn.from(n.headers),n},function(n){return P_(n)||(Bp(e),n&&n.response&&(n.response.data=zp.call(e,e.transformResponse,n.response),n.response.headers=Gn.from(n.response.headers))),Promise.reject(n)})}const M_="1.7.5",Pg={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Pg[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const Ty={};Pg.transitional=function(t,r,n){function o(a,i){return"[Axios v"+M_+"] Transitional option '"+a+"'"+i+(n?". "+n:"")}return(a,i,c)=>{if(t===!1)throw new mt(o(i," has been removed"+(r?" in "+r:"")),mt.ERR_DEPRECATED);return r&&!Ty[i]&&(Ty[i]=!0,console.warn(o(i," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(a,i,c):!0}};function FA(e,t,r){if(typeof e!="object")throw new mt("options must be an object",mt.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let o=n.length;for(;o-- >0;){const a=n[o],i=t[a];if(i){const c=e[a],f=c===void 0||i(c,a,e);if(f!==!0)throw new mt("option "+a+" must be "+f,mt.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new mt("Unknown option "+a,mt.ERR_BAD_OPTION)}}const Wh={assertOptions:FA,validators:Pg},Jo=Wh.validators;class sd{constructor(t){this.defaults=t,this.interceptors={request:new my,response:new my}}async request(t,r){try{return await this._request(t,r)}catch(n){if(n instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{n.stack?a&&!String(n.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(n.stack+=` +`+a):n.stack=a}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=ti(this.defaults,r);const{transitional:n,paramsSerializer:o,headers:a}=r;n!==void 0&&Wh.assertOptions(n,{silentJSONParsing:Jo.transitional(Jo.boolean),forcedJSONParsing:Jo.transitional(Jo.boolean),clarifyTimeoutError:Jo.transitional(Jo.boolean)},!1),o!=null&&(_e.isFunction(o)?r.paramsSerializer={serialize:o}:Wh.assertOptions(o,{encode:Jo.function,serialize:Jo.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let i=a&&_e.merge(a.common,a[r.method]);a&&_e.forEach(["delete","get","head","post","put","patch","common"],C=>{delete a[C]}),r.headers=Gn.concat(i,a);const c=[];let f=!0;this.interceptors.request.forEach(function(x){typeof x.runWhen=="function"&&x.runWhen(r)===!1||(f=f&&x.synchronous,c.unshift(x.fulfilled,x.rejected))});const g=[];this.interceptors.response.forEach(function(x){g.push(x.fulfilled,x.rejected)});let b,S=0,O;if(!f){const C=[Cy.bind(this),void 0];for(C.unshift.apply(C,c),C.push.apply(C,g),O=C.length,b=Promise.resolve(r);S{if(!n._listeners)return;let a=n._listeners.length;for(;a-- >0;)n._listeners[a](o);n._listeners=null}),this.promise.then=o=>{let a;const i=new Promise(c=>{n.subscribe(c),a=c}).then(o);return i.cancel=function(){n.unsubscribe(a)},i},t(function(a,i,c){n.reason||(n.reason=new Cs(a,i,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}static source(){let t;return{token:new kg(function(o){t=o}),cancel:t}}}const zA=kg;function BA(e){return function(r){return e.apply(null,r)}}function VA(e){return _e.isObject(e)&&e.isAxiosError===!0}const $h={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries($h).forEach(([e,t])=>{$h[t]=e});const UA=$h;function I_(e){const t=new Ac(e),r=f_(Ac.prototype.request,t);return _e.extend(r,Ac.prototype,t,{allOwnKeys:!0}),_e.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return I_(ti(e,o))},r}const ur=I_(Og);ur.Axios=Ac;ur.CanceledError=Cs;ur.CancelToken=zA;ur.isCancel=P_;ur.VERSION=M_;ur.toFormData=af;ur.AxiosError=mt;ur.Cancel=ur.CanceledError;ur.all=function(t){return Promise.all(t)};ur.spread=BA;ur.isAxiosError=VA;ur.mergeConfig=ti;ur.AxiosHeaders=Gn;ur.formToJSON=e=>O_(_e.isHTMLForm(e)?new FormData(e):e);ur.getAdapter=R_.getAdapter;ur.HttpStatusCode=UA;ur.default=ur;const lt=ur;var Hh={},D_={exports:{}},hn={},L_={exports:{}},F_={};/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(e){function t(q,z){var $=q.length;q.push(z);e:for(;0<$;){var K=$-1>>>1,X=q[K];if(0>>1;Ko(de,$))eeo(Se,de)?(q[K]=Se,q[ee]=$,K=ee):(q[K]=de,q[me]=$,K=me);else if(eeo(Se,$))q[K]=Se,q[ee]=$,K=ee;else break e}}return z}function o(q,z){var $=q.sortIndex-z.sortIndex;return $!==0?$:q.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var i=Date,c=i.now();e.unstable_now=function(){return i.now()-c}}var f=[],g=[],b=1,S=null,O=3,T=!1,C=!1,x=!1,m=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,s=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function u(q){for(var z=r(g);z!==null;){if(z.callback===null)n(g);else if(z.startTime<=q)n(g),z.sortIndex=z.expirationTime,t(f,z);else break;z=r(g)}}function l(q){if(x=!1,u(q),!C)if(r(f)!==null)C=!0,U(h);else{var z=r(g);z!==null&&Y(l,z.startTime-q)}}function h(q,z){C=!1,x&&(x=!1,d(j),j=-1),T=!0;var $=O;try{for(u(z),S=r(f);S!==null&&(!(S.expirationTime>z)||q&&!A());){var K=S.callback;if(typeof K=="function"){S.callback=null,O=S.priorityLevel;var X=K(S.expirationTime<=z);z=e.unstable_now(),typeof X=="function"?S.callback=X:S===r(f)&&n(f),u(z)}else n(f);S=r(f)}if(S!==null)var te=!0;else{var me=r(g);me!==null&&Y(l,me.startTime-z),te=!1}return te}finally{S=null,O=$,T=!1}}var v=!1,w=null,j=-1,N=5,k=-1;function A(){return!(e.unstable_now()-kq||125K?(q.sortIndex=$,t(g,q),r(f)===null&&q===r(g)&&(x?(d(j),j=-1):x=!0,Y(l,$-K))):(q.sortIndex=X,t(f,q),C||T||(C=!0,U(h))),q},e.unstable_shouldYield=A,e.unstable_wrapCallback=function(q){var z=O;return function(){var $=O;O=z;try{return q.apply(this,arguments)}finally{O=$}}}})(F_);L_.exports=F_;var WA=L_.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var z_=P,fn=WA;function Re(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),qh=Object.prototype.hasOwnProperty,$A=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Oy={},Py={};function HA(e){return qh.call(Py,e)?!0:qh.call(Oy,e)?!1:$A.test(e)?Py[e]=!0:(Oy[e]=!0,!1)}function qA(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function GA(e,t,r,n){if(t===null||typeof t>"u"||qA(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Vr(e,t,r,n,o,a,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var Cr={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Cr[e]=new Vr(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Cr[t]=new Vr(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Cr[e]=new Vr(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Cr[e]=new Vr(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Cr[e]=new Vr(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Cr[e]=new Vr(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Cr[e]=new Vr(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Cr[e]=new Vr(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Cr[e]=new Vr(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ng=/[\-:]([a-z])/g;function Eg(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ng,Eg);Cr[t]=new Vr(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ng,Eg);Cr[t]=new Vr(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ng,Eg);Cr[t]=new Vr(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Cr[e]=new Vr(e,1,!1,e.toLowerCase(),null,!1,!1)});Cr.xlinkHref=new Vr("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Cr[e]=new Vr(e,1,!1,e.toLowerCase(),null,!0,!0)});function jg(e,t,r,n){var o=Cr.hasOwnProperty(t)?Cr[t]:null;(o!==null?o.type!==0:n||!(2c||o[i]!==a[c]){var f=` +`+o[i].replace(" at new "," at ");return e.displayName&&f.includes("")&&(f=f.replace("",e.displayName)),f}while(1<=i&&0<=c);break}}}finally{Up=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?pl(e):""}function KA(e){switch(e.tag){case 5:return pl(e.type);case 16:return pl("Lazy");case 13:return pl("Suspense");case 19:return pl("SuspenseList");case 0:case 2:case 15:return e=Wp(e.type,!1),e;case 11:return e=Wp(e.type.render,!1),e;case 1:return e=Wp(e.type,!0),e;default:return""}}function Qh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Di:return"Fragment";case Ii:return"Portal";case Gh:return"Profiler";case Ag:return"StrictMode";case Kh:return"Suspense";case Yh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case U_:return(e.displayName||"Context")+".Consumer";case V_:return(e._context.displayName||"Context")+".Provider";case Rg:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Mg:return t=e.displayName||null,t!==null?t:Qh(e.type)||"Memo";case aa:t=e._payload,e=e._init;try{return Qh(e(t))}catch{}}return null}function YA(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Qh(t);case 8:return t===Ag?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ca(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function $_(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function QA(e){var t=$_(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(i){n=""+i,a.call(this,i)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(i){n=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function tc(e){e._valueTracker||(e._valueTracker=QA(e))}function H_(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=$_(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function ld(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Xh(e,t){var r=t.checked;return rr({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Ny(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Ca(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function q_(e,t){t=t.checked,t!=null&&jg(e,"checked",t,!1)}function Zh(e,t){q_(e,t);var r=Ca(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Jh(e,t.type,r):t.hasOwnProperty("defaultValue")&&Jh(e,t.type,Ca(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ey(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Jh(e,t,r){(t!=="number"||ld(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var hl=Array.isArray;function Yi(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=rc.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Dl(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var xl={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},XA=["Webkit","ms","Moz","O"];Object.keys(xl).forEach(function(e){XA.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),xl[t]=xl[e]})});function Q_(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||xl.hasOwnProperty(e)&&xl[e]?(""+t).trim():t+"px"}function X_(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=Q_(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var ZA=rr({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function r0(e,t){if(t){if(ZA[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(Re(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(Re(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(Re(61))}if(t.style!=null&&typeof t.style!="object")throw Error(Re(62))}}function n0(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var o0=null;function Ig(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var a0=null,Qi=null,Xi=null;function Ry(e){if(e=pu(e)){if(typeof a0!="function")throw Error(Re(280));var t=e.stateNode;t&&(t=pf(t),a0(e.stateNode,e.type,t))}}function Z_(e){Qi?Xi?Xi.push(e):Xi=[e]:Qi=e}function J_(){if(Qi){var e=Qi,t=Xi;if(Xi=Qi=null,Ry(e),t)for(e=0;e>>=0,e===0?32:31-(uR(e)/cR|0)|0}var nc=64,oc=4194304;function gl(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function fd(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,o=e.suspendedLanes,a=e.pingedLanes,i=r&268435455;if(i!==0){var c=i&~o;c!==0?n=gl(c):(a&=i,a!==0&&(n=gl(a)))}else i=r&~o,i!==0?n=gl(i):a!==0&&(n=gl(a));if(n===0)return 0;if(t!==0&&t!==n&&!(t&o)&&(o=n&-n,a=t&-t,o>=a||o===16&&(a&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function du(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Kn(t),e[t]=r}function hR(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=_l),Uy=String.fromCharCode(32),Wy=!1;function yS(e,t){switch(e){case"keyup":return UR.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function xS(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Li=!1;function $R(e,t){switch(e){case"compositionend":return xS(t);case"keypress":return t.which!==32?null:(Wy=!0,Uy);case"textInput":return e=t.data,e===Uy&&Wy?null:e;default:return null}}function HR(e,t){if(Li)return e==="compositionend"||!Wg&&yS(e,t)?(e=bS(),Mc=Bg=ca=null,Li=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Gy(r)}}function CS(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?CS(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function TS(){for(var e=window,t=ld();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=ld(e.document)}return t}function $g(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function eM(e){var t=TS(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&CS(r.ownerDocument.documentElement,r)){if(n!==null&&$g(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=r.textContent.length,a=Math.min(n.start,o);n=n.end===void 0?a:Math.min(n.end,o),!e.extend&&a>n&&(o=n,n=a,a=o),o=Ky(r,a);var i=Ky(r,n);o&&i&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),a>n?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Fi=null,d0=null,Cl=null,f0=!1;function Yy(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;f0||Fi==null||Fi!==ld(n)||(n=Fi,"selectionStart"in n&&$g(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Cl&&Ul(Cl,n)||(Cl=n,n=gd(d0,"onSelect"),0Vi||(e.current=v0[Vi],v0[Vi]=null,Vi--)}function Ut(e,t){Vi++,v0[Vi]=e.current,e.current=t}var Ta={},Rr=ka(Ta),Qr=ka(!1),ri=Ta;function ss(e,t){var r=e.type.contextTypes;if(!r)return Ta;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},a;for(a in r)o[a]=t[a];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Xr(e){return e=e.childContextTypes,e!=null}function bd(){qt(Qr),qt(Rr)}function rx(e,t,r){if(Rr.current!==Ta)throw Error(Re(168));Ut(Rr,t),Ut(Qr,r)}function MS(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in t))throw Error(Re(108,YA(e)||"Unknown",o));return rr({},r,n)}function vd(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,ri=Rr.current,Ut(Rr,e),Ut(Qr,Qr.current),!0}function nx(e,t,r){var n=e.stateNode;if(!n)throw Error(Re(169));r?(e=MS(e,t,ri),n.__reactInternalMemoizedMergedChildContext=e,qt(Qr),qt(Rr),Ut(Rr,e)):qt(Qr),Ut(Qr,r)}var Ao=null,hf=!1,nh=!1;function IS(e){Ao===null?Ao=[e]:Ao.push(e)}function fM(e){hf=!0,IS(e)}function Na(){if(!nh&&Ao!==null){nh=!0;var e=0,t=Dt;try{var r=Ao;for(Dt=1;e>=i,o-=i,Ro=1<<32-Kn(t)+o|r<j?(N=w,w=null):N=w.sibling;var k=O(d,w,u[j],l);if(k===null){w===null&&(w=N);break}e&&w&&k.alternate===null&&t(d,w),s=a(k,s,j),v===null?h=k:v.sibling=k,v=k,w=N}if(j===u.length)return r(d,w),Qt&&Wa(d,j),h;if(w===null){for(;jj?(N=w,w=null):N=w.sibling;var A=O(d,w,k.value,l);if(A===null){w===null&&(w=N);break}e&&w&&A.alternate===null&&t(d,w),s=a(A,s,j),v===null?h=A:v.sibling=A,v=A,w=N}if(k.done)return r(d,w),Qt&&Wa(d,j),h;if(w===null){for(;!k.done;j++,k=u.next())k=S(d,k.value,l),k!==null&&(s=a(k,s,j),v===null?h=k:v.sibling=k,v=k);return Qt&&Wa(d,j),h}for(w=n(d,w);!k.done;j++,k=u.next())k=T(w,d,j,k.value,l),k!==null&&(e&&k.alternate!==null&&w.delete(k.key===null?j:k.key),s=a(k,s,j),v===null?h=k:v.sibling=k,v=k);return e&&w.forEach(function(M){return t(d,M)}),Qt&&Wa(d,j),h}function m(d,s,u,l){if(typeof u=="object"&&u!==null&&u.type===Di&&u.key===null&&(u=u.props.children),typeof u=="object"&&u!==null){switch(u.$$typeof){case ec:e:{for(var h=u.key,v=s;v!==null;){if(v.key===h){if(h=u.type,h===Di){if(v.tag===7){r(d,v.sibling),s=o(v,u.props.children),s.return=d,d=s;break e}}else if(v.elementType===h||typeof h=="object"&&h!==null&&h.$$typeof===aa&&cx(h)===v.type){r(d,v.sibling),s=o(v,u.props),s.ref=al(d,v,u),s.return=d,d=s;break e}r(d,v);break}else t(d,v);v=v.sibling}u.type===Di?(s=Ja(u.props.children,d.mode,l,u.key),s.return=d,d=s):(l=Uc(u.type,u.key,u.props,null,d.mode,l),l.ref=al(d,s,u),l.return=d,d=l)}return i(d);case Ii:e:{for(v=u.key;s!==null;){if(s.key===v)if(s.tag===4&&s.stateNode.containerInfo===u.containerInfo&&s.stateNode.implementation===u.implementation){r(d,s.sibling),s=o(s,u.children||[]),s.return=d,d=s;break e}else{r(d,s);break}else t(d,s);s=s.sibling}s=dh(u,d.mode,l),s.return=d,d=s}return i(d);case aa:return v=u._init,m(d,s,v(u._payload),l)}if(hl(u))return C(d,s,u,l);if(el(u))return x(d,s,u,l);dc(d,u)}return typeof u=="string"&&u!==""||typeof u=="number"?(u=""+u,s!==null&&s.tag===6?(r(d,s.sibling),s=o(s,u),s.return=d,d=s):(r(d,s),s=ch(u,d.mode,l),s.return=d,d=s),i(d)):r(d,s)}return m}var us=WS(!0),$S=WS(!1),hu={},vo=ka(hu),ql=ka(hu),Gl=ka(hu);function Ya(e){if(e===hu)throw Error(Re(174));return e}function Jg(e,t){switch(Ut(Gl,t),Ut(ql,e),Ut(vo,hu),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:t0(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=t0(t,e)}qt(vo),Ut(vo,t)}function cs(){qt(vo),qt(ql),qt(Gl)}function HS(e){Ya(Gl.current);var t=Ya(vo.current),r=t0(t,e.type);t!==r&&(Ut(ql,e),Ut(vo,r))}function em(e){ql.current===e&&(qt(vo),qt(ql))}var Zt=ka(0);function Cd(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var oh=[];function tm(){for(var e=0;er?r:4,e(!0);var n=ah.transition;ah.transition={};try{e(!1),t()}finally{Dt=r,ah.transition=n}}function s5(){return En().memoizedState}function mM(e,t,r){var n=ya(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},l5(e))u5(t,r);else if(r=zS(e,t,r,n),r!==null){var o=zr();Yn(r,e,n,o),c5(r,t,n)}}function bM(e,t,r){var n=ya(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(l5(e))u5(t,o);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var i=t.lastRenderedState,c=a(i,r);if(o.hasEagerState=!0,o.eagerState=c,Xn(c,i)){var f=t.interleaved;f===null?(o.next=o,Xg(t)):(o.next=f.next,f.next=o),t.interleaved=o;return}}catch{}finally{}r=zS(e,t,o,n),r!==null&&(o=zr(),Yn(r,e,n,o),c5(r,t,n))}}function l5(e){var t=e.alternate;return e===er||t!==null&&t===er}function u5(e,t){Tl=Td=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function c5(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Lg(e,r)}}var Od={readContext:Nn,useCallback:Pr,useContext:Pr,useEffect:Pr,useImperativeHandle:Pr,useInsertionEffect:Pr,useLayoutEffect:Pr,useMemo:Pr,useReducer:Pr,useRef:Pr,useState:Pr,useDebugValue:Pr,useDeferredValue:Pr,useTransition:Pr,useMutableSource:Pr,useSyncExternalStore:Pr,useId:Pr,unstable_isNewReconciler:!1},vM={readContext:Nn,useCallback:function(e,t){return ho().memoizedState=[e,t===void 0?null:t],e},useContext:Nn,useEffect:fx,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Fc(4194308,4,r5.bind(null,t,e),r)},useLayoutEffect:function(e,t){return Fc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Fc(4,2,e,t)},useMemo:function(e,t){var r=ho();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=ho();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=mM.bind(null,er,e),[n.memoizedState,e]},useRef:function(e){var t=ho();return e={current:e},t.memoizedState=e},useState:dx,useDebugValue:im,useDeferredValue:function(e){return ho().memoizedState=e},useTransition:function(){var e=dx(!1),t=e[0];return e=gM.bind(null,e[1]),ho().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=er,o=ho();if(Qt){if(r===void 0)throw Error(Re(407));r=r()}else{if(r=t(),yr===null)throw Error(Re(349));oi&30||KS(n,t,r)}o.memoizedState=r;var a={value:r,getSnapshot:t};return o.queue=a,fx(QS.bind(null,n,a,e),[e]),n.flags|=2048,Ql(9,YS.bind(null,n,a,r,t),void 0,null),r},useId:function(){var e=ho(),t=yr.identifierPrefix;if(Qt){var r=Mo,n=Ro;r=(n&~(1<<32-Kn(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=Kl++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=i.createElement(r,{is:n.is}):(e=i.createElement(r),r==="select"&&(i=e,n.multiple?i.multiple=!0:n.size&&(i.size=n.size))):e=i.createElementNS(e,r),e[go]=t,e[Hl]=n,y5(e,t,!1,!1),t.stateNode=e;e:{switch(i=n0(r,n),r){case"dialog":$t("cancel",e),$t("close",e),o=n;break;case"iframe":case"object":case"embed":$t("load",e),o=n;break;case"video":case"audio":for(o=0;ofs&&(t.flags|=128,n=!0,il(a,!1),t.lanes=4194304)}else{if(!n)if(e=Cd(i),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),il(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!Qt)return kr(t),null}else 2*ar()-a.renderingStartTime>fs&&r!==1073741824&&(t.flags|=128,n=!0,il(a,!1),t.lanes=4194304);a.isBackwards?(i.sibling=t.child,t.child=i):(r=a.last,r!==null?r.sibling=i:t.child=i,a.last=i)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=ar(),t.sibling=null,r=Zt.current,Ut(Zt,n?r&1|2:r&1),t):(kr(t),null);case 22:case 23:return fm(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?on&1073741824&&(kr(t),t.subtreeFlags&6&&(t.flags|=8192)):kr(t),null;case 24:return null;case 25:return null}throw Error(Re(156,t.tag))}function OM(e,t){switch(qg(t),t.tag){case 1:return Xr(t.type)&&bd(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return cs(),qt(Qr),qt(Rr),tm(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return em(t),null;case 13:if(qt(Zt),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(Re(340));ls()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return qt(Zt),null;case 4:return cs(),null;case 10:return Qg(t.type._context),null;case 22:case 23:return fm(),null;case 24:return null;default:return null}}var pc=!1,jr=!1,PM=typeof WeakSet=="function"?WeakSet:Set,Ke=null;function Hi(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){nr(e,t,n)}else r.current=null}function E0(e,t,r){try{r()}catch(n){nr(e,t,n)}}var wx=!1;function kM(e,t){if(p0=pd,e=TS(),$g(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var o=n.anchorOffset,a=n.focusNode;n=n.focusOffset;try{r.nodeType,a.nodeType}catch{r=null;break e}var i=0,c=-1,f=-1,g=0,b=0,S=e,O=null;t:for(;;){for(var T;S!==r||o!==0&&S.nodeType!==3||(c=i+o),S!==a||n!==0&&S.nodeType!==3||(f=i+n),S.nodeType===3&&(i+=S.nodeValue.length),(T=S.firstChild)!==null;)O=S,S=T;for(;;){if(S===e)break t;if(O===r&&++g===o&&(c=i),O===a&&++b===n&&(f=i),(T=S.nextSibling)!==null)break;S=O,O=S.parentNode}S=T}r=c===-1||f===-1?null:{start:c,end:f}}else r=null}r=r||{start:0,end:0}}else r=null;for(h0={focusedElem:e,selectionRange:r},pd=!1,Ke=t;Ke!==null;)if(t=Ke,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Ke=e;else for(;Ke!==null;){t=Ke;try{var C=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(C!==null){var x=C.memoizedProps,m=C.memoizedState,d=t.stateNode,s=d.getSnapshotBeforeUpdate(t.elementType===t.type?x:Vn(t.type,x),m);d.__reactInternalSnapshotBeforeUpdate=s}break;case 3:var u=t.stateNode.containerInfo;u.nodeType===1?u.textContent="":u.nodeType===9&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Re(163))}}catch(l){nr(t,t.return,l)}if(e=t.sibling,e!==null){e.return=t.return,Ke=e;break}Ke=t.return}return C=wx,wx=!1,C}function Ol(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,a!==void 0&&E0(t,r,a)}o=o.next}while(o!==n)}}function bf(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function j0(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function _5(e){var t=e.alternate;t!==null&&(e.alternate=null,_5(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[go],delete t[Hl],delete t[b0],delete t[cM],delete t[dM])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function S5(e){return e.tag===5||e.tag===3||e.tag===4}function _x(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||S5(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function A0(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=md));else if(n!==4&&(e=e.child,e!==null))for(A0(e,t,r),e=e.sibling;e!==null;)A0(e,t,r),e=e.sibling}function R0(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(R0(e,t,r),e=e.sibling;e!==null;)R0(e,t,r),e=e.sibling}var _r=null,Un=!1;function ea(e,t,r){for(r=r.child;r!==null;)C5(e,t,r),r=r.sibling}function C5(e,t,r){if(bo&&typeof bo.onCommitFiberUnmount=="function")try{bo.onCommitFiberUnmount(uf,r)}catch{}switch(r.tag){case 5:jr||Hi(r,t);case 6:var n=_r,o=Un;_r=null,ea(e,t,r),_r=n,Un=o,_r!==null&&(Un?(e=_r,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):_r.removeChild(r.stateNode));break;case 18:_r!==null&&(Un?(e=_r,r=r.stateNode,e.nodeType===8?rh(e.parentNode,r):e.nodeType===1&&rh(e,r),Bl(e)):rh(_r,r.stateNode));break;case 4:n=_r,o=Un,_r=r.stateNode.containerInfo,Un=!0,ea(e,t,r),_r=n,Un=o;break;case 0:case 11:case 14:case 15:if(!jr&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){o=n=n.next;do{var a=o,i=a.destroy;a=a.tag,i!==void 0&&(a&2||a&4)&&E0(r,t,i),o=o.next}while(o!==n)}ea(e,t,r);break;case 1:if(!jr&&(Hi(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(c){nr(r,t,c)}ea(e,t,r);break;case 21:ea(e,t,r);break;case 22:r.mode&1?(jr=(n=jr)||r.memoizedState!==null,ea(e,t,r),jr=n):ea(e,t,r);break;default:ea(e,t,r)}}function Sx(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new PM),t.forEach(function(n){var o=LM.bind(null,e,n);r.has(n)||(r.add(n),n.then(o,o))})}}function zn(e,t){var r=t.deletions;if(r!==null)for(var n=0;no&&(o=i),n&=~a}if(n=o,n=ar()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*EM(n/1960))-n,10e?16:e,da===null)var n=!1;else{if(e=da,da=null,Nd=0,Ot&6)throw Error(Re(331));var o=Ot;for(Ot|=4,Ke=e.current;Ke!==null;){var a=Ke,i=a.child;if(Ke.flags&16){var c=a.deletions;if(c!==null){for(var f=0;far()-cm?Za(e,0):um|=r),Zr(e,t)}function A5(e,t){t===0&&(e.mode&1?(t=oc,oc<<=1,!(oc&130023424)&&(oc=4194304)):t=1);var r=zr();e=Bo(e,t),e!==null&&(du(e,t,r),Zr(e,r))}function DM(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),A5(e,r)}function LM(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;o!==null&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(Re(314))}n!==null&&n.delete(t),A5(e,r)}var R5;R5=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Qr.current)Kr=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Kr=!1,CM(e,t,r);Kr=!!(e.flags&131072)}else Kr=!1,Qt&&t.flags&1048576&&DS(t,xd,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;zc(e,t),e=t.pendingProps;var o=ss(t,Rr.current);Ji(t,r),o=nm(null,t,n,e,o,r);var a=om();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Xr(n)?(a=!0,vd(t)):a=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Zg(t),o.updater=gf,t.stateNode=o,o._reactInternals=t,S0(t,n,e,r),t=O0(null,t,n,!0,a,r)):(t.tag=0,Qt&&a&&Hg(t),Fr(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(zc(e,t),e=t.pendingProps,o=n._init,n=o(n._payload),t.type=n,o=t.tag=zM(n),e=Vn(n,e),o){case 0:t=T0(null,t,n,e,r);break e;case 1:t=vx(null,t,n,e,r);break e;case 11:t=mx(null,t,n,e,r);break e;case 14:t=bx(null,t,n,Vn(n.type,e),r);break e}throw Error(Re(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Vn(n,o),T0(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Vn(n,o),vx(e,t,n,o,r);case 3:e:{if(m5(t),e===null)throw Error(Re(387));n=t.pendingProps,a=t.memoizedState,o=a.element,BS(e,t),Sd(t,n,null,r);var i=t.memoizedState;if(n=i.element,a.isDehydrated)if(a={element:n,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=a,t.memoizedState=a,t.flags&256){o=ds(Error(Re(423)),t),t=yx(e,t,n,r,o);break e}else if(n!==o){o=ds(Error(Re(424)),t),t=yx(e,t,n,r,o);break e}else for(an=ma(t.stateNode.containerInfo.firstChild),cn=t,Qt=!0,$n=null,r=$S(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(ls(),n===o){t=Vo(e,t,r);break e}Fr(e,t,n,r)}t=t.child}return t;case 5:return HS(t),e===null&&x0(t),n=t.type,o=t.pendingProps,a=e!==null?e.memoizedProps:null,i=o.children,g0(n,o)?i=null:a!==null&&g0(n,a)&&(t.flags|=32),g5(e,t),Fr(e,t,i,r),t.child;case 6:return e===null&&x0(t),null;case 13:return b5(e,t,r);case 4:return Jg(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=us(t,null,n,r):Fr(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Vn(n,o),mx(e,t,n,o,r);case 7:return Fr(e,t,t.pendingProps,r),t.child;case 8:return Fr(e,t,t.pendingProps.children,r),t.child;case 12:return Fr(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,a=t.memoizedProps,i=o.value,Ut(wd,n._currentValue),n._currentValue=i,a!==null)if(Xn(a.value,i)){if(a.children===o.children&&!Qr.current){t=Vo(e,t,r);break e}}else for(a=t.child,a!==null&&(a.return=t);a!==null;){var c=a.dependencies;if(c!==null){i=a.child;for(var f=c.firstContext;f!==null;){if(f.context===n){if(a.tag===1){f=Io(-1,r&-r),f.tag=2;var g=a.updateQueue;if(g!==null){g=g.shared;var b=g.pending;b===null?f.next=f:(f.next=b.next,b.next=f),g.pending=f}}a.lanes|=r,f=a.alternate,f!==null&&(f.lanes|=r),w0(a.return,r,t),c.lanes|=r;break}f=f.next}}else if(a.tag===10)i=a.type===t.type?null:a.child;else if(a.tag===18){if(i=a.return,i===null)throw Error(Re(341));i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),w0(i,r,t),i=a.sibling}else i=a.child;if(i!==null)i.return=a;else for(i=a;i!==null;){if(i===t){i=null;break}if(a=i.sibling,a!==null){a.return=i.return,i=a;break}i=i.return}a=i}Fr(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,Ji(t,r),o=Nn(o),n=n(o),t.flags|=1,Fr(e,t,n,r),t.child;case 14:return n=t.type,o=Vn(n,t.pendingProps),o=Vn(n.type,o),bx(e,t,n,o,r);case 15:return p5(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Vn(n,o),zc(e,t),t.tag=1,Xr(n)?(e=!0,vd(t)):e=!1,Ji(t,r),US(t,n,o),S0(t,n,o,r),O0(null,t,n,!0,e,r);case 19:return v5(e,t,r);case 22:return h5(e,t,r)}throw Error(Re(156,t.tag))};function M5(e,t){return iS(e,t)}function FM(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Tn(e,t,r,n){return new FM(e,t,r,n)}function hm(e){return e=e.prototype,!(!e||!e.isReactComponent)}function zM(e){if(typeof e=="function")return hm(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Rg)return 11;if(e===Mg)return 14}return 2}function xa(e,t){var r=e.alternate;return r===null?(r=Tn(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Uc(e,t,r,n,o,a){var i=2;if(n=e,typeof e=="function")hm(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Di:return Ja(r.children,o,a,t);case Ag:i=8,o|=8;break;case Gh:return e=Tn(12,r,t,o|2),e.elementType=Gh,e.lanes=a,e;case Kh:return e=Tn(13,r,t,o),e.elementType=Kh,e.lanes=a,e;case Yh:return e=Tn(19,r,t,o),e.elementType=Yh,e.lanes=a,e;case W_:return yf(r,o,a,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case V_:i=10;break e;case U_:i=9;break e;case Rg:i=11;break e;case Mg:i=14;break e;case aa:i=16,n=null;break e}throw Error(Re(130,e==null?e:typeof e,""))}return t=Tn(i,r,t,o),t.elementType=e,t.type=n,t.lanes=a,t}function Ja(e,t,r,n){return e=Tn(7,e,n,t),e.lanes=r,e}function yf(e,t,r,n){return e=Tn(22,e,n,t),e.elementType=W_,e.lanes=r,e.stateNode={isHidden:!1},e}function ch(e,t,r){return e=Tn(6,e,null,t),e.lanes=r,e}function dh(e,t,r){return t=Tn(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function BM(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Hp(0),this.expirationTimes=Hp(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Hp(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function gm(e,t,r,n,o,a,i,c,f){return e=new BM(e,t,r,c,f),t===1?(t=1,a===!0&&(t|=8)):t=0,a=Tn(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zg(a),e}function VM(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(F5)}catch(e){console.error(e)}}F5(),D_.exports=hn;var Uo=D_.exports,jx=Uo;Hh.createRoot=jx.createRoot,Hh.hydrateRoot=jx.hydrateRoot;/** + * @remix-run/router v1.10.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Zl(){return Zl=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function ym(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function GM(){return Math.random().toString(36).substr(2,8)}function Rx(e,t){return{usr:e.state,key:e.key,idx:t}}function F0(e,t,r,n){return r===void 0&&(r=null),Zl({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Ps(t):t,{state:r,key:t&&t.key||n||GM()})}function Ad(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Ps(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function KM(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:a=!1}=n,i=o.history,c=fa.Pop,f=null,g=b();g==null&&(g=0,i.replaceState(Zl({},i.state,{idx:g}),""));function b(){return(i.state||{idx:null}).idx}function S(){c=fa.Pop;let m=b(),d=m==null?null:m-g;g=m,f&&f({action:c,location:x.location,delta:d})}function O(m,d){c=fa.Push;let s=F0(x.location,m,d);r&&r(s,m),g=b()+1;let u=Rx(s,g),l=x.createHref(s);try{i.pushState(u,"",l)}catch(h){if(h instanceof DOMException&&h.name==="DataCloneError")throw h;o.location.assign(l)}a&&f&&f({action:c,location:x.location,delta:1})}function T(m,d){c=fa.Replace;let s=F0(x.location,m,d);r&&r(s,m),g=b();let u=Rx(s,g),l=x.createHref(s);i.replaceState(u,"",l),a&&f&&f({action:c,location:x.location,delta:0})}function C(m){let d=o.location.origin!=="null"?o.location.origin:o.location.href,s=typeof m=="string"?m:Ad(m);return tr(d,"No window.location.(origin|href) available to create URL for href: "+s),new URL(s,d)}let x={get action(){return c},get location(){return e(o,i)},listen(m){if(f)throw new Error("A history only accepts one active listener");return o.addEventListener(Ax,S),f=m,()=>{o.removeEventListener(Ax,S),f=null}},createHref(m){return t(o,m)},createURL:C,encodeLocation(m){let d=C(m);return{pathname:d.pathname,search:d.search,hash:d.hash}},push:O,replace:T,go(m){return i.go(m)}};return x}var Mx;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Mx||(Mx={}));function YM(e,t,r){r===void 0&&(r="/");let n=typeof t=="string"?Ps(t):t,o=Jl(n.pathname||"/",r);if(o==null)return null;let a=z5(e);QM(a);let i=null;for(let c=0;i==null&&c{let f={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:i,route:a};f.relativePath.startsWith("/")&&(tr(f.relativePath.startsWith(n),'Absolute route path "'+f.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),f.relativePath=f.relativePath.slice(n.length));let g=wa([n,f.relativePath]),b=r.concat(f);a.children&&a.children.length>0&&(tr(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+g+'".')),z5(a.children,t,b,g)),!(a.path==null&&!a.index)&&t.push({path:g,score:nI(g,a.index),routesMeta:b})};return e.forEach((a,i)=>{var c;if(a.path===""||!((c=a.path)!=null&&c.includes("?")))o(a,i);else for(let f of B5(a.path))o(a,i,f)}),t}function B5(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return o?[a,""]:[a];let i=B5(n.join("/")),c=[];return c.push(...i.map(f=>f===""?a:[a,f].join("/"))),o&&c.push(...i),c.map(f=>e.startsWith("/")&&f===""?"/":f)}function QM(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:oI(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const XM=/^:\w+$/,ZM=3,JM=2,eI=1,tI=10,rI=-2,Ix=e=>e==="*";function nI(e,t){let r=e.split("/"),n=r.length;return r.some(Ix)&&(n+=rI),t&&(n+=JM),r.filter(o=>!Ix(o)).reduce((o,a)=>o+(XM.test(a)?ZM:a===""?eI:tI),n)}function oI(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function aI(e,t){let{routesMeta:r}=e,n={},o="/",a=[];for(let i=0;i{if(b==="*"){let O=c[S]||"";i=a.slice(0,a.length-O.length).replace(/(.)\/+$/,"$1")}return g[b]=lI(c[S]||"",b),g},{}),pathname:a,pathnameBase:i,pattern:e}}function iI(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),ym(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(i,c)=>(n.push(c),"/([^\\/]+)"));return e.endsWith("*")?(n.push("*"),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function sI(e){try{return decodeURI(e)}catch(t){return ym(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function lI(e,t){try{return decodeURIComponent(e)}catch(r){return ym(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+r+").")),e}}function Jl(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function uI(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?Ps(e):e;return{pathname:r?r.startsWith("/")?r:cI(r,t):t,search:fI(n),hash:pI(o)}}function cI(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function fh(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function xm(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function wm(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=Ps(e):(o=Zl({},e),tr(!o.pathname||!o.pathname.includes("?"),fh("?","pathname","search",o)),tr(!o.pathname||!o.pathname.includes("#"),fh("#","pathname","hash",o)),tr(!o.search||!o.search.includes("#"),fh("#","search","hash",o)));let a=e===""||o.pathname==="",i=a?"/":o.pathname,c;if(n||i==null)c=r;else{let S=t.length-1;if(i.startsWith("..")){let O=i.split("/");for(;O[0]==="..";)O.shift(),S-=1;o.pathname=O.join("/")}c=S>=0?t[S]:"/"}let f=uI(o,c),g=i&&i!=="/"&&i.endsWith("/"),b=(a||i===".")&&r.endsWith("/");return!f.pathname.endsWith("/")&&(g||b)&&(f.pathname+="/"),f}const wa=e=>e.join("/").replace(/\/\/+/g,"/"),dI=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),fI=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,pI=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function hI(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const V5=["post","put","patch","delete"];new Set(V5);const gI=["get",...V5];new Set(gI);/** + * React Router v6.17.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Rd(){return Rd=Object.assign?Object.assign.bind():function(e){for(var t=1;tf.pathnameBase)),i=P.useRef(!1);return $5(()=>{i.current=!0}),P.useCallback(function(f,g){if(g===void 0&&(g={}),!i.current)return;if(typeof f=="number"){r.go(f);return}let b=wm(f,JSON.parse(a),o,g.relative==="path");e==null&&t!=="/"&&(b.pathname=b.pathname==="/"?t:wa([t,b.pathname])),(g.replace?r.replace:r.push)(b,g.state,g)},[t,r,a,o,e])}function H5(){let{matches:e}=P.useContext(Ho),t=e[e.length-1];return t?t.params:{}}function Of(e,t){let{relative:r}=t===void 0?{}:t,{matches:n}=P.useContext(Ho),{pathname:o}=Ea(),a=JSON.stringify(xm(n).map(i=>i.pathnameBase));return P.useMemo(()=>wm(e,JSON.parse(a),o,r==="path"),[e,a,o,r])}function vI(e,t){return yI(e,t)}function yI(e,t,r){ks()||tr(!1);let{navigator:n}=P.useContext(pi),{matches:o}=P.useContext(Ho),a=o[o.length-1],i=a?a.params:{};a&&a.pathname;let c=a?a.pathnameBase:"/";a&&a.route;let f=Ea(),g;if(t){var b;let x=typeof t=="string"?Ps(t):t;c==="/"||(b=x.pathname)!=null&&b.startsWith(c)||tr(!1),g=x}else g=f;let S=g.pathname||"/",O=c==="/"?S:S.slice(c.length)||"/",T=YM(e,{pathname:O}),C=CI(T&&T.map(x=>Object.assign({},x,{params:Object.assign({},i,x.params),pathname:wa([c,n.encodeLocation?n.encodeLocation(x.pathname).pathname:x.pathname]),pathnameBase:x.pathnameBase==="/"?c:wa([c,n.encodeLocation?n.encodeLocation(x.pathnameBase).pathname:x.pathnameBase])})),o,r);return t&&C?P.createElement(Tf.Provider,{value:{location:Rd({pathname:"/",search:"",hash:"",state:null,key:"default"},g),navigationType:fa.Pop}},C):C}function xI(){let e=kI(),t=hI(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},a=null;return P.createElement(P.Fragment,null,P.createElement("h2",null,"Unexpected Application Error!"),P.createElement("h3",{style:{fontStyle:"italic"}},t),r?P.createElement("pre",{style:o},r):null,a)}const wI=P.createElement(xI,null);class _I extends P.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error||r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error?P.createElement(Ho.Provider,{value:this.props.routeContext},P.createElement(W5.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function SI(e){let{routeContext:t,match:r,children:n}=e,o=P.useContext(Cf);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),P.createElement(Ho.Provider,{value:t},n)}function CI(e,t,r){var n;if(t===void 0&&(t=[]),r===void 0&&(r=null),e==null){var o;if((o=r)!=null&&o.errors)e=r.matches;else return null}let a=e,i=(n=r)==null?void 0:n.errors;if(i!=null){let c=a.findIndex(f=>f.route.id&&(i==null?void 0:i[f.route.id]));c>=0||tr(!1),a=a.slice(0,Math.min(a.length,c+1))}return a.reduceRight((c,f,g)=>{let b=f.route.id?i==null?void 0:i[f.route.id]:null,S=null;r&&(S=f.route.errorElement||wI);let O=t.concat(a.slice(0,g+1)),T=()=>{let C;return b?C=S:f.route.Component?C=P.createElement(f.route.Component,null):f.route.element?C=f.route.element:C=c,P.createElement(SI,{match:f,routeContext:{outlet:c,matches:O,isDataRoute:r!=null},children:C})};return r&&(f.route.ErrorBoundary||f.route.errorElement||g===0)?P.createElement(_I,{location:r.location,revalidation:r.revalidation,component:S,error:b,children:T(),routeContext:{outlet:null,matches:O,isDataRoute:!0}}):T()},null)}var q5=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(q5||{}),Md=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Md||{});function TI(e){let t=P.useContext(Cf);return t||tr(!1),t}function OI(e){let t=P.useContext(U5);return t||tr(!1),t}function PI(e){let t=P.useContext(Ho);return t||tr(!1),t}function G5(e){let t=PI(),r=t.matches[t.matches.length-1];return r.route.id||tr(!1),r.route.id}function kI(){var e;let t=P.useContext(W5),r=OI(Md.UseRouteError),n=G5(Md.UseRouteError);return t||((e=r.errors)==null?void 0:e[n])}function NI(){let{router:e}=TI(q5.UseNavigateStable),t=G5(Md.UseNavigateStable),r=P.useRef(!1);return $5(()=>{r.current=!0}),P.useCallback(function(o,a){a===void 0&&(a={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Rd({fromRouteId:t},a)))},[e,t])}function EI(e){let{to:t,replace:r,state:n,relative:o}=e;ks()||tr(!1);let{matches:a}=P.useContext(Ho),{pathname:i}=Ea(),c=So(),f=wm(t,xm(a).map(b=>b.pathnameBase),i,o==="path"),g=JSON.stringify(f);return P.useEffect(()=>c(JSON.parse(g),{replace:r,state:n,relative:o}),[c,g,o,r,n]),null}function mo(e){tr(!1)}function jI(e){let{basename:t="/",children:r=null,location:n,navigationType:o=fa.Pop,navigator:a,static:i=!1}=e;ks()&&tr(!1);let c=t.replace(/^\/*/,"/"),f=P.useMemo(()=>({basename:c,navigator:a,static:i}),[c,a,i]);typeof n=="string"&&(n=Ps(n));let{pathname:g="/",search:b="",hash:S="",state:O=null,key:T="default"}=n,C=P.useMemo(()=>{let x=Jl(g,c);return x==null?null:{location:{pathname:x,search:b,hash:S,state:O,key:T},navigationType:o}},[c,g,b,S,O,T,o]);return C==null?null:P.createElement(pi.Provider,{value:f},P.createElement(Tf.Provider,{children:r,value:C}))}function _m(e){let{children:t,location:r}=e;return vI(B0(t),r)}new Promise(()=>{});function B0(e,t){t===void 0&&(t=[]);let r=[];return P.Children.forEach(e,(n,o)=>{if(!P.isValidElement(n))return;let a=[...t,o];if(n.type===P.Fragment){r.push.apply(r,B0(n.props.children,a));return}n.type!==mo&&tr(!1),!n.props.index||!n.props.children||tr(!1);let i={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=B0(n.props.children,a)),r.push(i)}),r}/** + * React Router DOM v6.17.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Id(){return Id=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}function AI(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function RI(e,t){return e.button===0&&(!t||t==="_self")&&!AI(e)}const MI=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],II=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],DI=P.createContext({isTransitioning:!1}),LI="startTransition",Dx=wg[LI];function FI(e){let{basename:t,children:r,future:n,window:o}=e,a=P.useRef();a.current==null&&(a.current=qM({window:o,v5Compat:!0}));let i=a.current,[c,f]=P.useState({action:i.action,location:i.location}),{v7_startTransition:g}=n||{},b=P.useCallback(S=>{g&&Dx?Dx(()=>f(S)):f(S)},[f,g]);return P.useLayoutEffect(()=>i.listen(b),[i,b]),P.createElement(jI,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:i})}const zI=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",BI=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Y5=P.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:a,replace:i,state:c,target:f,to:g,preventScrollReset:b,unstable_viewTransition:S}=t,O=K5(t,MI),{basename:T}=P.useContext(pi),C,x=!1;if(typeof g=="string"&&BI.test(g)&&(C=g,zI))try{let u=new URL(window.location.href),l=g.startsWith("//")?new URL(u.protocol+g):new URL(g),h=Jl(l.pathname,T);l.origin===u.origin&&h!=null?g=h+l.search+l.hash:x=!0}catch{}let m=mI(g,{relative:o}),d=WI(g,{replace:i,state:c,target:f,preventScrollReset:b,relative:o,unstable_viewTransition:S});function s(u){n&&n(u),u.defaultPrevented||d(u)}return P.createElement("a",Id({},O,{href:C||m,onClick:x||a?n:s,ref:r,target:f}))}),VI=P.forwardRef(function(t,r){let{"aria-current":n="page",caseSensitive:o=!1,className:a="",end:i=!1,style:c,to:f,unstable_viewTransition:g,children:b}=t,S=K5(t,II),O=Of(f,{relative:S.relative}),T=Ea(),C=P.useContext(U5),{navigator:x}=P.useContext(pi),m=C!=null&&$I(O)&&g===!0,d=x.encodeLocation?x.encodeLocation(O).pathname:O.pathname,s=T.pathname,u=C&&C.navigation&&C.navigation.location?C.navigation.location.pathname:null;o||(s=s.toLowerCase(),u=u?u.toLowerCase():null,d=d.toLowerCase());let l=s===d||!i&&s.startsWith(d)&&s.charAt(d.length)==="/",h=u!=null&&(u===d||!i&&u.startsWith(d)&&u.charAt(d.length)==="/"),v={isActive:l,isPending:h,isTransitioning:m},w=l?n:void 0,j;typeof a=="function"?j=a(v):j=[a,l?"active":null,h?"pending":null,m?"transitioning":null].filter(Boolean).join(" ");let N=typeof c=="function"?c(v):c;return P.createElement(Y5,Id({},S,{"aria-current":w,className:j,ref:r,style:N,to:f,unstable_viewTransition:g}),typeof b=="function"?b(v):b)});var V0;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(V0||(V0={}));var Lx;(function(e){e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Lx||(Lx={}));function UI(e){let t=P.useContext(Cf);return t||tr(!1),t}function WI(e,t){let{target:r,replace:n,state:o,preventScrollReset:a,relative:i,unstable_viewTransition:c}=t===void 0?{}:t,f=So(),g=Ea(),b=Of(e,{relative:i});return P.useCallback(S=>{if(RI(S,r)){S.preventDefault();let O=n!==void 0?n:Ad(g)===Ad(b);f(e,{replace:O,state:o,preventScrollReset:a,relative:i,unstable_viewTransition:c})}},[g,f,b,n,o,r,e,a,i,c])}function $I(e,t){t===void 0&&(t={});let r=P.useContext(DI);r==null&&tr(!1);let{basename:n}=UI(V0.useViewTransitionState),o=Of(e,{relative:t.relative});if(!r.isTransitioning)return!1;let a=Jl(r.currentLocation.pathname,n)||r.currentLocation.pathname,i=Jl(r.nextLocation.pathname,n)||r.nextLocation.pathname;return z0(o.pathname,i)!=null||z0(o.pathname,a)!=null}function HI({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M7.5 3.75A1.5 1.5 0 006 5.25v13.5a1.5 1.5 0 001.5 1.5h6a1.5 1.5 0 001.5-1.5V15a.75.75 0 011.5 0v3.75a3 3 0 01-3 3h-6a3 3 0 01-3-3V5.25a3 3 0 013-3h6a3 3 0 013 3V9A.75.75 0 0115 9V5.25a1.5 1.5 0 00-1.5-1.5h-6zm5.03 4.72a.75.75 0 010 1.06l-1.72 1.72h10.94a.75.75 0 010 1.5H10.81l1.72 1.72a.75.75 0 11-1.06 1.06l-3-3a.75.75 0 010-1.06l3-3a.75.75 0 011.06 0z",clipRule:"evenodd"}))}const qI=P.forwardRef(HI),GI=qI;function KI({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M3 6.75A.75.75 0 013.75 6h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 6.75zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 5.25a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z",clipRule:"evenodd"}))}const YI=P.forwardRef(KI),QI=YI;function XI({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M11.078 2.25c-.917 0-1.699.663-1.85 1.567L9.05 4.889c-.02.12-.115.26-.297.348a7.493 7.493 0 00-.986.57c-.166.115-.334.126-.45.083L6.3 5.508a1.875 1.875 0 00-2.282.819l-.922 1.597a1.875 1.875 0 00.432 2.385l.84.692c.095.078.17.229.154.43a7.598 7.598 0 000 1.139c.015.2-.059.352-.153.43l-.841.692a1.875 1.875 0 00-.432 2.385l.922 1.597a1.875 1.875 0 002.282.818l1.019-.382c.115-.043.283-.031.45.082.312.214.641.405.985.57.182.088.277.228.297.35l.178 1.071c.151.904.933 1.567 1.85 1.567h1.844c.916 0 1.699-.663 1.85-1.567l.178-1.072c.02-.12.114-.26.297-.349.344-.165.673-.356.985-.57.167-.114.335-.125.45-.082l1.02.382a1.875 1.875 0 002.28-.819l.923-1.597a1.875 1.875 0 00-.432-2.385l-.84-.692c-.095-.078-.17-.229-.154-.43a7.614 7.614 0 000-1.139c-.016-.2.059-.352.153-.43l.84-.692c.708-.582.891-1.59.433-2.385l-.922-1.597a1.875 1.875 0 00-2.282-.818l-1.02.382c-.114.043-.282.031-.449-.083a7.49 7.49 0 00-.985-.57c-.183-.087-.277-.227-.297-.348l-.179-1.072a1.875 1.875 0 00-1.85-1.567h-1.843zM12 15.75a3.75 3.75 0 100-7.5 3.75 3.75 0 000 7.5z",clipRule:"evenodd"}))}const ZI=P.forwardRef(XI),Q5=ZI;function JI({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M15.75 1.5a6.75 6.75 0 00-6.651 7.906c.067.39-.032.717-.221.906l-6.5 6.499a3 3 0 00-.878 2.121v2.818c0 .414.336.75.75.75H6a.75.75 0 00.75-.75v-1.5h1.5A.75.75 0 009 19.5V18h1.5a.75.75 0 00.53-.22l2.658-2.658c.19-.189.517-.288.906-.22A6.75 6.75 0 1015.75 1.5zm0 3a.75.75 0 000 1.5A2.25 2.25 0 0118 8.25a.75.75 0 001.5 0 3.75 3.75 0 00-3.75-3.75z",clipRule:"evenodd"}))}const e4=P.forwardRef(JI),t4=e4;function r4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M2.625 6.75a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zm4.875 0A.75.75 0 018.25 6h12a.75.75 0 010 1.5h-12a.75.75 0 01-.75-.75zM2.625 12a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zM7.5 12a.75.75 0 01.75-.75h12a.75.75 0 010 1.5h-12A.75.75 0 017.5 12zm-4.875 5.25a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0zm4.875 0a.75.75 0 01.75-.75h12a.75.75 0 010 1.5h-12a.75.75 0 01-.75-.75z",clipRule:"evenodd"}))}const n4=P.forwardRef(r4),o4=n4;function a4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{d:"M5.566 4.657A4.505 4.505 0 016.75 4.5h10.5c.41 0 .806.055 1.183.157A3 3 0 0015.75 3h-7.5a3 3 0 00-2.684 1.657zM2.25 12a3 3 0 013-3h13.5a3 3 0 013 3v6a3 3 0 01-3 3H5.25a3 3 0 01-3-3v-6zM5.25 7.5c-.41 0-.806.055-1.184.157A3 3 0 016.75 6h10.5a3 3 0 012.683 1.657A4.505 4.505 0 0018.75 7.5H5.25z"}))}const i4=P.forwardRef(a4),s4=i4;function l4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{d:"M5.507 4.048A3 3 0 017.785 3h8.43a3 3 0 012.278 1.048l1.722 2.008A4.533 4.533 0 0019.5 6h-15c-.243 0-.482.02-.715.056l1.722-2.008z"}),P.createElement("path",{fillRule:"evenodd",d:"M1.5 10.5a3 3 0 013-3h15a3 3 0 110 6h-15a3 3 0 01-3-3zm15 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm2.25.75a.75.75 0 100-1.5.75.75 0 000 1.5zM4.5 15a3 3 0 100 6h15a3 3 0 100-6h-15zm11.25 3.75a.75.75 0 100-1.5.75.75 0 000 1.5zM19.5 18a.75.75 0 11-1.5 0 .75.75 0 011.5 0z",clipRule:"evenodd"}))}const u4=P.forwardRef(l4),c4=u4;function d4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{d:"M11.644 1.59a.75.75 0 01.712 0l9.75 5.25a.75.75 0 010 1.32l-9.75 5.25a.75.75 0 01-.712 0l-9.75-5.25a.75.75 0 010-1.32l9.75-5.25z"}),P.createElement("path",{d:"M3.265 10.602l7.668 4.129a2.25 2.25 0 002.134 0l7.668-4.13 1.37.739a.75.75 0 010 1.32l-9.75 5.25a.75.75 0 01-.71 0l-9.75-5.25a.75.75 0 010-1.32l1.37-.738z"}),P.createElement("path",{d:"M10.933 19.231l-7.668-4.13-1.37.739a.75.75 0 000 1.32l9.75 5.25c.221.12.489.12.71 0l9.75-5.25a.75.75 0 000-1.32l-1.37-.738-7.668 4.13a2.25 2.25 0 01-2.134-.001z"}))}const f4=P.forwardRef(d4),p4=f4;function h4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M8.25 6.75a3.75 3.75 0 117.5 0 3.75 3.75 0 01-7.5 0zM15.75 9.75a3 3 0 116 0 3 3 0 01-6 0zM2.25 9.75a3 3 0 116 0 3 3 0 01-6 0zM6.31 15.117A6.745 6.745 0 0112 12a6.745 6.745 0 016.709 7.498.75.75 0 01-.372.568A12.696 12.696 0 0112 21.75c-2.305 0-4.47-.612-6.337-1.684a.75.75 0 01-.372-.568 6.787 6.787 0 011.019-4.38z",clipRule:"evenodd"}),P.createElement("path",{d:"M5.082 14.254a8.287 8.287 0 00-1.308 5.135 9.687 9.687 0 01-1.764-.44l-.115-.04a.563.563 0 01-.373-.487l-.01-.121a3.75 3.75 0 013.57-4.047zM20.226 19.389a8.287 8.287 0 00-1.308-5.135 3.75 3.75 0 013.57 4.047l-.01.121a.563.563 0 01-.373.486l-.115.04c-.567.2-1.156.349-1.764.441z"}))}const g4=P.forwardRef(h4),m4=g4;function b4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z",clipRule:"evenodd"}))}const v4=P.forwardRef(b4),y4=v4;function x4({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{fillRule:"evenodd",d:"M12 6.75a5.25 5.25 0 016.775-5.025.75.75 0 01.313 1.248l-3.32 3.319c.063.475.276.934.641 1.299.365.365.824.578 1.3.64l3.318-3.319a.75.75 0 011.248.313 5.25 5.25 0 01-5.472 6.756c-1.018-.086-1.87.1-2.309.634L7.344 21.3A3.298 3.298 0 112.7 16.657l8.684-7.151c.533-.44.72-1.291.634-2.309A5.342 5.342 0 0112 6.75zM4.117 19.125a.75.75 0 01.75-.75h.008a.75.75 0 01.75.75v.008a.75.75 0 01-.75.75h-.008a.75.75 0 01-.75-.75v-.008z",clipRule:"evenodd"}),P.createElement("path",{d:"M10.076 8.64l-2.201-2.2V4.874a.75.75 0 00-.364-.643l-3.75-2.25a.75.75 0 00-.916.113l-.75.75a.75.75 0 00-.113.916l2.25 3.75a.75.75 0 00.643.364h1.564l2.062 2.062 1.575-1.297z"}),P.createElement("path",{fillRule:"evenodd",d:"M12.556 17.329l4.183 4.182a3.375 3.375 0 004.773-4.773l-3.306-3.305a6.803 6.803 0 01-1.53.043c-.394-.034-.682-.006-.867.042a.589.589 0 00-.167.063l-3.086 3.748zm3.414-1.36a.75.75 0 011.06 0l1.875 1.876a.75.75 0 11-1.06 1.06L15.97 17.03a.75.75 0 010-1.06z",clipRule:"evenodd"}))}const w4=P.forwardRef(x4),_4=w4;var H={},X5={},Z5={exports:{}};/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/(function(e){(function(){var t={}.hasOwnProperty;function r(){for(var n=[],o=0;oe&&(t=0,n=r,r=new Map)}return{get:function(a){var i=r.get(a);return i!==void 0?i:(i=n.get(a))!==void 0?(o(a,i),i):void 0},set:function(a,i){r.has(a)?r.set(a,i):o(a,i)}}}function T4(e){var t=e.separator||":";return function(r){for(var n=0,o=[],a=0,i=0;i1?t-1:0),n=1;nf.length)&&(g=f.length);for(var b=0,S=new Array(g);bm.length)&&(d=m.length);for(var s=0,u=new Array(d);ss.length)&&(u=s.length);for(var l=0,h=new Array(u);ls.length)&&(u=s.length);for(var l=0,h=new Array(u);lw.length)&&(j=w.length);for(var N=0,k=new Array(j);Nl.length)&&(h=l.length);for(var v=0,w=new Array(h);vd.length)&&(s=d.length);for(var u=0,l=new Array(s);uh.length)&&(v=h.length);for(var w=0,j=new Array(v);wu.length)&&(l=u.length);for(var h=0,v=new Array(l);hT.length)&&(C=T.length);for(var x=0,m=new Array(C);xx.length)&&(m=x.length);for(var d=0,s=new Array(m);d"u"?c[g]=i.cloneUnlessOtherwiseSpecified(f,i):i.isMergeableObject(f)?c[g]=(0,t.default)(o[g],f,i):o.indexOf(f)===-1&&c.push(f)}),c}})(wT);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{MaterialTailwindTheme:function(){return b},ThemeProvider:function(){return S},useTheme:function(){return O}});var r=g(P),n=c(nt),o=c(Tr),a=c(Cm),i=c(wT);function c(T){return T&&T.__esModule?T:{default:T}}function f(T){if(typeof WeakMap!="function")return null;var C=new WeakMap,x=new WeakMap;return(f=function(m){return m?x:C})(T)}function g(T,C){if(!C&&T&&T.__esModule)return T;if(T===null||typeof T!="object"&&typeof T!="function")return{default:T};var x=f(C);if(x&&x.has(T))return x.get(T);var m={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in T)if(s!=="default"&&Object.prototype.hasOwnProperty.call(T,s)){var u=d?Object.getOwnPropertyDescriptor(T,s):null;u&&(u.get||u.set)?Object.defineProperty(m,s,u):m[s]=T[s]}return m.default=T,x&&x.set(T,m),m}var b=(0,r.createContext)(a.default);b.displayName="MaterialTailwindThemeProvider";function S(T){var C=T.value,x=C===void 0?a.default:C,m=T.children,d=(0,o.default)(a.default,x,{arrayMerge:i.default});return r.default.createElement(b.Provider,{value:d},m)}var O=function(){return(0,r.useContext)(b)};S.propTypes={value:n.default.instanceOf(Object),children:n.default.node.isRequired}})(Ze);var kf={},bu={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(O,T){for(var C in T)Object.defineProperty(O,C,{enumerable:!0,get:T[C]})}t(e,{propTypesOpen:function(){return a},propTypesIcon:function(){return i},propTypesAnimate:function(){return c},propTypesDisabled:function(){return f},propTypesClassName:function(){return g},propTypesValue:function(){return b},propTypesChildren:function(){return S}});var r=o(nt),n=Gt;function o(O){return O&&O.__esModule?O:{default:O}}var a=r.default.bool.isRequired,i=r.default.node,c=n.propTypesAnimation,f=r.default.bool,g=r.default.string,b=r.default.instanceOf(Object).isRequired,S=r.default.node.isRequired})(bu);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(f,g){for(var b in g)Object.defineProperty(f,b,{enumerable:!0,get:g[b]})}t(e,{AccordionContext:function(){return a},useAccordion:function(){return i},AccordionContextProvider:function(){return c}});var r=o(P),n=bu;function o(f){return f&&f.__esModule?f:{default:f}}var a=r.default.createContext(null);a.displayName="MaterialTailwind.AccordionContext";function i(){var f=r.default.useContext(a);if(!f)throw new Error("useAccordion() must be used within an Accordion. It happens when you use AccordionHeader or AccordionBody components outside the Accordion component.");return f}var c=function(f){var g=f.value,b=f.children;return r.default.createElement(a.Provider,{value:g},b)};c.propTypes={value:n.propTypesValue,children:n.propTypesChildren},c.displayName="MaterialTailwind.AccordionContextProvider"})(kf);var _T={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{AccordionHeader:function(){return C},default:function(){return x}});var r=S(P),n=S(ct),o=rt,a=S(et),i=kf,c=Ze,f=bu;function g(m,d,s){return d in m?Object.defineProperty(m,d,{value:s,enumerable:!0,configurable:!0,writable:!0}):m[d]=s,m}function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.className,u=m.children,l=O(m,["className","children"]),h=(0,i.useAccordion)(),v=h.open,w=h.icon,j=h.disabled,N=(0,c.useTheme)().accordion,k=N.styles.base;s=s??"";var A=(0,o.twMerge)((0,n.default)((0,a.default)(k.header.initial),g({},(0,a.default)(k.header.active),v)),s),M=(0,n.default)((0,a.default)(k.header.icon));return r.default.createElement("button",b({},l,{ref:d,type:"button",disabled:j,className:A}),u,r.default.createElement("span",{className:M},w??(v?r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M5 10a1 1 0 011-1h8a1 1 0 110 2H6a1 1 0 01-1-1z",clipRule:"evenodd"})):r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M10 5a1 1 0 011 1v3h3a1 1 0 110 2h-3v3a1 1 0 11-2 0v-3H6a1 1 0 110-2h3V6a1 1 0 011-1z",clipRule:"evenodd"})))))});C.propTypes={className:f.propTypesClassName,children:f.propTypesChildren},C.displayName="MaterialTailwind.AccordionHeader";var x=C})(_T);var ST={},xr={},H0=function(e,t){return H0=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},H0(e,t)};function CT(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");H0(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var Ld=function(){return Ld=Object.assign||function(t){for(var r,n=1,o=arguments.length;n=0;c--)(i=e[c])&&(a=(o<3?i(a):o>3?i(t,r,a):i(t,r))||a);return o>3&&a&&Object.defineProperty(t,r,a),a}function OT(e,t){return function(r,n){t(r,n,e)}}function PT(e,t,r,n,o,a){function i(d){if(d!==void 0&&typeof d!="function")throw new TypeError("Function expected");return d}for(var c=n.kind,f=c==="getter"?"get":c==="setter"?"set":"value",g=!t&&e?n.static?e:e.prototype:null,b=t||(g?Object.getOwnPropertyDescriptor(g,n.name):{}),S,O=!1,T=r.length-1;T>=0;T--){var C={};for(var x in n)C[x]=x==="access"?{}:n[x];for(var x in n.access)C.access[x]=n.access[x];C.addInitializer=function(d){if(O)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(d||null))};var m=(0,r[T])(c==="accessor"?{get:b.get,set:b.set}:b[f],C);if(c==="accessor"){if(m===void 0)continue;if(m===null||typeof m!="object")throw new TypeError("Object expected");(S=i(m.get))&&(b.get=S),(S=i(m.set))&&(b.set=S),(S=i(m.init))&&o.unshift(S)}else(S=i(m))&&(c==="field"?o.unshift(S):b[f]=S)}g&&Object.defineProperty(g,n.name,b),O=!0}function kT(e,t,r){for(var n=arguments.length>2,o=0;o0&&a[a.length-1])&&(g[0]===6||g[0]===2)){r=0;continue}if(g[0]===3&&(!a||g[1]>a[0]&&g[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Bm(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,a=[],i;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)a.push(o.value)}catch(c){i={error:c}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return a}function IT(){for(var e=[],t=0;t1||f(T,x)})},C&&(o[T]=C(o[T])))}function f(T,C){try{g(n[T](C))}catch(x){O(a[0][3],x)}}function g(T){T.value instanceof hs?Promise.resolve(T.value.v).then(b,S):O(a[0][2],T)}function b(T){f("next",T)}function S(T){f("throw",T)}function O(T,C){T(C),a.shift(),a.length&&f(a[0][0],a[0][1])}}function zT(e){var t,r;return t={},n("next"),n("throw",function(o){throw o}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(o,a){t[o]=e[o]?function(i){return(r=!r)?{value:hs(e[o](i)),done:!1}:a?a(i):i}:a}}function BT(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Fd=="function"?Fd(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(a){r[a]=e[a]&&function(i){return new Promise(function(c,f){i=e[a](i),o(c,f,i.done,i.value)})}}function o(a,i,c,f){Promise.resolve(f).then(function(g){a({value:g,done:c})},i)}}function VT(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var rD=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},q0=function(e){return q0=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},q0(e)};function UT(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=q0(e),n=0;nr=>Math.max(Math.min(r,t),e),Nl=e=>e%1?Number(e.toFixed(5)):e,tu=/(-)?([\d]*\.?[\d])+/g,G0=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,lD=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function vu(e){return typeof e=="string"}const yu={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Vm=Object.assign(Object.assign({},yu),{transform:JT(0,1)}),uD=Object.assign(Object.assign({},yu),{default:1}),xu=e=>({test:t=>vu(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),cD=xu("deg"),ts=xu("%"),dD=xu("px"),fD=xu("vh"),pD=xu("vw"),hD=Object.assign(Object.assign({},ts),{parse:e=>ts.parse(e)/100,transform:e=>ts.transform(e*100)}),Um=(e,t)=>r=>!!(vu(r)&&lD.test(r)&&r.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(r,t)),eO=(e,t,r)=>n=>{if(!vu(n))return n;const[o,a,i,c]=n.match(tu);return{[e]:parseFloat(o),[t]:parseFloat(a),[r]:parseFloat(i),alpha:c!==void 0?parseFloat(c):1}},bl={test:Um("hsl","hue"),parse:eO("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:r,alpha:n=1})=>"hsla("+Math.round(e)+", "+ts.transform(Nl(t))+", "+ts.transform(Nl(r))+", "+Nl(Vm.transform(n))+")"},gD=JT(0,255),$c=Object.assign(Object.assign({},yu),{transform:e=>Math.round(gD(e))}),Gi={test:Um("rgb","red"),parse:eO("red","green","blue"),transform:({red:e,green:t,blue:r,alpha:n=1})=>"rgba("+$c.transform(e)+", "+$c.transform(t)+", "+$c.transform(r)+", "+Nl(Vm.transform(n))+")"};function mD(e){let t="",r="",n="",o="";return e.length>5?(t=e.substr(1,2),r=e.substr(3,2),n=e.substr(5,2),o=e.substr(7,2)):(t=e.substr(1,1),r=e.substr(2,1),n=e.substr(3,1),o=e.substr(4,1),t+=t,r+=r,n+=n,o+=o),{red:parseInt(t,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:o?parseInt(o,16)/255:1}}const K0={test:Um("#"),parse:mD,transform:Gi.transform},Wm={test:e=>Gi.test(e)||K0.test(e)||bl.test(e),parse:e=>Gi.test(e)?Gi.parse(e):bl.test(e)?bl.parse(e):K0.parse(e),transform:e=>vu(e)?e:e.hasOwnProperty("red")?Gi.transform(e):bl.transform(e)},tO="${c}",rO="${n}";function bD(e){var t,r,n,o;return isNaN(e)&&vu(e)&&((r=(t=e.match(tu))===null||t===void 0?void 0:t.length)!==null&&r!==void 0?r:0)+((o=(n=e.match(G0))===null||n===void 0?void 0:n.length)!==null&&o!==void 0?o:0)>0}function nO(e){typeof e=="number"&&(e=`${e}`);const t=[];let r=0;const n=e.match(G0);n&&(r=n.length,e=e.replace(G0,tO),t.push(...n.map(Wm.parse)));const o=e.match(tu);return o&&(e=e.replace(tu,rO),t.push(...o.map(yu.parse))),{values:t,numColors:r,tokenised:e}}function oO(e){return nO(e).values}function aO(e){const{values:t,numColors:r,tokenised:n}=nO(e),o=t.length;return a=>{let i=n;for(let c=0;ctypeof e=="number"?0:e;function yD(e){const t=oO(e);return aO(e)(t.map(vD))}const iO={test:bD,parse:oO,createTransformer:aO,getAnimatableNone:yD},xD=new Set(["brightness","contrast","saturate","opacity"]);function wD(e){let[t,r]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[n]=r.match(tu)||[];if(!n)return e;const o=r.replace(n,"");let a=xD.has(t)?1:0;return n!==r&&(a*=100),t+"("+a+o+")"}const _D=/([a-z-]*)\(.*?\)/g,SD=Object.assign(Object.assign({},iO),{getAnimatableNone:e=>{const t=e.match(_D);return t?t.map(wD).join(" "):e}});fr.alpha=Vm;fr.color=Wm;fr.complex=iO;fr.degrees=cD;fr.filter=SD;fr.hex=K0;fr.hsla=bl;fr.number=yu;fr.percent=ts;fr.progressPercentage=hD;fr.px=dD;fr.rgbUnit=$c;fr.rgba=Gi;fr.scale=uD;fr.vh=fD;fr.vw=pD;var st={},bi={};Object.defineProperty(bi,"__esModule",{value:!0});const sO=1/60*1e3,CD=typeof performance<"u"?()=>performance.now():()=>Date.now(),lO=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(CD()),sO);function TD(e){let t=[],r=[],n=0,o=!1,a=!1;const i=new WeakSet,c={schedule:(f,g=!1,b=!1)=>{const S=b&&o,O=S?t:r;return g&&i.add(f),O.indexOf(f)===-1&&(O.push(f),S&&o&&(n=t.length)),f},cancel:f=>{const g=r.indexOf(f);g!==-1&&r.splice(g,1),i.delete(f)},process:f=>{if(o){a=!0;return}if(o=!0,[t,r]=[r,t],r.length=0,n=t.length,n)for(let g=0;g(e[t]=TD(()=>ru=!0),e),{}),PD=wu.reduce((e,t)=>{const r=Ef[t];return e[t]=(n,o=!1,a=!1)=>(ru||jD(),r.schedule(n,o,a)),e},{}),kD=wu.reduce((e,t)=>(e[t]=Ef[t].cancel,e),{}),ND=wu.reduce((e,t)=>(e[t]=()=>Ef[t].process(rs),e),{}),ED=e=>Ef[e].process(rs),uO=e=>{ru=!1,rs.delta=Y0?sO:Math.max(Math.min(e-rs.timestamp,OD),1),rs.timestamp=e,Q0=!0,wu.forEach(ED),Q0=!1,ru&&(Y0=!1,lO(uO))},jD=()=>{ru=!0,Y0=!0,Q0||lO(uO)},AD=()=>rs;bi.cancelSync=kD;bi.default=PD;bi.flushSync=ND;bi.getFrameData=AD;Object.defineProperty(st,"__esModule",{value:!0});var cO=QT,gs=ZT,Hn=fr,jf=bi;function RD(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var MD=RD(jf);const nu=(e,t,r)=>Math.min(Math.max(r,e),t),ph=.001,ID=.01,Ux=10,DD=.05,LD=1;function FD({duration:e=800,bounce:t=.25,velocity:r=0,mass:n=1}){let o,a;gs.warning(e<=Ux*1e3,"Spring duration must be 10 seconds or less");let i=1-t;i=nu(DD,LD,i),e=nu(ID,Ux,e/1e3),i<1?(o=g=>{const b=g*i,S=b*e,O=b-r,T=X0(g,i),C=Math.exp(-S);return ph-O/T*C},a=g=>{const S=g*i*e,O=S*r+r,T=Math.pow(i,2)*Math.pow(g,2)*e,C=Math.exp(-S),x=X0(Math.pow(g,2),i);return(-o(g)+ph>0?-1:1)*((O-T)*C)/x}):(o=g=>{const b=Math.exp(-g*e),S=(g-r)*e+1;return-ph+b*S},a=g=>{const b=Math.exp(-g*e),S=(r-g)*(e*e);return b*S});const c=5/e,f=BD(o,a,c);if(e=e*1e3,isNaN(f))return{stiffness:100,damping:10,duration:e};{const g=Math.pow(f,2)*n;return{stiffness:g,damping:i*2*Math.sqrt(n*g),duration:e}}}const zD=12;function BD(e,t,r){let n=r;for(let o=1;oe[r]!==void 0)}function WD(e){let t=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},e);if(!Wx(e,UD)&&Wx(e,VD)){const r=FD(e);t=Object.assign(Object.assign(Object.assign({},t),r),{velocity:0,mass:1}),t.isResolvedFromDuration=!0}return t}function Af(e){var{from:t=0,to:r=1,restSpeed:n=2,restDelta:o}=e,a=cO.__rest(e,["from","to","restSpeed","restDelta"]);const i={done:!1,value:t};let{stiffness:c,damping:f,mass:g,velocity:b,duration:S,isResolvedFromDuration:O}=WD(a),T=$x,C=$x;function x(){const m=b?-(b/1e3):0,d=r-t,s=f/(2*Math.sqrt(c*g)),u=Math.sqrt(c/g)/1e3;if(o===void 0&&(o=Math.min(Math.abs(r-t)/100,.4)),s<1){const l=X0(u,s);T=h=>{const v=Math.exp(-s*u*h);return r-v*((m+s*u*d)/l*Math.sin(l*h)+d*Math.cos(l*h))},C=h=>{const v=Math.exp(-s*u*h);return s*u*v*(Math.sin(l*h)*(m+s*u*d)/l+d*Math.cos(l*h))-v*(Math.cos(l*h)*(m+s*u*d)-l*d*Math.sin(l*h))}}else if(s===1)T=l=>r-Math.exp(-u*l)*(d+(m+u*d)*l);else{const l=u*Math.sqrt(s*s-1);T=h=>{const v=Math.exp(-s*u*h),w=Math.min(l*h,300);return r-v*((m+s*u*d)*Math.sinh(w)+l*d*Math.cosh(w))/l}}}return x(),{next:m=>{const d=T(m);if(O)i.done=m>=S;else{const s=C(m)*1e3,u=Math.abs(s)<=n,l=Math.abs(r-d)<=o;i.done=u&&l}return i.value=i.done?r:d,i},flipTarget:()=>{b=-b,[t,r]=[r,t],x()}}}Af.needsInterpolation=(e,t)=>typeof e=="string"||typeof t=="string";const $x=e=>0,$m=(e,t,r)=>{const n=t-e;return n===0?1:(r-e)/n},Rf=(e,t,r)=>-r*e+r*t+e;function hh(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function Hx({hue:e,saturation:t,lightness:r,alpha:n}){e/=360,t/=100,r/=100;let o=0,a=0,i=0;if(!t)o=a=i=r;else{const c=r<.5?r*(1+t):r+t-r*t,f=2*r-c;o=hh(f,c,e+1/3),a=hh(f,c,e),i=hh(f,c,e-1/3)}return{red:Math.round(o*255),green:Math.round(a*255),blue:Math.round(i*255),alpha:n}}const $D=(e,t,r)=>{const n=e*e,o=t*t;return Math.sqrt(Math.max(0,r*(o-n)+n))},HD=[Hn.hex,Hn.rgba,Hn.hsla],qx=e=>HD.find(t=>t.test(e)),Gx=e=>`'${e}' is not an animatable color. Use the equivalent color code instead.`,Hm=(e,t)=>{let r=qx(e),n=qx(t);gs.invariant(!!r,Gx(e)),gs.invariant(!!n,Gx(t));let o=r.parse(e),a=n.parse(t);r===Hn.hsla&&(o=Hx(o),r=Hn.rgba),n===Hn.hsla&&(a=Hx(a),n=Hn.rgba);const i=Object.assign({},o);return c=>{for(const f in i)f!=="alpha"&&(i[f]=$D(o[f],a[f],c));return i.alpha=Rf(o.alpha,a.alpha,c),r.transform(i)}},qD={x:0,y:0,z:0},Z0=e=>typeof e=="number",GD=(e,t)=>r=>t(e(r)),qm=(...e)=>e.reduce(GD);function dO(e,t){return Z0(e)?r=>Rf(e,t,r):Hn.color.test(e)?Hm(e,t):Gm(e,t)}const fO=(e,t)=>{const r=[...e],n=r.length,o=e.map((a,i)=>dO(a,t[i]));return a=>{for(let i=0;i{const r=Object.assign(Object.assign({},e),t),n={};for(const o in r)e[o]!==void 0&&t[o]!==void 0&&(n[o]=dO(e[o],t[o]));return o=>{for(const a in n)r[a]=n[a](o);return r}};function Kx(e){const t=Hn.complex.parse(e),r=t.length;let n=0,o=0,a=0;for(let i=0;i{const r=Hn.complex.createTransformer(t),n=Kx(e),o=Kx(t);return n.numHSL===o.numHSL&&n.numRGB===o.numRGB&&n.numNumbers>=o.numNumbers?qm(fO(n.parsed,o.parsed),r):(gs.warning(!0,`Complex values '${e}' and '${t}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),i=>`${i>0?t:e}`)},YD=(e,t)=>r=>Rf(e,t,r);function QD(e){if(typeof e=="number")return YD;if(typeof e=="string")return Hn.color.test(e)?Hm:Gm;if(Array.isArray(e))return fO;if(typeof e=="object")return KD}function XD(e,t,r){const n=[],o=r||QD(e[0]),a=e.length-1;for(let i=0;ir($m(e,t,n))}function JD(e,t){const r=e.length,n=r-1;return o=>{let a=0,i=!1;if(o<=e[0]?i=!0:o>=e[n]&&(a=n-1,i=!0),!i){let f=1;for(;fo||f===n);f++);a=f-1}const c=$m(e[a],e[a+1],o);return t[a](c)}}function Km(e,t,{clamp:r=!0,ease:n,mixer:o}={}){const a=e.length;gs.invariant(a===t.length,"Both input and output ranges must be the same length"),gs.invariant(!n||!Array.isArray(n)||n.length===a-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),e[0]>e[a-1]&&(e=[].concat(e),t=[].concat(t),e.reverse(),t.reverse());const i=XD(t,n,o),c=a===2?ZD(e,i):JD(e,i);return r?f=>c(nu(e[0],e[a-1],f)):c}const _u=e=>t=>1-e(1-t),Mf=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,pO=e=>t=>Math.pow(t,e),Ym=e=>t=>t*t*((e+1)*t-e),hO=e=>{const t=Ym(e);return r=>(r*=2)<1?.5*t(r):.5*(2-Math.pow(2,-10*(r-1)))},gO=1.525,eL=4/11,tL=8/11,rL=9/10,mO=e=>e,Qm=pO(2),nL=_u(Qm),bO=Mf(Qm),vO=e=>1-Math.sin(Math.acos(e)),yO=_u(vO),oL=Mf(yO),Xm=Ym(gO),aL=_u(Xm),iL=Mf(Xm),sL=hO(gO),lL=4356/361,uL=35442/1805,cL=16061/1805,zd=e=>{if(e===1||e===0)return e;const t=e*e;return ee<.5?.5*(1-zd(1-e*2)):.5*zd(e*2-1)+.5;function pL(e,t){return e.map(()=>t||bO).splice(0,e.length-1)}function hL(e){const t=e.length;return e.map((r,n)=>n!==0?n/(t-1):0)}function gL(e,t){return e.map(r=>r*t)}function El({from:e=0,to:t=1,ease:r,offset:n,duration:o=300}){const a={done:!1,value:e},i=Array.isArray(t)?t:[e,t],c=gL(n&&n.length===i.length?n:hL(i),o);function f(){return Km(c,i,{ease:Array.isArray(r)?r:pL(i,r)})}let g=f();return{next:b=>(a.value=g(b),a.done=b>=o,a),flipTarget:()=>{i.reverse(),g=f()}}}function xO({velocity:e=0,from:t=0,power:r=.8,timeConstant:n=350,restDelta:o=.5,modifyTarget:a}){const i={done:!1,value:t};let c=r*e;const f=t+c,g=a===void 0?f:a(f);return g!==f&&(c=g-t),{next:b=>{const S=-c*Math.exp(-b/n);return i.done=!(S>o||S<-o),i.value=i.done?g:g+S,i},flipTarget:()=>{}}}const Yx={keyframes:El,spring:Af,decay:xO};function mL(e){if(Array.isArray(e.to))return El;if(Yx[e.type])return Yx[e.type];const t=new Set(Object.keys(e));return t.has("ease")||t.has("duration")&&!t.has("dampingRatio")?El:t.has("dampingRatio")||t.has("stiffness")||t.has("mass")||t.has("damping")||t.has("restSpeed")||t.has("restDelta")?Af:El}function wO(e,t,r=0){return e-t-r}function bL(e,t,r=0,n=!0){return n?wO(t+-e,t,r):t-(e-t)+r}function vL(e,t,r,n){return n?e>=t+r:e<=-r}const yL=e=>{const t=({delta:r})=>e(r);return{start:()=>MD.default.update(t,!0),stop:()=>jf.cancelSync.update(t)}};function _O(e){var t,r,{from:n,autoplay:o=!0,driver:a=yL,elapsed:i=0,repeat:c=0,repeatType:f="loop",repeatDelay:g=0,onPlay:b,onStop:S,onComplete:O,onRepeat:T,onUpdate:C}=e,x=cO.__rest(e,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let{to:m}=x,d,s=0,u=x.duration,l,h=!1,v=!0,w;const j=mL(x);!((r=(t=j).needsInterpolation)===null||r===void 0)&&r.call(t,n,m)&&(w=Km([0,100],[n,m],{clamp:!1}),n=0,m=100);const N=j(Object.assign(Object.assign({},x),{from:n,to:m}));function k(){s++,f==="reverse"?(v=s%2===0,i=bL(i,u,g,v)):(i=wO(i,u,g),f==="mirror"&&N.flipTarget()),h=!1,T&&T()}function A(){d.stop(),O&&O()}function M(L){if(v||(L=-L),i+=L,!h){const B=N.next(Math.max(0,i));l=B.value,w&&(l=w(l)),h=v?B.done:i<=0}C==null||C(l),h&&(s===0&&(u??(u=i)),s{S==null||S(),d.stop()}}}function SO(e,t){return t?e*(1e3/t):0}function xL({from:e=0,velocity:t=0,min:r,max:n,power:o=.8,timeConstant:a=750,bounceStiffness:i=500,bounceDamping:c=10,restDelta:f=1,modifyTarget:g,driver:b,onUpdate:S,onComplete:O,onStop:T}){let C;function x(u){return r!==void 0&&un}function m(u){return r===void 0?n:n===void 0||Math.abs(r-u){var h;S==null||S(l),(h=u.onUpdate)===null||h===void 0||h.call(u,l)},onComplete:O,onStop:T}))}function s(u){d(Object.assign({type:"spring",stiffness:i,damping:c,restDelta:f},u))}if(x(e))s({from:e,velocity:t,to:m(e)});else{let u=o*t+e;typeof g<"u"&&(u=g(u));const l=m(u),h=l===r?-1:1;let v,w;const j=N=>{v=w,w=N,t=SO(N-v,jf.getFrameData().delta),(h===1&&N>l||h===-1&&NC==null?void 0:C.stop()}}const CO=e=>e*180/Math.PI,wL=(e,t=qD)=>CO(Math.atan2(t.y-e.y,t.x-e.x)),_L=(e,t)=>{let r=!0;return t===void 0&&(t=e,r=!1),n=>r?n-e+t:(e=n,r=!0,t)},SL=e=>e,Zm=(e=SL)=>(t,r,n)=>{const o=r-n,a=-(0-t+1)*(0-e(Math.abs(o)));return o<=0?r+a:r-a},CL=Zm(),TL=Zm(Math.sqrt),TO=e=>e*Math.PI/180,Bd=e=>e.hasOwnProperty("x")&&e.hasOwnProperty("y"),J0=e=>Bd(e)&&e.hasOwnProperty("z"),mc=(e,t)=>Math.abs(e-t);function OL(e,t){if(Z0(e)&&Z0(t))return mc(e,t);if(Bd(e)&&Bd(t)){const r=mc(e.x,t.x),n=mc(e.y,t.y),o=J0(e)&&J0(t)?mc(e.z,t.z):0;return Math.sqrt(Math.pow(r,2)+Math.pow(n,2)+Math.pow(o,2))}}const PL=(e,t,r)=>(t=TO(t),{x:r*Math.cos(t)+e.x,y:r*Math.sin(t)+e.y}),OO=(e,t=2)=>(t=Math.pow(10,t),Math.round(e*t)/t),PO=(e,t,r,n=0)=>OO(e+r*(t-e)/Math.max(n,r)),kL=(e=50)=>{let t=0,r=0;return n=>{const o=jf.getFrameData().timestamp,a=o!==r?o-r:0,i=a?PO(t,n,a,e):t;return r=o,t=i,i}},NL=e=>{if(typeof e=="number")return t=>Math.round(t/e)*e;{let t=0;const r=e.length;return n=>{let o=Math.abs(e[0]-n);for(t=1;to)return e[t-1];if(t===r-1)return a;o=i}}}};function EL(e,t){return e/(1e3/t)}const jL=(e,t,r)=>{const n=t-e;return((r-e)%n+n)%n+e},kO=(e,t)=>1-3*t+3*e,NO=(e,t)=>3*t-6*e,EO=e=>3*e,Vd=(e,t,r)=>((kO(t,r)*e+NO(t,r))*e+EO(t))*e,jO=(e,t,r)=>3*kO(t,r)*e*e+2*NO(t,r)*e+EO(t),AL=1e-7,RL=10;function ML(e,t,r,n,o){let a,i,c=0;do i=t+(r-t)/2,a=Vd(i,n,o)-e,a>0?r=i:t=i;while(Math.abs(a)>AL&&++c=DL?LL(i,S,e,r):O===0?S:ML(i,c,c+bc,e,r)}return i=>i===0||i===1?i:Vd(a(i),t,n)}const zL=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);const n=r*e,o=t==="end"?Math.floor(n):Math.ceil(n);return nu(0,1,o/e)};st.angle=wL;st.animate=_O;st.anticipate=sL;st.applyOffset=_L;st.attract=CL;st.attractExpo=TL;st.backIn=Xm;st.backInOut=iL;st.backOut=aL;st.bounceIn=dL;st.bounceInOut=fL;st.bounceOut=zd;st.circIn=vO;st.circInOut=oL;st.circOut=yO;st.clamp=nu;st.createAnticipate=hO;st.createAttractor=Zm;st.createBackIn=Ym;st.createExpoIn=pO;st.cubicBezier=FL;st.decay=xO;st.degreesToRadians=TO;st.distance=OL;st.easeIn=Qm;st.easeInOut=bO;st.easeOut=nL;st.inertia=xL;st.interpolate=Km;st.isPoint=Bd;st.isPoint3D=J0;st.keyframes=El;st.linear=mO;st.mirrorEasing=Mf;st.mix=Rf;st.mixColor=Hm;st.mixComplex=Gm;st.pipe=qm;st.pointFromVector=PL;st.progress=$m;st.radiansToDegrees=CO;st.reverseEasing=_u;st.smooth=kL;st.smoothFrame=PO;st.snap=NL;st.spring=Af;st.steps=zL;st.toDecimal=OO;st.velocityPerFrame=EL;st.velocityPerSecond=SO;st.wrap=jL;class BL{setAnimation(t){this.animation=t,t==null||t.finished.then(()=>this.clearAnimation()).catch(()=>{})}clearAnimation(){this.animation=this.generator=void 0}}const gh=new WeakMap;function Jm(e){return gh.has(e)||gh.set(e,{transforms:[],values:new Map}),gh.get(e)}function VL(e,t){return e.has(t)||e.set(t,new BL),e.get(t)}function AO(e,t){e.indexOf(t)===-1&&e.push(t)}function RO(e,t){const r=e.indexOf(t);r>-1&&e.splice(r,1)}const MO=(e,t,r)=>Math.min(Math.max(r,e),t),Gr={duration:.3,delay:0,endDelay:0,repeat:0,easing:"ease"},Wo=e=>typeof e=="number",ou=e=>Array.isArray(e)&&!Wo(e[0]),UL=(e,t,r)=>{const n=t-e;return((r-e)%n+n)%n+e};function IO(e,t){return ou(e)?e[UL(0,e.length,t)]:e}const eb=(e,t,r)=>-r*e+r*t+e,tb=()=>{},Do=e=>e,If=(e,t,r)=>t-e===0?1:(r-e)/(t-e);function rb(e,t){const r=e[e.length-1];for(let n=1;n<=t;n++){const o=If(0,t,n);e.push(eb(r,1,o))}}function nb(e){const t=[0];return rb(t,e-1),t}function DO(e,t=nb(e.length),r=Do){const n=e.length,o=n-t.length;return o>0&&rb(t,o),a=>{let i=0;for(;iArray.isArray(e)&&Wo(e[0]),Ud=e=>typeof e=="object"&&!!e.createAnimation,WL=e=>typeof e=="function",ob=e=>typeof e=="string",ei={ms:e=>e*1e3,s:e=>e/1e3};function FO(e,t){return t?e*(1e3/t):0}const $L=["","X","Y","Z"],HL=["translate","scale","rotate","skew"],ms={x:"translateX",y:"translateY",z:"translateZ"},Qx={syntax:"",initialValue:"0deg",toDefaultUnit:e=>e+"deg"},qL={translate:{syntax:"",initialValue:"0px",toDefaultUnit:e=>e+"px"},rotate:Qx,scale:{syntax:"",initialValue:1,toDefaultUnit:Do},skew:Qx},bs=new Map,Df=e=>`--motion-${e}`,Wd=["x","y","z"];HL.forEach(e=>{$L.forEach(t=>{Wd.push(e+t),bs.set(Df(e+t),qL[e])})});const GL=(e,t)=>Wd.indexOf(e)-Wd.indexOf(t),KL=new Set(Wd),Lf=e=>KL.has(e),YL=(e,t)=>{ms[t]&&(t=ms[t]);const{transforms:r}=Jm(e);AO(r,t),e.style.transform=zO(r)},zO=e=>e.sort(GL).reduce(QL,"").trim(),QL=(e,t)=>`${e} ${t}(var(${Df(t)}))`,eg=e=>e.startsWith("--"),Xx=new Set;function XL(e){if(!Xx.has(e)){Xx.add(e);try{const{syntax:t,initialValue:r}=bs.has(e)?bs.get(e):{};CSS.registerProperty({name:e,inherits:!1,syntax:t,initialValue:r})}catch{}}}const BO=(e,t,r)=>(((1-3*r+3*t)*e+(3*r-6*t))*e+3*t)*e,ZL=1e-7,JL=12;function e3(e,t,r,n,o){let a,i,c=0;do i=t+(r-t)/2,a=BO(i,n,o)-e,a>0?r=i:t=i;while(Math.abs(a)>ZL&&++ce3(a,0,1,e,r);return a=>a===0||a===1?a:BO(o(a),t,n)}const t3=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);const n=r*e,o=t==="end"?Math.floor(n):Math.ceil(n);return MO(0,1,o/e)},r3={ease:vl(.25,.1,.25,1),"ease-in":vl(.42,0,1,1),"ease-in-out":vl(.42,0,.58,1),"ease-out":vl(0,0,.58,1)},n3=/\((.*?)\)/;function tg(e){if(WL(e))return e;if(LO(e))return vl(...e);const t=r3[e];if(t)return t;if(e.startsWith("steps")){const r=n3.exec(e);if(r){const n=r[1].split(",");return t3(parseFloat(n[0]),n[1].trim())}}return Do}class o3{constructor(t,r=[0,1],{easing:n,duration:o=Gr.duration,delay:a=Gr.delay,endDelay:i=Gr.endDelay,repeat:c=Gr.repeat,offset:f,direction:g="normal",autoplay:b=!0}={}){if(this.startTime=null,this.rate=1,this.t=0,this.cancelTimestamp=null,this.easing=Do,this.duration=0,this.totalDuration=0,this.repeat=0,this.playState="idle",this.finished=new Promise((O,T)=>{this.resolve=O,this.reject=T}),n=n||Gr.easing,Ud(n)){const O=n.createAnimation(r);n=O.easing,r=O.keyframes||r,o=O.duration||o}this.repeat=c,this.easing=ou(n)?Do:tg(n),this.updateDuration(o);const S=DO(r,f,ou(n)?n.map(tg):Do);this.tick=O=>{var T;a=a;let C=0;this.pauseTime!==void 0?C=this.pauseTime:C=(O-this.startTime)*this.rate,this.t=C,C/=1e3,C=Math.max(C-a,0),this.playState==="finished"&&this.pauseTime===void 0&&(C=this.totalDuration);const x=C/this.duration;let m=Math.floor(x),d=x%1;!d&&x>=1&&(d=1),d===1&&m--;const s=m%2;(g==="reverse"||g==="alternate"&&s||g==="alternate-reverse"&&!s)&&(d=1-d);const u=C>=this.totalDuration?1:Math.min(d,1),l=S(this.easing(u));t(l),this.pauseTime===void 0&&(this.playState==="finished"||C>=this.totalDuration+i)?(this.playState="finished",(T=this.resolve)===null||T===void 0||T.call(this,l)):this.playState!=="idle"&&(this.frameRequestId=requestAnimationFrame(this.tick))},b&&this.play()}play(){const t=performance.now();this.playState="running",this.pauseTime!==void 0?this.startTime=t-this.pauseTime:this.startTime||(this.startTime=t),this.cancelTimestamp=this.startTime,this.pauseTime=void 0,this.frameRequestId=requestAnimationFrame(this.tick)}pause(){this.playState="paused",this.pauseTime=this.t}finish(){this.playState="finished",this.tick(0)}stop(){var t;this.playState="idle",this.frameRequestId!==void 0&&cancelAnimationFrame(this.frameRequestId),(t=this.reject)===null||t===void 0||t.call(this,!1)}cancel(){this.stop(),this.tick(this.cancelTimestamp)}reverse(){this.rate*=-1}commitStyles(){}updateDuration(t){this.duration=t,this.totalDuration=t*(this.repeat+1)}get currentTime(){return this.t}set currentTime(t){this.pauseTime!==void 0||this.rate===0?this.pauseTime=t:this.startTime=performance.now()-t/this.rate}get playbackRate(){return this.rate}set playbackRate(t){this.rate=t}}const Zx=e=>LO(e)?a3(e):e,a3=([e,t,r,n])=>`cubic-bezier(${e}, ${t}, ${r}, ${n})`,Jx=e=>document.createElement("div").animate(e,{duration:.001}),ew={cssRegisterProperty:()=>typeof CSS<"u"&&Object.hasOwnProperty.call(CSS,"registerProperty"),waapi:()=>Object.hasOwnProperty.call(Element.prototype,"animate"),partialKeyframes:()=>{try{Jx({opacity:[1]})}catch{return!1}return!0},finished:()=>!!Jx({opacity:[0,1]}).finished},mh={},qc={};for(const e in ew)qc[e]=()=>(mh[e]===void 0&&(mh[e]=ew[e]()),mh[e]);function i3(e,t){for(let r=0;rArray.isArray(e)?e:[e];function $d(e){return ms[e]&&(e=ms[e]),Lf(e)?Df(e):e}const Ki={get:(e,t)=>{t=$d(t);let r=eg(t)?e.style.getPropertyValue(t):getComputedStyle(e)[t];if(!r&&r!==0){const n=bs.get(t);n&&(r=n.initialValue)}return r},set:(e,t,r)=>{t=$d(t),eg(t)?e.style.setProperty(t,r):e.style[t]=r}};function UO(e,t=!0){if(!(!e||e.playState==="finished"))try{e.stop?e.stop():(t&&e.commitStyles(),e.cancel())}catch{}}function s3(){return window.__MOTION_DEV_TOOLS_RECORD}function Ff(e,t,r,n={}){const o=s3(),a=n.record!==!1&&o;let i,{duration:c=Gr.duration,delay:f=Gr.delay,endDelay:g=Gr.endDelay,repeat:b=Gr.repeat,easing:S=Gr.easing,direction:O,offset:T,allowWebkitAcceleration:C=!1}=n;const x=Jm(e);let m=qc.waapi();const d=Lf(t);d&&YL(e,t);const s=$d(t),u=VL(x.values,s),l=bs.get(s);return UO(u.animation,!(Ud(S)&&u.generator)&&n.record!==!1),()=>{const h=()=>{var w,j;return(j=(w=Ki.get(e,s))!==null&&w!==void 0?w:l==null?void 0:l.initialValue)!==null&&j!==void 0?j:0};let v=i3(VO(r),h);if(Ud(S)){const w=S.createAnimation(v,h,d,s,u);S=w.easing,w.keyframes!==void 0&&(v=w.keyframes),w.duration!==void 0&&(c=w.duration)}if(eg(s)&&(qc.cssRegisterProperty()?XL(s):m=!1),m){l&&(v=v.map(N=>Wo(N)?l.toDefaultUnit(N):N)),v.length===1&&(!qc.partialKeyframes()||a)&&v.unshift(h());const w={delay:ei.ms(f),duration:ei.ms(c),endDelay:ei.ms(g),easing:ou(S)?void 0:Zx(S),direction:O,iterations:b+1,fill:"both"};i=e.animate({[s]:v,offset:T,easing:ou(S)?S.map(Zx):void 0},w),i.finished||(i.finished=new Promise((N,k)=>{i.onfinish=N,i.oncancel=k}));const j=v[v.length-1];i.finished.then(()=>{Ki.set(e,s,j),i.cancel()}).catch(tb),C||(i.playbackRate=1.000001)}else if(d){v=v.map(j=>typeof j=="string"?parseFloat(j):j),v.length===1&&v.unshift(parseFloat(h()));const w=j=>{l&&(j=l.toDefaultUnit(j)),Ki.set(e,s,j)};i=new o3(w,v,Object.assign(Object.assign({},n),{duration:c,easing:S}))}else{const w=v[v.length-1];Ki.set(e,s,l&&Wo(w)?l.toDefaultUnit(w):w)}return a&&o(e,t,v,{duration:c,delay:f,easing:S,repeat:b,offset:T},"motion-one"),u.setAnimation(i),i}}const ab=(e,t)=>e[t]?Object.assign(Object.assign({},e),e[t]):Object.assign({},e);function zf(e,t){var r;return typeof e=="string"?t?((r=t[e])!==null&&r!==void 0||(t[e]=document.querySelectorAll(e)),e=t[e]):e=document.querySelectorAll(e):e instanceof Element&&(e=[e]),Array.from(e||[])}const l3=e=>e(),ib=(e,t,r=Gr.duration)=>new Proxy({animations:e.map(l3).filter(Boolean),duration:r,options:t},c3),u3=e=>e.animations[0],c3={get:(e,t)=>{const r=u3(e);switch(t){case"duration":return e.duration;case"currentTime":return ei.s((r==null?void 0:r[t])||0);case"playbackRate":case"playState":return r==null?void 0:r[t];case"finished":return e.finished||(e.finished=Promise.all(e.animations.map(d3)).catch(tb)),e.finished;case"stop":return()=>{e.animations.forEach(n=>UO(n))};case"forEachNative":return n=>{e.animations.forEach(o=>n(o,e))};default:return typeof(r==null?void 0:r[t])>"u"?void 0:()=>e.animations.forEach(n=>n[t]())}},set:(e,t,r)=>{switch(t){case"currentTime":r=ei.ms(r);case"currentTime":case"playbackRate":for(let n=0;ne.finished;function f3(e=.1,{start:t=0,from:r=0,easing:n}={}){return(o,a)=>{const i=Wo(r)?r:p3(r,a),c=Math.abs(i-o);let f=e*c;if(n){const g=a*e;f=tg(n)(f/g)*g}return t+f}}function p3(e,t){if(e==="first")return 0;{const r=t-1;return e==="last"?r:r/2}}function WO(e,t,r){return typeof e=="function"?e(t,r):e}function h3(e,t,r={}){e=zf(e);const n=e.length,o=[];for(let a=0;at&&o.atFf(...a)).filter(Boolean);return ib(o,t,(r=n[0])===null||r===void 0?void 0:r[3].duration)}function y3(e,t={}){var{defaultOptions:r={}}=t,n=Es(t,["defaultOptions"]);const o=[],a=new Map,i={},c=new Map;let f=0,g=0,b=0;for(let S=0;S"0",Y);A=q.easing,q.keyframes!==void 0&&(j=q.keyframes),q.duration!==void 0&&(k=q.duration)}const M=WO(x.delay,u,s)||0,D=g+M,L=D+k;let{offset:B=nb(j.length)}=N;B.length===1&&B[0]===0&&(B[1]=1);const U=length-j.length;U>0&&rb(B,U),j.length===1&&j.unshift(null),m3(w,j,A,B,D,L),m=Math.max(M+k,m),b=Math.max(L,b)}}f=g,g+=m}return a.forEach((S,O)=>{for(const T in S){const C=S[T];C.sort(b3);const x=[],m=[],d=[];for(let s=0;st/(2*Math.sqrt(e*r));function C3(e,t,r){return e=t||e>t&&r<=t}const $O=({stiffness:e=ns.stiffness,damping:t=ns.damping,mass:r=ns.mass,from:n=0,to:o=1,velocity:a=0,restSpeed:i,restDistance:c}={})=>{a=a?ei.s(a):0;const f={done:!1,hasReachedTarget:!1,current:n,target:o},g=o-n,b=Math.sqrt(e/r)/1e3,S=S3(e,t,r),O=Math.abs(g)<5;i||(i=O?.01:2),c||(c=O?.005:.5);let T;if(S<1){const C=b*Math.sqrt(1-S*S);T=x=>o-Math.exp(-S*b*x)*((-a+S*b*g)/C*Math.sin(C*x)+g*Math.cos(C*x))}else T=C=>o-Math.exp(-b*C)*(g+(-a+b*g)*C);return C=>{f.current=T(C);const x=C===0?a:sb(T,C,f.current),m=Math.abs(x)<=i,d=Math.abs(o-f.current)<=c;return f.done=m&&d,f.hasReachedTarget=C3(n,o,f.current),f}},T3=({from:e=0,velocity:t=0,power:r=.8,decay:n=.325,bounceDamping:o,bounceStiffness:a,changeTarget:i,min:c,max:f,restDistance:g=.5,restSpeed:b})=>{n=ei.ms(n);const S={hasReachedTarget:!1,done:!1,current:e,target:e},O=w=>c!==void 0&&wf,T=w=>c===void 0?f:f===void 0||Math.abs(c-w)-C*Math.exp(-w/n),s=w=>m+d(w),u=w=>{const j=d(w),N=s(w);S.done=Math.abs(j)<=g,S.current=S.done?m:N};let l,h;const v=w=>{O(S.current)&&(l=w,h=$O({from:S.current,to:T(S.current),velocity:sb(s,w,S.current),damping:o,stiffness:a,restDistance:g,restSpeed:b}))};return v(0),w=>{let j=!1;return!h&&l===void 0&&(j=!0,u(w),v(w)),l!==void 0&&w>l?(S.hasReachedTarget=!0,h(w-l)):(S.hasReachedTarget=!1,!j&&u(w),S)}},bh=10,O3=1e4;function P3(e,t=Do){let r,n=bh,o=e(0);const a=[t(o.current)];for(;!o.done&&n{const n=new Map,o=(i=0,c=100,f=0,g=!1)=>{const b=`${i}-${c}-${f}-${g}`;return n.has(b)||n.set(b,e(Object.assign({from:i,to:c,velocity:f,restSpeed:g?.05:2,restDistance:g?.01:.5},r))),n.get(b)},a=i=>(t.has(i)||t.set(i,P3(i)),t.get(i));return{createAnimation:(i,c,f,g,b)=>{var S,O;let T;const C=i.length;if(f&&C<=2&&i.every(k3)){const m=i[C-1],d=C===1?null:i[0];let s=0,u=0;const l=b==null?void 0:b.generator;if(l){const{animation:w,generatorStartTime:j}=b,N=(w==null?void 0:w.startTime)||j||0,k=(w==null?void 0:w.currentTime)||performance.now()-N,A=l(k).current;u=(S=d)!==null&&S!==void 0?S:A,(C===1||C===2&&i[0]===null)&&(s=sb(M=>l(M).current,k,A))}else u=(O=d)!==null&&O!==void 0?O:parseFloat(c());const h=o(u,m,s,g==null?void 0:g.includes("scale")),v=a(h);T=Object.assign(Object.assign({},v),{easing:"linear"}),b&&(b.generator=h,b.generatorStartTime=performance.now())}else T={easing:"ease",duration:a(o(0,100)).overshootDuration};return T}}}}const k3=e=>typeof e!="string",N3=HO($O),E3=HO(T3),j3={any:0,all:1};function qO(e,t,{root:r,margin:n,amount:o="any"}={}){if(typeof IntersectionObserver>"u")return()=>{};const a=zf(e),i=new WeakMap,c=g=>{g.forEach(b=>{const S=i.get(b.target);if(b.isIntersecting!==!!S)if(b.isIntersecting){const O=t(b);typeof O=="function"?i.set(b.target,O):f.unobserve(b.target)}else S&&(S(b),i.delete(b.target))})},f=new IntersectionObserver(c,{root:r,rootMargin:n,threshold:typeof o=="number"?o:j3[o]});return a.forEach(g=>f.observe(g)),()=>f.disconnect()}const Gc=new WeakMap;let na;function A3(e,t){if(t){const{inlineSize:r,blockSize:n}=t[0];return{width:r,height:n}}else return e instanceof SVGElement&&"getBBox"in e?e.getBBox():{width:e.offsetWidth,height:e.offsetHeight}}function R3({target:e,contentRect:t,borderBoxSize:r}){var n;(n=Gc.get(e))===null||n===void 0||n.forEach(o=>{o({target:e,contentSize:t,get size(){return A3(e,r)}})})}function M3(e){e.forEach(R3)}function I3(){typeof ResizeObserver>"u"||(na=new ResizeObserver(M3))}function D3(e,t){na||I3();const r=zf(e);return r.forEach(n=>{let o=Gc.get(n);o||(o=new Set,Gc.set(n,o)),o.add(t),na==null||na.observe(n)}),()=>{r.forEach(n=>{const o=Gc.get(n);o==null||o.delete(t),o!=null&&o.size||na==null||na.unobserve(n)})}}const Kc=new Set;let jl;function L3(){jl=()=>{const e={width:window.innerWidth,height:window.innerHeight},t={target:window,size:e,contentSize:e};Kc.forEach(r=>r(t))},window.addEventListener("resize",jl)}function F3(e){return Kc.add(e),jl||L3(),()=>{Kc.delete(e),!Kc.size&&jl&&(jl=void 0)}}function GO(e,t){return typeof e=="function"?F3(e):D3(e,t)}const z3=50,rw=()=>({current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}),B3=()=>({time:0,x:rw(),y:rw()}),V3={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function nw(e,t,r,n){const o=r[t],{length:a,position:i}=V3[t],c=o.current,f=r.time;o.current=e["scroll"+i],o.scrollLength=e["scroll"+a]-e["client"+a],o.offset.length=0,o.offset[0]=0,o.offset[1]=o.scrollLength,o.progress=If(0,o.scrollLength,o.current);const g=n-f;o.velocity=g>z3?0:FO(o.current-c,g)}function U3(e,t,r){nw(e,"x",t,r),nw(e,"y",t,r),t.time=r}function W3(e,t){let r={x:0,y:0},n=e;for(;n&&n!==t;)if(n instanceof HTMLElement)r.x+=n.offsetLeft,r.y+=n.offsetTop,n=n.offsetParent;else if(n instanceof SVGGraphicsElement&&"getBBox"in n){const{top:o,left:a}=n.getBBox();for(r.x+=a,r.y+=o;n&&n.tagName!=="svg";)n=n.parentNode}return r}const KO={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},rg={start:0,center:.5,end:1};function ow(e,t,r=0){let n=0;if(rg[e]!==void 0&&(e=rg[e]),ob(e)){const o=parseFloat(e);e.endsWith("px")?n=o:e.endsWith("%")?e=o/100:e.endsWith("vw")?n=o/100*document.documentElement.clientWidth:e.endsWith("vh")?n=o/100*document.documentElement.clientHeight:e=o}return Wo(e)&&(n=t*e),r+n}const $3=[0,0];function H3(e,t,r,n){let o=Array.isArray(e)?e:$3,a=0,i=0;return Wo(e)?o=[e,e]:ob(e)&&(e=e.trim(),e.includes(" ")?o=e.split(" "):o=[e,rg[e]?e:"0"]),a=ow(o[0],r,n),i=ow(o[1],t),a-i}const q3={x:0,y:0};function G3(e,t,r){let{offset:n=KO.All}=r;const{target:o=e,axis:a="y"}=r,i=a==="y"?"height":"width",c=o!==e?W3(o,e):q3,f=o===e?{width:e.scrollWidth,height:e.scrollHeight}:{width:o.clientWidth,height:o.clientHeight},g={width:e.clientWidth,height:e.clientHeight};t[a].offset.length=0;let b=!t[a].interpolate;const S=n.length;for(let O=0;OK3(e,n.target,r),update:a=>{U3(e,r,a),(n.offset||n.target)&&G3(e,r,n)},notify:typeof t=="function"?()=>t(r):Q3(t,r[o])}}function Q3(e,t){return e.pause(),e.forEachNative((r,{easing:n})=>{var o,a;if(r.updateDuration)n||(r.easing=Do),r.updateDuration(1);else{const i={duration:1e3};n||(i.easing="linear"),(a=(o=r.effect)===null||o===void 0?void 0:o.updateTiming)===null||a===void 0||a.call(o,i)}}),()=>{e.currentTime=t.progress}}const ll=new WeakMap,aw=new WeakMap,vh=new WeakMap,iw=e=>e===document.documentElement?window:e;function X3(e,t={}){var{container:r=document.documentElement}=t,n=Es(t,["container"]);let o=vh.get(r);o||(o=new Set,vh.set(r,o));const a=B3(),i=Y3(r,e,a,n);if(o.add(i),!ll.has(r)){const g=()=>{const S=performance.now();for(const O of o)O.measure();for(const O of o)O.update(S);for(const O of o)O.notify()};ll.set(r,g);const b=iw(r);window.addEventListener("resize",g,{passive:!0}),r!==document.documentElement&&aw.set(r,GO(r,g)),b.addEventListener("scroll",g,{passive:!0})}const c=ll.get(r),f=requestAnimationFrame(c);return()=>{var g;typeof e!="function"&&e.stop(),cancelAnimationFrame(f);const b=vh.get(r);if(!b||(b.delete(i),b.size))return;const S=ll.get(r);ll.delete(r),S&&(iw(r).removeEventListener("scroll",S),(g=aw.get(r))===null||g===void 0||g(),window.removeEventListener("resize",S))}}function Z3(e,t){return typeof e!=typeof t?!0:Array.isArray(e)&&Array.isArray(t)?!J3(e,t):e!==t}function J3(e,t){const r=t.length;if(r!==e.length)return!1;for(let n=0;ne.getDepth()-t.getDepth(),oF=e=>e.animateUpdates(),lw=e=>e.next(),uw=(e,t)=>new CustomEvent(e,{detail:{target:t}});function ng(e,t,r){e.dispatchEvent(new CustomEvent(t,{detail:{originalEvent:r}}))}function cw(e,t,r){e.dispatchEvent(new CustomEvent(t,{detail:{originalEntry:r}}))}const aF={isActive:e=>!!e.inView,subscribe:(e,{enable:t,disable:r},{inViewOptions:n={}})=>{const{once:o}=n,a=Es(n,["once"]);return qO(e,i=>{if(t(),cw(e,"viewenter",i),!o)return c=>{r(),cw(e,"viewleave",c)}},a)}},dw=(e,t,r)=>n=>{n.pointerType&&n.pointerType!=="mouse"||(r(),ng(e,t,n))},iF={isActive:e=>!!e.hover,subscribe:(e,{enable:t,disable:r})=>{const n=dw(e,"hoverstart",t),o=dw(e,"hoverend",r);return e.addEventListener("pointerenter",n),e.addEventListener("pointerleave",o),()=>{e.removeEventListener("pointerenter",n),e.removeEventListener("pointerleave",o)}}},sF={isActive:e=>!!e.press,subscribe:(e,{enable:t,disable:r})=>{const n=a=>{r(),ng(e,"pressend",a),window.removeEventListener("pointerup",n)},o=a=>{t(),ng(e,"pressstart",a),window.addEventListener("pointerup",n)};return e.addEventListener("pointerdown",o),()=>{e.removeEventListener("pointerdown",o),window.removeEventListener("pointerup",n)}}},Yc={inView:aF,hover:iF,press:sF},fw=["initial","animate",...Object.keys(Yc),"exit"],og=new WeakMap;function lF(e={},t){let r,n=t?t.getDepth()+1:0;const o={initial:!0,animate:!0},a={},i={};for(const x of fw)i[x]=typeof e[x]=="string"?e[x]:t==null?void 0:t.getContext()[x];const c=e.initial===!1?"animate":"initial";let f=sw(e[c]||i[c],e.variants)||{},g=Es(f,["transition"]);const b=Object.assign({},g);function*S(){var x,m;const d=g;g={};const s={};for(const w of fw){if(!o[w])continue;const j=sw(e[w]);if(j)for(const N in j)N!=="transition"&&(g[N]=j[N],s[N]=ab((m=(x=j.transition)!==null&&x!==void 0?x:e.transition)!==null&&m!==void 0?m:{},N))}const u=new Set([...Object.keys(g),...Object.keys(d)]),l=[];u.forEach(w=>{var j;g[w]===void 0&&(g[w]=b[w]),Z3(d[w],g[w])&&((j=b[w])!==null&&j!==void 0||(b[w]=Ki.get(r,w)),l.push(Ff(r,w,g[w],s[w])))}),yield;const h=l.map(w=>w()).filter(Boolean);if(!h.length)return;const v=g;r.dispatchEvent(uw("motionstart",v)),Promise.all(h.map(w=>w.finished)).then(()=>{r.dispatchEvent(uw("motioncomplete",v))}).catch(tb)}const O=(x,m)=>()=>{o[x]=m,yh(C)},T=()=>{for(const x in Yc){const m=Yc[x].isActive(e),d=a[x];m&&!d?a[x]=Yc[x].subscribe(r,{enable:O(x,!0),disable:O(x,!1)},e):!m&&d&&(d(),delete a[x])}},C={update:x=>{r&&(e=x,T(),yh(C))},setActive:(x,m)=>{r&&(o[x]=m,yh(C))},animateUpdates:S,getDepth:()=>n,getTarget:()=>g,getOptions:()=>e,getContext:()=>i,mount:x=>(r=x,og.set(r,C),T(),()=>{og.delete(r),rF(C);for(const m in a)a[m]()}),isMounted:()=>!!r};return C}function YO(e){const t={},r=[];for(let n in e){const o=e[n];Lf(n)&&(ms[n]&&(n=ms[n]),r.push(n),n=Df(n));let a=Array.isArray(o)?o[0]:o;const i=bs.get(n);i&&(a=Wo(o)?i.toDefaultUnit(o):o),t[n]=a}return r.length&&(t.transform=zO(r)),t}const uF=e=>`-${e.toLowerCase()}`,cF=e=>e.replace(/[A-Z]/g,uF);function dF(e={}){const t=YO(e);let r="";for(const n in t)r+=n.startsWith("--")?n:cF(n),r+=`: ${t[n]}; `;return r}const fF=Object.freeze(Object.defineProperty({__proto__:null,ScrollOffset:KO,animate:h3,animateStyle:Ff,createMotionState:lF,createStyleString:dF,createStyles:YO,getAnimationData:Jm,getStyleName:$d,glide:E3,inView:qO,mountedStates:og,resize:GO,scroll:X3,spring:N3,stagger:f3,style:Ki,timeline:v3,withControls:ib},Symbol.toStringTag,{value:"Module"})),pF=lu(fF);function hF(e){var t={};return function(r){return t[r]===void 0&&(t[r]=e(r)),t[r]}}var gF=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,mF=hF(function(e){return gF.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91});const bF=Object.freeze(Object.defineProperty({__proto__:null,default:mF},Symbol.toStringTag,{value:"Module"})),vF=lu(bF);(function(e){Object.defineProperty(e,"__esModule",{value:!0});var t=QT,r=P,n=ZT,o=fr,a=st,i=bi,c=pF;function f(p){return p&&typeof p=="object"&&"default"in p?p:{default:p}}function g(p){if(p&&p.__esModule)return p;var _=Object.create(null);return p&&Object.keys(p).forEach(function(E){if(E!=="default"){var R=Object.getOwnPropertyDescriptor(p,E);Object.defineProperty(_,E,R.get?R:{enumerable:!0,get:function(){return p[E]}})}}),_.default=p,Object.freeze(_)}var b=g(r),S=f(r),O=f(i),T="production",C=typeof process>"u"||process.env===void 0?T:"production",x=function(p){return{isEnabled:function(_){return p.some(function(E){return!!_[E]})}}},m={measureLayout:x(["layout","layoutId","drag"]),animation:x(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:x(["exit"]),drag:x(["drag","dragControls"]),focus:x(["whileFocus"]),hover:x(["whileHover","onHoverStart","onHoverEnd"]),tap:x(["whileTap","onTap","onTapStart","onTapCancel"]),pan:x(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:x(["whileInView","onViewportEnter","onViewportLeave"])};function d(p){for(var _ in p)p[_]!==null&&(_==="projectionNodeConstructor"?m.projectionNodeConstructor=p[_]:m[_].Component=p[_])}var s=r.createContext({strict:!1}),u=Object.keys(m),l=u.length;function h(p,_,E){var R=[],I=r.useContext(s);if(!_)return null;C!=="production"&&E&&I.strict&&n.invariant(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var V=0;V"u")return _;var E=new Map;return new Proxy(_,{get:function(R,I){return E.has(I)||E.set(I,_(I)),E.get(I)}})}var Xe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function ht(p){return typeof p!="string"||p.includes("-")?!1:!!(Xe.indexOf(p)>-1||/[A-Z]/.test(p))}var Ve={};function ot(p){Object.assign(Ve,p)}var _t=["","X","Y","Z"],Ne=["translate","scale","rotate","skew"],at=["transformPerspective","x","y","z"];Ne.forEach(function(p){return _t.forEach(function(_){return at.push(p+_)})});function Te(p,_){return at.indexOf(p)-at.indexOf(_)}var ae=new Set(at);function ge(p){return ae.has(p)}var oe=new Set(["originX","originY","originZ"]);function ve(p){return oe.has(p)}function se(p,_){var E=_.layout,R=_.layoutId;return ge(p)||ve(p)||(E||R!==void 0)&&(!!Ve[p]||p==="opacity")}var ie=function(p){return!!(p!==null&&typeof p=="object"&&p.getVelocity)},he={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function Oe(p,_,E,R){var I=p.transform,V=p.transformKeys,W=_.enableHardwareAcceleration,F=W===void 0?!0:W,G=_.allowTransformNone,Q=G===void 0?!0:G,Z="";V.sort(Te);for(var re=!1,ne=V.length,le=0;le"u"?Bu:sp;Q(G,F.current,_,W)}var ip={some:0,all:1};function sp(p,_,E,R){var I=R.root,V=R.margin,W=R.amount,F=W===void 0?"some":W,G=R.once;r.useEffect(function(){if(p){var Q={root:I==null?void 0:I.current,rootMargin:V,threshold:typeof F=="number"?F:ip[F]},Z=function(re){var ne,le=re.isIntersecting;if(_.isInView!==le&&(_.isInView=le,!(G&&!le&&_.hasEnteredView))){le&&(_.hasEnteredView=!0),(ne=E.animationState)===null||ne===void 0||ne.setActive(e.AnimationType.InView,le);var ue=E.getProps(),we=le?ue.onViewportEnter:ue.onViewportLeave;we==null||we(re)}};return op(E.getInstance(),Q,Z)}},[p,I,V,F])}function Bu(p,_,E,R){var I=R.fallback,V=I===void 0?!0:I;r.useEffect(function(){!p||!V||(C!=="production"&&Ln(!1,"IntersectionObserver not available on this device. whileInView animations will trigger on mount."),requestAnimationFrame(function(){var W;_.hasEnteredView=!0;var F=E.getProps().onViewportEnter;F==null||F(null),(W=E.animationState)===null||W===void 0||W.setActive(e.AnimationType.InView,!0)}))},[p])}var lo=function(p){return function(_){return p(_),null}},Ws={inView:lo(ap),tap:lo(rp),focus:lo(Nt),hover:lo(tp)},Vu=0,Uu=function(){return Vu++},$s=function(){return ye(Uu)};function xe(){var p=r.useContext(N);if(p===null)return[!0,null];var _=p.isPresent,E=p.onExitComplete,R=p.register,I=$s();r.useEffect(function(){return R(I)},[]);var V=function(){return E==null?void 0:E(I)};return!_&&E?[!1,V]:[!0]}function Le(){return ze(r.useContext(N))}function ze(p){return p===null?!0:p.isPresent}function We(p,_){if(!Array.isArray(_))return!1;var E=_.length;if(E!==p.length)return!1;for(var R=0;R-1&&p.splice(E,1)}function _N(p,_,E){var R=t.__read(p),I=R.slice(0),V=_<0?I.length+_:_;if(V>=0&&Vtt&&vn,Zo=Array.isArray(Yt)?Yt:[Yt],yn=Zo.reduce(V,{});Dr===!1&&(yn={});var Xs=Tt.prevResolvedValues,Ei=Xs===void 0?{}:Xs,Xu=t.__assign(t.__assign({},Ei),yn),ji=function(ut){Xo=!0,De.delete(ut),Tt.needsAnimating[ut]=!0};for(var $r in Xu){var At=yn[$r],Ye=Ei[$r];$e.hasOwnProperty($r)||(At!==Ye?Ct(At)&&Ct(Ye)?!We(At,Ye)||Qo?ji($r):Tt.protectedKeys[$r]=!0:At!==void 0?ji($r):De.add($r):At!==void 0&&De.has($r)?ji($r):Tt.protectedKeys[$r]=!0)}Tt.prevProp=Yt,Tt.prevResolvedValues=yn,Tt.isActive&&($e=t.__assign(t.__assign({},$e),yn)),I&&p.blockInitialAnimation&&(Xo=!1),Xo&&!nn&&we.push.apply(we,t.__spreadArray([],t.__read(Zo.map(function(ut){return{animation:ut,options:t.__assign({type:vt},Z)}})),!1))},gt=0;gt=3;if(!(!le&&!ue)){var we=ne.point,De=i.getFrameData().timestamp;I.history.push(t.__assign(t.__assign({},we),{timestamp:De}));var $e=I.handlers,tt=$e.onStart,pt=$e.onMove;le||(tt&&tt(I.lastMoveEvent,ne),I.startEvent=I.lastMoveEvent),pt&&pt(I.lastMoveEvent,ne)}}},this.handlePointerMove=function(ne,le){if(I.lastMoveEvent=ne,I.lastMoveEventInfo=wp(le,I.transformPagePoint),zt(ne)&&ne.buttons===0){I.handlePointerUp(ne,le);return}O.default.update(I.updatePoint,!0)},this.handlePointerUp=function(ne,le){I.end();var ue=I.handlers,we=ue.onEnd,De=ue.onSessionEnd,$e=_p(wp(le,I.transformPagePoint),I.history);I.startEvent&&we&&we(ne,$e),De&&De(ne,$e)},!(Or(_)&&_.touches.length>1)){this.handlers=E,this.transformPagePoint=W;var F=Dn(_),G=wp(F,this.transformPagePoint),Q=G.point,Z=i.getFrameData().timestamp;this.history=[t.__assign(t.__assign({},Q),{timestamp:Z})];var re=E.onSessionStart;re&&re(_,_p(G,this.history)),this.removeListeners=a.pipe(Po(window,"pointermove",this.handlePointerMove),Po(window,"pointerup",this.handlePointerUp),Po(window,"pointercancel",this.handlePointerUp))}}return p.prototype.updateHandlers=function(_){this.handlers=_},p.prototype.end=function(){this.removeListeners&&this.removeListeners(),i.cancelSync.update(this.updatePoint)},p}();function wp(p,_){return _?{point:_(p.point)}:p}function $b(p,_){return{x:p.x-_.x,y:p.y-_.y}}function _p(p,_){var E=p.point;return{point:E,delta:$b(E,Hb(_)),offset:$b(E,BN(_)),velocity:VN(_,.1)}}function BN(p){return p[0]}function Hb(p){return p[p.length-1]}function VN(p,_){if(p.length<2)return{x:0,y:0};for(var E=p.length-1,R=null,I=Hb(p);E>=0&&(R=p[E],!(I.timestamp-R.timestamp>it(_)));)E--;if(!R)return{x:0,y:0};var V=(I.timestamp-R.timestamp)/1e3;if(V===0)return{x:0,y:0};var W={x:(I.x-R.x)/V,y:(I.y-R.y)/V};return W.x===1/0&&(W.x=0),W.y===1/0&&(W.y=0),W}function uo(p){return p.max-p.min}function qb(p,_,E){return _===void 0&&(_=0),E===void 0&&(E=.01),a.distance(p,_)I&&(p=E?a.mix(I,p,E.max):Math.min(p,I)),p}function Qb(p,_,E){return{min:_!==void 0?p.min+_:void 0,max:E!==void 0?p.max+E-(p.max-p.min):void 0}}function $N(p,_){var E=_.top,R=_.left,I=_.bottom,V=_.right;return{x:Qb(p.x,R,V),y:Qb(p.y,E,I)}}function Xb(p,_){var E,R=_.min-p.min,I=_.max-p.max;return _.max-_.minR?E=a.progress(_.min,_.max-R,p.min):R>I&&(E=a.progress(p.min,p.max-I,_.min)),a.clamp(0,1,E)}function GN(p,_){var E={};return _.min!==void 0&&(E.min=_.min-p.min),_.max!==void 0&&(E.max=_.max-p.min),E}var Sp=.35;function KN(p){return p===void 0&&(p=Sp),p===!1?p=0:p===!0&&(p=Sp),{x:Zb(p,"left","right"),y:Zb(p,"top","bottom")}}function Zb(p,_,E){return{min:Jb(p,_),max:Jb(p,E)}}function Jb(p,_){var E;return typeof p=="number"?p:(E=p[_])!==null&&E!==void 0?E:0}var ev=function(){return{translate:0,scale:1,origin:0,originPoint:0}},Ys=function(){return{x:ev(),y:ev()}},tv=function(){return{min:0,max:0}},mr=function(){return{x:tv(),y:tv()}};function co(p){return[p("x"),p("y")]}function rv(p){var _=p.top,E=p.left,R=p.right,I=p.bottom;return{x:{min:E,max:R},y:{min:_,max:I}}}function YN(p){var _=p.x,E=p.y;return{top:E.min,right:_.max,bottom:E.max,left:_.min}}function QN(p,_){if(!_)return p;var E=_({x:p.left,y:p.top}),R=_({x:p.right,y:p.bottom});return{top:E.y,left:E.x,bottom:R.y,right:R.x}}function Cp(p){return p===void 0||p===1}function nv(p){var _=p.scale,E=p.scaleX,R=p.scaleY;return!Cp(_)||!Cp(E)||!Cp(R)}function Go(p){return nv(p)||ov(p.x)||ov(p.y)||p.z||p.rotate||p.rotateX||p.rotateY}function ov(p){return p&&p!=="0%"}function $u(p,_,E){var R=p-E,I=_*R;return E+I}function av(p,_,E,R,I){return I!==void 0&&(p=$u(p,I,R)),$u(p,E,R)+_}function Tp(p,_,E,R,I){_===void 0&&(_=0),E===void 0&&(E=1),p.min=av(p.min,_,E,R,I),p.max=av(p.max,_,E,R,I)}function iv(p,_){var E=_.x,R=_.y;Tp(p.x,E.translate,E.scale,E.originPoint),Tp(p.y,R.translate,R.scale,R.originPoint)}function XN(p,_,E,R){var I,V;R===void 0&&(R=!1);var W=E.length;if(W){_.x=_.y=1;for(var F,G,Q=0;Q_?E="y":Math.abs(p.x)>_&&(E="x"),E}function oE(p){var _=p.dragControls,E=p.visualElement,R=ye(function(){return new rE(E)});r.useEffect(function(){return _&&_.subscribe(R)},[R,_]),r.useEffect(function(){return R.addListeners()},[R])}function aE(p){var _=p.onPan,E=p.onPanStart,R=p.onPanEnd,I=p.onPanSessionStart,V=p.visualElement,W=_||E||R||I,F=r.useRef(null),G=r.useContext(v).transformPagePoint,Q={onSessionStart:I,onStart:E,onMove:_,onEnd:function(re,ne){F.current=null,R&&R(re,ne)}};r.useEffect(function(){F.current!==null&&F.current.updateHandlers(Q)});function Z(re){F.current=new Wb(re,Q,{transformPagePoint:G})}Ti(V,"pointerdown",W&&Z),Oi(function(){return F.current&&F.current.end()})}var uv={pan:lo(aE),drag:lo(oE)},qu=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"];function iE(){var p=qu.map(function(){return new Hs}),_={},E={clearAllListeners:function(){return p.forEach(function(R){return R.clear()})},updatePropListeners:function(R){qu.forEach(function(I){var V,W="on"+I,F=R[W];(V=_[I])===null||V===void 0||V.call(_),F&&(_[I]=E[W](F))})}};return p.forEach(function(R,I){E["on"+qu[I]]=function(V){return R.add(V)},E["notify"+qu[I]]=function(){for(var V=[],W=0;W=0?window.pageYOffset:null,Q=bE(_,p,F);return V.length&&V.forEach(function(Z){var re=t.__read(Z,2),ne=re[0],le=re[1];p.getValue(ne).set(le)}),p.syncRender(),G!==null&&window.scrollTo({top:G}),{target:Q,transitionEnd:R}}else return{target:_,transitionEnd:R}};function yE(p,_,E,R){return pE(_)?vE(p,_,E,R):{target:_,transitionEnd:R}}var xE=function(p,_,E,R){var I=dE(p,_,R);return _=I.target,R=I.transitionEnd,yE(p,_,E,R)};function wE(p){return window.getComputedStyle(p)}var vv={treeType:"dom",readValueFromInstance:function(p,_){if(ge(_)){var E=lp(_);return E&&E.default||0}else{var R=wE(p);return(Ue(_)?R.getPropertyValue(_):R[_])||0}},sortNodePosition:function(p,_){return p.compareDocumentPosition(_)&2?1:-1},getBaseTarget:function(p,_){var E;return(E=p.style)===null||E===void 0?void 0:E[_]},measureViewportBox:function(p,_){var E=_.transformPagePoint;return lv(p,E)},resetTransform:function(p,_,E){var R=E.transformTemplate;_.style.transform=R?R({},""):"none",p.scheduleRender()},restoreTransform:function(p,_){p.style.transform=_.style.transform},removeValueFromRenderState:function(p,_){var E=_.vars,R=_.style;delete E[p],delete R[p]},makeTargetAnimatable:function(p,_,E,R){var I=E.transformValues;R===void 0&&(R=!0);var V=_.transition,W=_.transitionEnd,F=t.__rest(_,["transition","transitionEnd"]),G=Vb(F,V||{},p);if(I&&(W&&(W=I(W)),F&&(F=I(F)),G&&(G=I(G))),R){bp(p,F,G);var Q=xE(p,F,G,W);W=Q.transitionEnd,F=Q.target}return t.__assign({transition:V,transitionEnd:W},F)},scrapeMotionValuesFromProps:gr,build:function(p,_,E,R,I){p.isVisible!==void 0&&(_.style.visibility=p.isVisible?"visible":"hidden"),dt(_,E,R,I.transformTemplate)},render:kt},_E=Gu(vv),SE=Gu(t.__assign(t.__assign({},vv),{getBaseTarget:function(p,_){return p[_]},readValueFromInstance:function(p,_){var E;return ge(_)?((E=lp(_))===null||E===void 0?void 0:E.default)||0:(_=Rn.has(_)?_:or(_),p.getAttribute(_))},scrapeMotionValuesFromProps:Mn,build:function(p,_,E,R,I){Ae(_,E,R,I.transformTemplate)},render:Ir})),kp=function(p,_){return ht(p)?SE(_,{enableHardwareAcceleration:!1}):_E(_,{enableHardwareAcceleration:!0})};function yv(p,_){return _.max===_.min?0:p/(_.max-_.min)*100}var Qs={correct:function(p,_){if(!_.target)return p;if(typeof p=="string")if(o.px.test(p))p=parseFloat(p);else return p;var E=yv(p,_.target.x),R=yv(p,_.target.y);return"".concat(E,"% ").concat(R,"%")}},xv="_$css",CE={correct:function(p,_){var E=_.treeScale,R=_.projectionDelta,I=p,V=p.includes("var("),W=[];V&&(p=p.replace(dv,function(we){return W.push(we),xv}));var F=o.complex.parse(p);if(F.length>5)return I;var G=o.complex.createTransformer(p),Q=typeof F[0]!="number"?1:0,Z=R.x.scale*E.x,re=R.y.scale*E.y;F[0+Q]/=Z,F[1+Q]/=re;var ne=a.mix(Z,re,.5);typeof F[2+Q]=="number"&&(F[2+Q]/=ne),typeof F[3+Q]=="number"&&(F[3+Q]/=ne);var le=G(F);if(V){var ue=0;le=le.replace(xv,function(){var we=W[ue];return ue++,we})}return le}},TE=function(p){t.__extends(_,p);function _(){return p!==null&&p.apply(this,arguments)||this}return _.prototype.componentDidMount=function(){var E=this,R=this.props,I=R.visualElement,V=R.layoutGroup,W=R.switchLayoutGroup,F=R.layoutId,G=I.projection;ot(PE),G&&(V!=null&&V.group&&V.group.add(G),W!=null&&W.register&&F&&W.register(G),G.root.didUpdate(),G.addEventListener("animationComplete",function(){E.safeToRemove()}),G.setOptions(t.__assign(t.__assign({},G.options),{onExitComplete:function(){return E.safeToRemove()}}))),Pe.hasEverUpdated=!0},_.prototype.getSnapshotBeforeUpdate=function(E){var R=this,I=this.props,V=I.layoutDependency,W=I.visualElement,F=I.drag,G=I.isPresent,Q=W.projection;return Q&&(Q.isPresent=G,F||E.layoutDependency!==V||V===void 0?Q.willUpdate():this.safeToRemove(),E.isPresent!==G&&(G?Q.promote():Q.relegate()||O.default.postRender(function(){var Z;!((Z=Q.getStack())===null||Z===void 0)&&Z.members.length||R.safeToRemove()}))),null},_.prototype.componentDidUpdate=function(){var E=this.props.visualElement.projection;E&&(E.root.didUpdate(),!E.currentAnimation&&E.isLead()&&this.safeToRemove())},_.prototype.componentWillUnmount=function(){var E=this.props,R=E.visualElement,I=E.layoutGroup,V=E.switchLayoutGroup,W=R.projection;W&&(W.scheduleCheckAfterUnmount(),I!=null&&I.group&&I.group.remove(W),V!=null&&V.deregister&&V.deregister(W))},_.prototype.safeToRemove=function(){var E=this.props.safeToRemove;E==null||E()},_.prototype.render=function(){return null},_}(S.default.Component);function OE(p){var _=t.__read(xe(),2),E=_[0],R=_[1],I=r.useContext(ce);return S.default.createElement(TE,t.__assign({},p,{layoutGroup:I,switchLayoutGroup:r.useContext(je),isPresent:E,safeToRemove:R}))}var PE={borderRadius:t.__assign(t.__assign({},Qs),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:Qs,borderTopRightRadius:Qs,borderBottomLeftRadius:Qs,borderBottomRightRadius:Qs,boxShadow:CE},wv={measureLayout:OE};function _v(p,_,E){E===void 0&&(E={});var R=ie(p)?p:bn(p);return fp("",R,_,E),{stop:function(){return R.stop()},isAnimating:function(){return R.isAnimating()}}}var Sv=["TopLeft","TopRight","BottomLeft","BottomRight"],kE=Sv.length,Cv=function(p){return typeof p=="string"?parseFloat(p):p},Tv=function(p){return typeof p=="number"||o.px.test(p)};function NE(p,_,E,R,I,V){var W,F,G,Q;I?(p.opacity=a.mix(0,(W=E.opacity)!==null&&W!==void 0?W:1,EE(R)),p.opacityExit=a.mix((F=_.opacity)!==null&&F!==void 0?F:1,0,jE(R))):V&&(p.opacity=a.mix((G=_.opacity)!==null&&G!==void 0?G:1,(Q=E.opacity)!==null&&Q!==void 0?Q:1,R));for(var Z=0;Z_?1:E(a.progress(p,_,R))}}function kv(p,_){p.min=_.min,p.max=_.max}function Fn(p,_){kv(p.x,_.x),kv(p.y,_.y)}function Nv(p,_,E,R,I){return p-=_,p=$u(p,1/E,R),I!==void 0&&(p=$u(p,1/I,R)),p}function AE(p,_,E,R,I,V,W){if(_===void 0&&(_=0),E===void 0&&(E=1),R===void 0&&(R=.5),V===void 0&&(V=p),W===void 0&&(W=p),o.percent.test(_)){_=parseFloat(_);var F=a.mix(W.min,W.max,_/100);_=F-W.min}if(typeof _=="number"){var G=a.mix(V.min,V.max,R);p===V&&(G-=_),p.min=Nv(p.min,_,E,G,I),p.max=Nv(p.max,_,E,G,I)}}function Ev(p,_,E,R,I){var V=t.__read(E,3),W=V[0],F=V[1],G=V[2];AE(p,_[W],_[F],_[G],_.scale,R,I)}var RE=["x","scaleX","originX"],ME=["y","scaleY","originY"];function jv(p,_,E,R){Ev(p.x,_,RE,E==null?void 0:E.x,R==null?void 0:R.x),Ev(p.y,_,ME,E==null?void 0:E.y,R==null?void 0:R.y)}function Av(p){return p.translate===0&&p.scale===1}function Rv(p){return Av(p.x)&&Av(p.y)}function Mv(p,_){return p.x.min===_.x.min&&p.x.max===_.x.max&&p.y.min===_.y.min&&p.y.max===_.y.max}var IE=function(){function p(){this.members=[]}return p.prototype.add=function(_){pp(this.members,_),_.scheduleRender()},p.prototype.remove=function(_){if(hp(this.members,_),_===this.prevLead&&(this.prevLead=void 0),_===this.lead){var E=this.members[this.members.length-1];E&&this.promote(E)}},p.prototype.relegate=function(_){var E=this.members.findIndex(function(W){return _===W});if(E===0)return!1;for(var R,I=E;I>=0;I--){var V=this.members[I];if(V.isPresent!==!1){R=V;break}}return R?(this.promote(R),!0):!1},p.prototype.promote=function(_,E){var R,I=this.lead;if(_!==I&&(this.prevLead=I,this.lead=_,_.show(),I)){I.instance&&I.scheduleRender(),_.scheduleRender(),_.resumeFrom=I,E&&(_.resumeFrom.preserveOpacity=!0),I.snapshot&&(_.snapshot=I.snapshot,_.snapshot.latestValues=I.animationValues||I.latestValues,_.snapshot.isShared=!0),!((R=_.root)===null||R===void 0)&&R.isUpdating&&(_.isLayoutDirty=!0);var V=_.options.crossfade;V===!1&&I.hide()}},p.prototype.exitAnimationComplete=function(){this.members.forEach(function(_){var E,R,I,V,W;(R=(E=_.options).onExitComplete)===null||R===void 0||R.call(E),(W=(I=_.resumingFrom)===null||I===void 0?void 0:(V=I.options).onExitComplete)===null||W===void 0||W.call(V)})},p.prototype.scheduleRender=function(){this.members.forEach(function(_){_.instance&&_.scheduleRender(!1)})},p.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},p}(),DE="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function Iv(p,_,E){var R=p.x.translate/_.x,I=p.y.translate/_.y,V="translate3d(".concat(R,"px, ").concat(I,"px, 0) ");if(V+="scale(".concat(1/_.x,", ").concat(1/_.y,") "),E){var W=E.rotate,F=E.rotateX,G=E.rotateY;W&&(V+="rotate(".concat(W,"deg) ")),F&&(V+="rotateX(".concat(F,"deg) ")),G&&(V+="rotateY(".concat(G,"deg) "))}var Q=p.x.scale*_.x,Z=p.y.scale*_.y;return V+="scale(".concat(Q,", ").concat(Z,")"),V===DE?"none":V}var LE=function(p,_){return p.depth-_.depth},Dv=function(){function p(){this.children=[],this.isDirty=!1}return p.prototype.add=function(_){pp(this.children,_),this.isDirty=!0},p.prototype.remove=function(_){hp(this.children,_),this.isDirty=!0},p.prototype.forEach=function(_){this.isDirty&&this.children.sort(LE),this.isDirty=!1,this.children.forEach(_)},p}(),Lv=1e3;function Fv(p){var _=p.attachResizeListener,E=p.defaultParent,R=p.measureScroll,I=p.checkIsScrollRoot,V=p.resetTransform;return function(){function W(F,G,Q){var Z=this;G===void 0&&(G={}),Q===void 0&&(Q=E==null?void 0:E()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){Z.isUpdating&&(Z.isUpdating=!1,Z.clearAllSnapshots())},this.updateProjection=function(){Z.nodes.forEach(WE),Z.nodes.forEach($E)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=F,this.latestValues=G,this.root=Q?Q.root||Q:this,this.path=Q?t.__spreadArray(t.__spreadArray([],t.__read(Q.path),!1),[Q],!1):[],this.parent=Q,this.depth=Q?Q.depth+1:0,F&&this.root.registerPotentialNode(F,this);for(var re=0;re=0;R--)if(p.path[R].instance){E=p.path[R];break}var I=E&&E!==p.root?E.instance:document,V=I.querySelector('[data-projection-id="'.concat(_,'"]'));V&&p.mount(V,!0)}function Uv(p){p.min=Math.round(p.min),p.max=Math.round(p.max)}function Wv(p){Uv(p.x),Uv(p.y)}var XE=Fv({attachResizeListener:function(p,_){return mn(p,"resize",_)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),Va={current:void 0},Np=Fv({measureScroll:function(p){return{x:p.scrollLeft,y:p.scrollTop}},defaultParent:function(){if(!Va.current){var p=new XE(0,{});p.mount(window),p.setOptions({layoutScroll:!0}),Va.current=p}return Va.current},resetTransform:function(p,_){p.style.transform=_??"none"},checkIsScrollRoot:function(p){return window.getComputedStyle(p).position==="fixed"}}),$v=t.__assign(t.__assign(t.__assign(t.__assign({},xp),Ws),uv),wv),Ep=Ge(function(p,_){return Ia(p,_,$v,kp,Np)});function ZE(p){return Je(Ia(p,{forwardMotionProps:!1},$v,kp,Np))}var JE=Ge(Ia);function Hv(){var p=r.useRef(!1);return A(function(){return p.current=!0,function(){p.current=!1}},[]),p}function Yu(){var p=Hv(),_=t.__read(r.useState(0),2),E=_[0],R=_[1],I=r.useCallback(function(){p.current&&R(E+1)},[E]),V=r.useCallback(function(){return O.default.postRender(I)},[I]);return[V,E]}var jp=function(p){var _=p.children,E=p.initial,R=p.isPresent,I=p.onExitComplete,V=p.custom,W=p.presenceAffectsLayout,F=ye(ej),G=$s(),Q=r.useMemo(function(){return{id:G,initial:E,isPresent:R,custom:V,onExitComplete:function(Z){var re,ne;F.set(Z,!0);try{for(var le=t.__values(F.values()),ue=le.next();!ue.done;ue=le.next()){var we=ue.value;if(!we)return}}catch(De){re={error:De}}finally{try{ue&&!ue.done&&(ne=le.return)&&ne.call(le)}finally{if(re)throw re.error}}I==null||I()},register:function(Z){return F.set(Z,!1),function(){return F.delete(Z)}}}},W?void 0:[R]);return r.useMemo(function(){F.forEach(function(Z,re){return F.set(re,!1)})},[R]),b.useEffect(function(){!R&&!F.size&&(I==null||I())},[R]),b.createElement(N.Provider,{value:Q},_)};function ej(){return new Map}var Ni=function(p){return p.key||""};function tj(p,_){p.forEach(function(E){var R=Ni(E);_.set(R,E)})}function rj(p){var _=[];return r.Children.forEach(p,function(E){r.isValidElement(E)&&_.push(E)}),_}var nj=function(p){var _=p.children,E=p.custom,R=p.initial,I=R===void 0?!0:R,V=p.onExitComplete,W=p.exitBeforeEnter,F=p.presenceAffectsLayout,G=F===void 0?!0:F,Q=t.__read(Yu(),1),Z=Q[0],re=r.useContext(ce).forceRender;re&&(Z=re);var ne=Hv(),le=rj(_),ue=le,we=new Set,De=r.useRef(ue),$e=r.useRef(new Map).current,tt=r.useRef(!0);if(A(function(){tt.current=!1,tj(le,$e),De.current=ue}),Oi(function(){tt.current=!0,$e.clear(),we.clear()}),tt.current)return b.createElement(b.Fragment,null,ue.map(function(vt){return b.createElement(jp,{key:Ni(vt),isPresent:!0,initial:I?void 0:!1,presenceAffectsLayout:G},vt)}));ue=t.__spreadArray([],t.__read(ue),!1);for(var pt=De.current.map(Ni),gt=le.map(Ni),bt=pt.length,Lt=0;Lt1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),b.createElement(b.Fragment,null,we.size?ue:ue.map(function(vt){return r.cloneElement(vt)}))},qv=r.createContext(null),oj=function(p){return!p.isLayoutDirty&&p.willUpdate(!1)};function Gv(){var p=new Set,_=new WeakMap,E=function(){return p.forEach(oj)};return{add:function(R){p.add(R),_.set(R,R.addEventListener("willUpdate",E))},remove:function(R){var I;p.delete(R),(I=_.get(R))===null||I===void 0||I(),_.delete(R),E()},dirty:E}}var Kv=function(p){return p===!0},aj=function(p){return Kv(p===!0)||p==="id"},Yv=function(p){var _,E,R=p.children,I=p.id,V=p.inheritId,W=p.inherit,F=W===void 0?!0:W;V!==void 0&&(F=V);var G=r.useContext(ce),Q=r.useContext(qv),Z=t.__read(Yu(),2),re=Z[0],ne=Z[1],le=r.useRef(null),ue=(_=G.id)!==null&&_!==void 0?_:Q;le.current===null&&(aj(F)&&ue&&(I=I?ue+"-"+I:ue),le.current={id:I,group:Kv(F)&&(E=G==null?void 0:G.group)!==null&&E!==void 0?E:Gv()});var we=r.useMemo(function(){return t.__assign(t.__assign({},le.current),{forceRender:re})},[ne]);return b.createElement(ce.Provider,{value:we},R)},ij=0,sj=function(p){var _=p.children;return b.useEffect(function(){n.warning(!1,"AnimateSharedLayout is deprecated: https://www.framer.com/docs/guide-upgrade/##shared-layout-animations")},[]),b.createElement(Yv,{id:ye(function(){return"asl-".concat(ij++)})},_)};function lj(p){var _=p.children,E=p.isValidProp,R=t.__rest(p,["children","isValidProp"]);E&&jn(E),R=t.__assign(t.__assign({},r.useContext(v)),R),R.isStatic=ye(function(){return R.isStatic});var I=r.useMemo(function(){return R},[JSON.stringify(R.transition),R.transformPagePoint,R.reducedMotion]);return b.createElement(v.Provider,{value:I},_)}function uj(p){var _=p.children,E=p.features,R=p.strict,I=R===void 0?!1:R,V=t.__read(r.useState(!Ap(E)),2),W=V[1],F=r.useRef(void 0);if(!Ap(E)){var G=E.renderer,Q=t.__rest(E,["renderer"]);F.current=G,d(Q)}return r.useEffect(function(){Ap(E)&&E().then(function(Z){var re=Z.renderer,ne=t.__rest(Z,["renderer"]);d(ne),F.current=re,W(!0)})},[]),b.createElement(s.Provider,{value:{renderer:F.current,strict:I}},_)}function Ap(p){return typeof p=="function"}var Qv=r.createContext(null);function cj(p,_,E,R){if(!R)return p;var I=p.findIndex(function(Z){return Z.value===_});if(I===-1)return p;var V=R>0?1:-1,W=p[I+V];if(!W)return p;var F=p[I],G=W.layout,Q=a.mix(G.min,G.max,.5);return V===1&&F.layout.max+E>Q||V===-1&&F.layout.min+E.001?1/p:Uj},ly=!1;function Wj(p){var _=Yo(1),E=Yo(1),R=j();n.invariant(!!(p||R),"If no scale values are provided, useInvertedScale must be used within a child of another motion component."),n.warning(ly,"useInvertedScale is deprecated and will be removed in 3.0. Use the layout prop instead."),ly=!0,p?(_=p.scaleX||_,E=p.scaleY||E):R&&(_=R.getValue("scaleX",1),E=R.getValue("scaleY",1));var I=Qu(_,sy),V=Qu(E,sy);return{scaleX:I,scaleY:V}}e.AnimatePresence=nj,e.AnimateSharedLayout=sj,e.DeprecatedLayoutGroupContext=qv,e.DragControls=ay,e.FlatTree=Dv,e.LayoutGroup=Yv,e.LayoutGroupContext=ce,e.LazyMotion=uj,e.MotionConfig=lj,e.MotionConfigContext=v,e.MotionContext=w,e.MotionValue=Fb,e.PresenceContext=N,e.Reorder=wj,e.SwitchLayoutGroupContext=je,e.addPointerEvent=Po,e.addScaleCorrector=ot,e.animate=_v,e.animateVisualElement=Wu,e.animationControls=ny,e.animations=xp,e.calcLength=uo,e.checkTargetForNewValues=bp,e.createBox=mr,e.createDomMotionComponent=ZE,e.createMotionComponent=Je,e.domAnimation=ty,e.domMax=_j,e.filterProps=Mr,e.isBrowser=k,e.isDragActive=Vs,e.isMotionValue=ie,e.isValidMotionProp=ir,e.m=JE,e.makeUseVisualState=Oo,e.motion=Ep,e.motionValue=bn,e.resolveMotionValue=ao,e.transform=Xv,e.useAnimation=jj,e.useAnimationControls=oy,e.useAnimationFrame=ry,e.useCycle=Aj,e.useDeprecatedAnimatedState=Vj,e.useDeprecatedInvertedScale=Wj,e.useDomEvent=jt,e.useDragControls=Ij,e.useElementScroll=Pj,e.useForceUpdate=Yu,e.useInView=Rj,e.useInstantLayoutTransition=iy,e.useInstantTransition=Lj,e.useIsPresent=Le,e.useIsomorphicLayoutEffect=A,e.useMotionTemplate=Sj,e.useMotionValue=Yo,e.usePresence=xe,e.useReducedMotion=B,e.useReducedMotionConfig=U,e.useResetProjection=Fj,e.useScroll=Rp,e.useSpring=Cj,e.useTime=Ej,e.useTransform=Qu,e.useUnmountEffect=Oi,e.useVelocity=Tj,e.useViewportScroll=kj,e.useVisualElementContext=j,e.visualElement=Gu,e.wrapHandler=_i})(xr);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{AccordionBody:function(){return x},default:function(){return m}});var r=O(P),n=xr,o=O(ct),a=O(Tr),i=O(et),c=rt,f=kf,g=Ze,b=bu;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.className,l=d.children,h=T(d,["className","children"]),v=(0,f.useAccordion)(),w=v.open,j=v.animate,N=(0,g.useTheme)().accordion,k=N.styles.base;u=u??"";var A=(0,c.twMerge)((0,o.default)((0,i.default)(k.body)),u),M={unmount:{height:"0px",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{height:"auto",transition:{duration:.2,times:[.4,0,.2,1]}}},D={unmount:{transition:{duration:.3,ease:"linear"}},mount:{transition:{duration:.3,ease:"linear"}}},L=(0,a.default)(D,j);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(n.m.div,{className:"overflow-hidden",initial:"unmount",exit:"unmount",animate:w?"mount":"unmount",variants:M},r.default.createElement(n.m.div,S({},h,{ref:s,className:A,initial:"unmount",exit:"unmount",animate:w?"mount":"unmount",variants:L}),l)))});x.propTypes={className:b.propTypesClassName,children:b.propTypesChildren},x.displayName="MaterialTailwind.AccordionBody";var m=x})(ST);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Accordion:function(){return m},AccordionHeader:function(){return g.AccordionHeader},AccordionBody:function(){return b.AccordionBody},useAccordion:function(){return c.useAccordion},default:function(){return d}});var r=T(P),n=T(ct),o=rt,a=T(et),i=Ze,c=kf,f=bu,g=_T,b=ST;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.open,h=s.icon,v=s.animate,w=s.className,j=s.disabled,N=s.children,k=C(s,["open","icon","animate","className","disabled","children"]),A=(0,i.useTheme)().accordion,M=A.defaultProps,D=A.styles.base;h=h??M.icon,v=v??M.animate,w=w??M.className,j=j??M.disabled;var L=(0,o.twMerge)((0,n.default)((0,a.default)(D.container),S({},(0,a.default)(D.disabled),j)),w),B=r.default.useMemo(function(){return{open:l,icon:h,animate:v,disabled:j}},[l,h,v,j]);return r.default.createElement(c.AccordionContextProvider,{value:B},r.default.createElement("div",O({},k,{ref:u,className:L}),N))});m.propTypes={open:f.propTypesOpen,icon:f.propTypesIcon,animate:f.propTypesAnimate,disabled:f.propTypesDisabled,className:f.propTypesClassName,children:f.propTypesChildren},m.displayName="MaterialTailwind.Accordion";var d=Object.assign(m,{Header:g.AccordionHeader,Body:b.AccordionBody})})(X5);var QO={},Xt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return r}});function t(n,o,a){var i=n.findIndex(function(c){return c===o});return i>=0?o:a}var r=t})(Xt);var Bf={},js=class{constructor(){this.x=0,this.y=0,this.z=0}findFurthestPoint(t,r,n,o,a,i){return this.x=t-n>r/2?0:r,this.y=o-i>a/2?0:a,this.z=Math.hypot(this.x-(t-n),this.y-(o-i)),this.z}appyStyles(t,r,n,o,a){t.classList.add("ripple"),t.style.backgroundColor=r==="dark"?"rgba(0,0,0, 0.2)":"rgba(255,255,255, 0.3)",t.style.borderRadius="50%",t.style.pointerEvents="none",t.style.position="absolute",t.style.left=a.clientX-n.left-o+"px",t.style.top=a.clientY-n.top-o+"px",t.style.width=t.style.height=o*2+"px"}applyAnimation(t){t.animate([{transform:"scale(0)",opacity:1},{transform:"scale(1.5)",opacity:0}],{duration:500,easing:"linear"})}create(t,r){const n=t.currentTarget;n.style.position="relative",n.style.overflow="hidden";const o=n.getBoundingClientRect(),a=this.findFurthestPoint(t.clientX,n.offsetWidth,o.left,t.clientY,n.offsetHeight,o.top),i=document.createElement("span");this.appyStyles(i,r,o,a,t),this.applyAnimation(i),n.appendChild(i),setTimeout(()=>i.remove(),500)}};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{IconButton:function(){return x},default:function(){return m}});var r=O(P),n=O(nt),o=O(js),a=O(ct),i=rt,c=O(Xt),f=O(et),g=Ze,b=hi;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.variant,l=d.size,h=d.color,v=d.ripple,w=d.className,j=d.children;d.fullWidth;var N=T(d,["variant","size","color","ripple","className","children","fullWidth"]),k=(0,g.useTheme)().iconButton,A=k.valid,M=k.defaultProps,D=k.styles,L=D.base,B=D.variants,U=D.sizes;u=u??M.variant,l=l??M.size,h=h??M.color,v=v??M.ripple,w=w??M.className;var Y=v!==void 0&&new o.default,q=(0,f.default)(L),z=(0,f.default)(B[(0,c.default)(A.variants,u,"filled")][(0,c.default)(A.colors,h,"gray")]),$=(0,f.default)(U[(0,c.default)(A.sizes,l,"md")]),K=(0,i.twMerge)((0,a.default)(q,$,z),w);return r.default.createElement("button",S({},N,{ref:s,className:K,type:N.type||"button",onMouseDown:function(X){var te=N==null?void 0:N.onMouseDown;return v&&Y.create(X,(u==="filled"||u==="gradient")&&h!=="white"?"light":"dark"),typeof te=="function"&&te(X)}}),r.default.createElement("span",{className:"absolute top-1/2 left-1/2 transform -translate-y-1/2 -translate-x-1/2"},j))});x.propTypes={variant:n.default.oneOf(b.propTypesVariant),size:n.default.oneOf(b.propTypesSize),color:n.default.oneOf(b.propTypesColor),ripple:b.propTypesRipple,className:b.propTypesClassName,children:b.propTypesChildren},x.displayName="MaterialTailwind.IconButton";var m=x})(Bf);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,l){for(var h in l)Object.defineProperty(u,h,{enumerable:!0,get:l[h]})}t(e,{Alert:function(){return d},default:function(){return s}});var r=C(P),n=C(nt),o=xr,a=C(ct),i=C(Tr),c=rt,f=C(Xt),g=C(et),b=Ze,S=Tm,O=C(Bf);function T(){return T=Object.assign||function(u){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(u,v)&&(h[v]=u[v])}return h}function m(u,l){if(u==null)return{};var h={},v=Object.keys(u),w,j;for(j=0;j=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,l){var h=u.variant,v=u.color,w=u.icon,j=u.open,N=u.action,k=u.onClose,A=u.animate,M=u.className,D=u.children,L=x(u,["variant","color","icon","open","action","onClose","animate","className","children"]),B=(0,b.useTheme)().alert,U=B.defaultProps,Y=B.valid,q=B.styles,z=q.base,$=q.variants;h=h??U.variant,v=v??U.color,M=M??U.className,A=A??U.animate,j=j??U.open,N=N??U.action,k=k??U.onClose;var K=(0,g.default)(z.alert),X=(0,g.default)(z.action),te=(0,g.default)($[(0,f.default)(Y.variants,h,"filled")][(0,f.default)(Y.colors,v,"gray")]),me=(0,c.twMerge)((0,a.default)(K,te),M),de=(0,a.default)(X),ee={unmount:{opacity:0},mount:{opacity:1}},Se=(0,i.default)(ee,A),pe=r.default.createElement("div",{className:"shrink-0"},w),fe=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(fe,null,j&&r.default.createElement(o.m.div,T({},L,{ref:l,role:"alert",className:"".concat(me," flex"),initial:"unmount",exit:"unmount",animate:j?"mount":"unmount",variants:Se}),w&&pe,r.default.createElement("div",{className:"".concat(w?"ml-3":""," mr-12")},D),k&&!N&&r.default.createElement(O.default,{onClick:k,size:"sm",variant:"text",color:h==="outlined"||h==="ghost"?v:"white",className:de},r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",className:"h-6 w-6",strokeWidth:2},r.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))),N||null)))});d.propTypes={variant:n.default.oneOf(S.propTypesVariant),color:n.default.oneOf(S.propTypesColor),icon:S.propTypesIcon,open:S.propTypesOpen,action:S.propTypesAction,onClose:S.propTypesOnClose,animate:S.propTypesAnimate,className:S.propTypesClassName,children:S.propTypesChildren},d.displayName="MaterialTailwind.Alert";var s=d})(QO);var XO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{Avatar:function(){return x},default:function(){return m}});var r=O(P),n=O(nt),o=O(ct),a=rt,i=O(Xt),c=O(et),f=Ze,g=Om;function b(d,s,u){return s in d?Object.defineProperty(d,s,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[s]=u,d}function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.variant,l=d.size,h=d.className,v=d.color,w=d.withBorder,j=T(d,["variant","size","className","color","withBorder"]),N=(0,f.useTheme)().avatar,k=N.valid,A=N.defaultProps,M=N.styles,D=M.base,L=M.variants,B=M.sizes,U=M.borderColor;u=u??A.variant,l=l??A.size,h=h??A.className,w=w??A.withBorder,v=v??A.color;var Y=(0,c.default)(L[(0,i.default)(k.variants,u,"rounded")]),q=(0,c.default)(B[(0,i.default)(k.sizes,l,"md")]),z=(0,c.default)(U[(0,i.default)(k.colors,v,"gray")]),$,K=(0,a.twMerge)((0,o.default)((0,c.default)(D.initial),Y,q,($={},b($,(0,c.default)(D.withBorder),w),b($,z,w),$)),h);return r.default.createElement("img",S({},j,{ref:s,className:K}))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),size:n.default.oneOf(g.propTypesSize),className:g.propTypesClassName,withBorder:g.propTypesWithBorder,color:n.default.oneOf(g.propTypesColor)},x.displayName="MaterialTailwind.Avatar";var m=x})(XO);var ZO={},JO={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(f,g){for(var b in g)Object.defineProperty(f,b,{enumerable:!0,get:g[b]})}t(e,{propTypesSeparator:function(){return o},propTypesFullWidth:function(){return a},propTypesClassName:function(){return i},propTypesChildren:function(){return c}});var r=n(nt);function n(f){return f&&f.__esModule?f:{default:f}}var o=r.default.node,a=r.default.bool,i=r.default.string,c=r.default.node.isRequired})(JO);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{Breadcrumbs:function(){return x},default:function(){return m}});var r=O(P),n=b(ct),o=rt,a=b(et),i=Ze,c=JO;function f(d,s,u){return s in d?Object.defineProperty(d,s,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[s]=u,d}function g(){return g=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=(0,r.forwardRef)(function(d,s){var u=d.separator,l=d.fullWidth,h=d.className,v=d.children,w=T(d,["separator","fullWidth","className","children"]),j=(0,i.useTheme)().breadcrumbs,N=j.defaultProps,k=j.styles.base;u=u??N.separator,l=l??N.fullWidth,h=h??N.className;var A=(0,n.default)((0,a.default)(k.root.initial),f({},(0,a.default)(k.root.fullWidth),l)),M=(0,o.twMerge)((0,n.default)((0,a.default)(k.list)),h),D=(0,n.default)((0,a.default)(k.item.initial)),L=(0,n.default)((0,a.default)(k.separator));return r.default.createElement("nav",{"aria-label":"breadcrumb",className:A},r.default.createElement("ol",g({},w,{ref:s,className:M}),r.Children.map(v,function(B,U){if((0,r.isValidElement)(B)){var Y;return r.default.createElement("li",{className:(0,n.default)(D,f({},(0,a.default)(k.item.disabled),B==null||(Y=B.props)===null||Y===void 0?void 0:Y.disabled))},B,U!==r.Children.count(v)-1&&r.default.createElement("span",{className:L},u))}return null})))});x.propTypes={separator:c.propTypesSeparator,fullWidth:c.propTypesFullWidth,className:c.propTypesClassName,children:c.propTypesChildren},x.displayName="MaterialTailwind.Breadcrumbs";var m=x})(ZO);var eP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Button:function(){return m},default:function(){return d}});var r=T(P),n=T(nt),o=T(js),a=T(ct),i=rt,c=T(Xt),f=T(et),g=Ze,b=hi;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.variant,h=s.size,v=s.color,w=s.fullWidth,j=s.ripple,N=s.className,k=s.children,A=C(s,["variant","size","color","fullWidth","ripple","className","children"]),M=(0,g.useTheme)().button,D=M.valid,L=M.defaultProps,B=M.styles,U=B.base,Y=B.variants,q=B.sizes;l=l??L.variant,h=h??L.size,v=v??L.color,w=w??L.fullWidth,j=j??L.ripple,N=N??L.className;var z=j!==void 0&&new o.default,$=(0,f.default)(U.initial),K=(0,f.default)(Y[(0,c.default)(D.variants,l,"filled")][(0,c.default)(D.colors,v,"gray")]),X=(0,f.default)(q[(0,c.default)(D.sizes,h,"md")]),te=(0,i.twMerge)((0,a.default)($,X,K,S({},(0,f.default)(U.fullWidth),w)),N);return r.default.createElement("button",O({},A,{ref:u,className:te,type:A.type||"button",onMouseDown:function(me){var de=A==null?void 0:A.onMouseDown;return j&&z.create(me,(l==="filled"||l==="gradient")&&v!=="white"?"light":"dark"),typeof de=="function"&&de(me)}}),k)});m.propTypes={variant:n.default.oneOf(b.propTypesVariant),size:n.default.oneOf(b.propTypesSize),color:n.default.oneOf(b.propTypesColor),fullWidth:b.propTypesFullWidth,ripple:b.propTypesRipple,className:b.propTypesClassName,children:b.propTypesChildren},m.displayName="MaterialTailwind.Button";var d=m})(eP);var tP={},rP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{CardHeader:function(){return x},default:function(){return m}});var r=O(P),n=O(nt),o=O(ct),a=rt,i=O(Xt),c=O(et),f=Ze,g=gi;function b(d,s,u){return s in d?Object.defineProperty(d,s,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[s]=u,d}function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.variant,l=d.color,h=d.shadow,v=d.floated,w=d.className,j=d.children,N=T(d,["variant","color","shadow","floated","className","children"]),k=(0,f.useTheme)().cardHeader,A=k.defaultProps,M=k.styles,D=k.valid,L=M.base,B=M.variants;u=u??A.variant,l=l??A.color,h=h??A.shadow,v=v??A.floated,w=w??A.className;var U=(0,c.default)(L.initial),Y=(0,c.default)(B[(0,i.default)(D.variants,u,"filled")][(0,i.default)(D.colors,l,"white")]),q=(0,a.twMerge)((0,o.default)(U,Y,b({},(0,c.default)(L.shadow),h),b({},(0,c.default)(L.floated),v)),w);return r.default.createElement("div",S({},N,{ref:s,className:q}),j)});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),shadow:g.propTypesShadow,floated:g.propTypesFloated,className:g.propTypesClassName,children:g.propTypesChildren},x.displayName="MaterialTailwind.CardHeader";var m=x})(rP);var nP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{CardBody:function(){return O},default:function(){return T}});var r=g(P),n=g(ct),o=rt,a=g(et),i=Ze,c=gi;function f(){return f=Object.assign||function(C){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(C,d)&&(m[d]=C[d])}return m}function S(C,x){if(C==null)return{};var m={},d=Object.keys(C),s,u;for(u=0;u=0)&&(m[s]=C[s]);return m}var O=r.default.forwardRef(function(C,x){var m=C.className,d=C.children,s=b(C,["className","children"]),u=(0,i.useTheme)().cardBody,l=u.defaultProps,h=u.styles.base;m=m??l.className;var v=(0,o.twMerge)((0,n.default)((0,a.default)(h)),m);return r.default.createElement("div",f({},s,{ref:x,className:v}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.CardBody";var T=O})(nP);var oP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,m){for(var d in m)Object.defineProperty(x,d,{enumerable:!0,get:m[d]})}t(e,{CardFooter:function(){return T},default:function(){return C}});var r=b(P),n=b(ct),o=rt,a=b(et),i=Ze,c=gi;function f(x,m,d){return m in x?Object.defineProperty(x,m,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[m]=d,x}function g(){return g=Object.assign||function(x){for(var m=1;m=0)&&Object.prototype.propertyIsEnumerable.call(x,s)&&(d[s]=x[s])}return d}function O(x,m){if(x==null)return{};var d={},s=Object.keys(x),u,l;for(l=0;l=0)&&(d[u]=x[u]);return d}var T=r.default.forwardRef(function(x,m){var d=x.divider,s=x.className,u=x.children,l=S(x,["divider","className","children"]),h=(0,i.useTheme)().cardFooter,v=h.defaultProps,w=h.styles.base;s=s??v.className,d=d??v.divider;var j=(0,o.twMerge)((0,n.default)((0,a.default)(w.initial),f({},(0,a.default)(w.divider),d)),s);return r.default.createElement("div",g({},l,{ref:m,className:j}),u)});T.propTypes={divider:c.propTypesDivider,className:c.propTypesClassName,children:c.propTypesChildren},T.displayName="MaterialTailwind.CardFooter";var C=T})(oP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{Card:function(){return s},CardHeader:function(){return g.CardHeader},CardBody:function(){return b.CardBody},CardFooter:function(){return S.CardFooter},default:function(){return u}});var r=x(P),n=x(nt),o=x(ct),a=rt,i=x(Xt),c=x(et),f=Ze,g=rP,b=nP,S=oP,O=gi;function T(l,h,v){return h in l?Object.defineProperty(l,h,{value:v,enumerable:!0,configurable:!0,writable:!0}):l[h]=v,l}function C(){return C=Object.assign||function(l){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(l,w)&&(v[w]=l[w])}return v}function d(l,h){if(l==null)return{};var v={},w=Object.keys(l),j,N;for(N=0;N=0)&&(v[j]=l[j]);return v}var s=r.default.forwardRef(function(l,h){var v=l.variant,w=l.color,j=l.shadow,N=l.className,k=l.children,A=m(l,["variant","color","shadow","className","children"]),M=(0,f.useTheme)().card,D=M.defaultProps,L=M.styles,B=M.valid,U=L.base,Y=L.variants;v=v??D.variant,w=w??D.color,j=j??D.shadow,N=N??D.className;var q=(0,c.default)(U.initial),z=(0,c.default)(Y[(0,i.default)(B.variants,v,"filled")][(0,i.default)(B.colors,w,"white")]),$=(0,a.twMerge)((0,o.default)(q,z,T({},(0,c.default)(U.shadow),j)),N);return r.default.createElement("div",C({},A,{ref:h,className:$}),k)});s.propTypes={variant:n.default.oneOf(O.propTypesVariant),color:n.default.oneOf(O.propTypesColor),shadow:O.propTypesShadow,className:O.propTypesClassName,children:O.propTypesChildren},s.displayName="MaterialTailwind.Card";var u=Object.assign(s,{Header:g.CardHeader,Body:b.CardBody,Footer:S.CardFooter})})(tP);var aP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Checkbox:function(){return m},default:function(){return d}});var r=T(P),n=T(nt),o=T(js),a=T(ct),i=rt,c=T(Xt),f=T(et),g=Ze,b=mi;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.color,h=s.label,v=s.icon,w=s.ripple,j=s.className,N=s.disabled,k=s.containerProps,A=s.labelProps,M=s.iconProps,D=s.inputRef,L=C(s,["color","label","icon","ripple","className","disabled","containerProps","labelProps","iconProps","inputRef"]),B=(0,g.useTheme)().checkbox,U=B.defaultProps,Y=B.valid,q=B.styles,z=q.base,$=q.colors,K=r.default.useId();l=l??U.color,h=h??U.label,v=v??U.icon,w=w??U.ripple,j=j??U.className,N=N??U.disabled,k=k??U.containerProps,A=A??U.labelProps,M=M??U.iconProps;var X=w!==void 0&&new o.default,te=(0,a.default)((0,f.default)(z.root),S({},(0,f.default)(z.disabled),N)),me=(0,i.twMerge)((0,a.default)((0,f.default)(z.container)),k==null?void 0:k.className),de=(0,i.twMerge)((0,a.default)((0,f.default)(z.input),(0,f.default)($[(0,c.default)(Y.colors,l,"gray")])),j),ee=(0,i.twMerge)((0,a.default)((0,f.default)(z.label)),A==null?void 0:A.className),Se=(0,i.twMerge)((0,a.default)((0,f.default)(z.icon)),M==null?void 0:M.className);return r.default.createElement("div",{ref:u,className:te},r.default.createElement("label",O({},k,{className:me,htmlFor:L.id||K,onMouseDown:function(pe){var fe=k==null?void 0:k.onMouseDown;return w&&X.create(pe,"dark"),typeof fe=="function"&&fe(pe)}}),r.default.createElement("input",O({},L,{ref:D,type:"checkbox",disabled:N,className:de,id:L.id||K})),r.default.createElement("span",{className:Se},v||r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",stroke:"currentColor",strokeWidth:1},r.default.createElement("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})))),h&&r.default.createElement("label",O({},A,{className:ee,htmlFor:L.id||K}),h))});m.propTypes={color:n.default.oneOf(b.propTypesColor),label:b.propTypesLabel,icon:b.propTypesIcon,ripple:b.propTypesRipple,className:b.propTypesClassName,disabled:b.propTypesDisabled,containerProps:b.propTypesObject,labelProps:b.propTypesObject},m.displayName="MaterialTailwind.Checkbox";var d=m})(aP);var iP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,l){for(var h in l)Object.defineProperty(u,h,{enumerable:!0,get:l[h]})}t(e,{Chip:function(){return d},default:function(){return s}});var r=C(P),n=C(nt),o=xr,a=C(ct),i=C(Tr),c=rt,f=C(Xt),g=C(et),b=Ze,S=Rm,O=C(Bf);function T(){return T=Object.assign||function(u){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(u,v)&&(h[v]=u[v])}return h}function m(u,l){if(u==null)return{};var h={},v=Object.keys(u),w,j;for(j=0;j=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,l){var h=u.variant,v=u.size,w=u.color,j=u.icon,N=u.open,k=u.onClose,A=u.action,M=u.animate,D=u.className,L=u.value,B=x(u,["variant","size","color","icon","open","onClose","action","animate","className","value"]),U=(0,b.useTheme)().chip,Y=U.defaultProps,q=U.valid,z=U.styles,$=z.base,K=z.variants,X=z.sizes;h=h??Y.variant,v=v??Y.size,w=w??Y.color,D=D??Y.className,M=M??Y.animate,N=N??Y.open,A=A??Y.action,k=k??Y.onClose;var te=(0,g.default)($.chip),me=(0,g.default)($.action),de=(0,g.default)($.icon),ee=(0,g.default)(K[(0,f.default)(q.variants,h,"filled")][(0,f.default)(q.colors,w,"gray")]),Se=(0,g.default)(X[(0,f.default)(q.sizes,v,"md")].chip),pe=(0,g.default)(X[(0,f.default)(q.sizes,v,"md")].action),fe=(0,g.default)(X[(0,f.default)(q.sizes,v,"md")].icon),be=(0,c.twMerge)((0,a.default)(te,ee,Se),D),ye=(0,a.default)(me,pe),Pe=(0,a.default)(de,fe),Me=(0,a.default)({"ml-4":j&&v==="sm","ml-[18px]":j&&v==="md","ml-5":j&&v==="lg","mr-5":k}),ke={unmount:{opacity:0},mount:{opacity:1}},ce=(0,i.default)(ke,M),je=r.default.createElement("div",{className:Pe},j),He=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(He,null,N&&r.default.createElement(o.m.div,T({},B,{ref:l,className:be,initial:"unmount",exit:"unmount",animate:N?"mount":"unmount",variants:ce}),j&&je,r.default.createElement("span",{className:Me},L),k&&!A&&r.default.createElement(O.default,{onClick:k,size:"sm",variant:"text",color:h==="outlined"||h==="ghost"?w:"white",className:ye},r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",className:(0,a.default)({"h-3.5 w-3.5":v==="sm","h-4 w-4":v==="md","h-5 w-5":v==="lg"}),strokeWidth:2},r.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))),A||null)))});d.propTypes={variant:n.default.oneOf(S.propTypesVariant),size:n.default.oneOf(S.propTypesSize),color:n.default.oneOf(S.propTypesColor),icon:S.propTypesIcon,open:S.propTypesOpen,onClose:S.propTypesOnClose,action:S.propTypesAction,animate:S.propTypesAnimate,className:S.propTypesClassName,value:S.propTypesValue},d.displayName="MaterialTailwind.Chip";var s=d})(iP);var sP={},yF=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Ri=new WeakMap,vc=new WeakMap,yc={},xh=0,lP=function(e){return e&&(e.host||lP(e.parentNode))},xF=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=lP(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},wF=function(e,t,r,n){var o=xF(t,Array.isArray(e)?e:[e]);yc[r]||(yc[r]=new WeakMap);var a=yc[r],i=[],c=new Set,f=new Set(o),g=function(S){!S||c.has(S)||(c.add(S),g(S.parentNode))};o.forEach(g);var b=function(S){!S||f.has(S)||Array.prototype.forEach.call(S.children,function(O){if(c.has(O))b(O);else try{var T=O.getAttribute(n),C=T!==null&&T!=="false",x=(Ri.get(O)||0)+1,m=(a.get(O)||0)+1;Ri.set(O,x),a.set(O,m),i.push(O),x===1&&C&&vc.set(O,!0),m===1&&O.setAttribute(r,"true"),C||O.setAttribute(n,"true")}catch(d){console.error("aria-hidden: cannot operate on ",O,d)}})};return b(t),c.clear(),xh++,function(){i.forEach(function(S){var O=Ri.get(S)-1,T=a.get(S)-1;Ri.set(S,O),a.set(S,T),O||(vc.has(S)||S.removeAttribute(n),vc.delete(S)),T||S.removeAttribute(r)}),xh--,xh||(Ri=new WeakMap,Ri=new WeakMap,vc=new WeakMap,yc={})}},_F=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),o=t||yF(e);return o?(n.push.apply(n,Array.from(o.querySelectorAll("[aria-live], script"))),wF(n,o,r,"aria-hidden")):function(){return null}};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var SF=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],ag=SF.join(","),uP=typeof Element>"u",au=uP?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Hd=!uP&&Element.prototype.getRootNode?function(e){var t;return e==null||(t=e.getRootNode)===null||t===void 0?void 0:t.call(e)}:function(e){return e==null?void 0:e.ownerDocument},qd=function e(t,r){var n;r===void 0&&(r=!0);var o=t==null||(n=t.getAttribute)===null||n===void 0?void 0:n.call(t,"inert"),a=o===""||o==="true",i=a||r&&t&&e(t.parentNode);return i},CF=function(t){var r,n=t==null||(r=t.getAttribute)===null||r===void 0?void 0:r.call(t,"contenteditable");return n===""||n==="true"},TF=function(t,r,n){if(qd(t))return[];var o=Array.prototype.slice.apply(t.querySelectorAll(ag));return r&&au.call(t,ag)&&o.unshift(t),o=o.filter(n),o},OF=function e(t,r,n){for(var o=[],a=Array.from(t);a.length;){var i=a.shift();if(!qd(i,!1))if(i.tagName==="SLOT"){var c=i.assignedElements(),f=c.length?c:i.children,g=e(f,!0,n);n.flatten?o.push.apply(o,g):o.push({scopeParent:i,candidates:g})}else{var b=au.call(i,ag);b&&n.filter(i)&&(r||!t.includes(i))&&o.push(i);var S=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),O=!qd(S,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(S&&O){var T=e(S===!0?i.children:S.children,!0,n);n.flatten?o.push.apply(o,T):o.push({scopeParent:i,candidates:T})}else a.unshift.apply(a,i.children)}}return o},cP=function(t){return!isNaN(parseInt(t.getAttribute("tabindex"),10))},dP=function(t){if(!t)throw new Error("No node provided");return t.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||CF(t))&&!cP(t)?0:t.tabIndex},PF=function(t,r){var n=dP(t);return n<0&&r&&!cP(t)?0:n},kF=function(t,r){return t.tabIndex===r.tabIndex?t.documentOrder-r.documentOrder:t.tabIndex-r.tabIndex},fP=function(t){return t.tagName==="INPUT"},NF=function(t){return fP(t)&&t.type==="hidden"},EF=function(t){var r=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(n){return n.tagName==="SUMMARY"});return r},jF=function(t,r){for(var n=0;nsummary:first-of-type"),i=a?t.parentElement:t;if(au.call(i,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="legacy-full"){if(typeof o=="function"){for(var c=t;t;){var f=t.parentElement,g=Hd(t);if(f&&!f.shadowRoot&&o(f)===!0)return pw(t);t.assignedSlot?t=t.assignedSlot:!f&&g!==t.ownerDocument?t=g.host:t=f}t=c}if(IF(t))return!t.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return pw(t);return!1},LF=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var r=t.parentElement;r;){if(r.tagName==="FIELDSET"&&r.disabled){for(var n=0;n=0)},BF=function e(t){var r=[],n=[];return t.forEach(function(o,a){var i=!!o.scopeParent,c=i?o.scopeParent:o,f=PF(c,i),g=i?e(o.candidates):c;f===0?i?r.push.apply(r,g):r.push(c):n.push({documentOrder:a,tabIndex:f,item:o,isScope:i,content:g})}),n.sort(kF).reduce(function(o,a){return a.isScope?o.push.apply(o,a.content):o.push(a.content),o},[]).concat(r)},Gd=function(t,r){r=r||{};var n;return r.getShadowRoot?n=OF([t],r.includeContainer,{filter:hw.bind(null,r),flatten:!1,getShadowRoot:r.getShadowRoot,shadowRootFilter:zF}):n=TF(t,r.includeContainer,hw.bind(null,r)),BF(n)};const pP=["top","right","bottom","left"],gw=["start","end"],mw=pP.reduce((e,t)=>e.concat(t,t+"-"+gw[0],t+"-"+gw[1]),[]),Zn=Math.min,Ar=Math.max,Kd=Math.round,xc=Math.floor,yo=e=>({x:e,y:e}),VF={left:"right",right:"left",bottom:"top",top:"bottom"},UF={start:"end",end:"start"};function ig(e,t,r){return Ar(e,Zn(t,r))}function Jn(e,t){return typeof e=="function"?e(t):e}function pn(e){return e.split("-")[0]}function Qn(e){return e.split("-")[1]}function lb(e){return e==="x"?"y":"x"}function ub(e){return e==="y"?"height":"width"}const WF=new Set(["top","bottom"]);function qn(e){return WF.has(pn(e))?"y":"x"}function cb(e){return lb(qn(e))}function hP(e,t,r){r===void 0&&(r=!1);const n=Qn(e),o=cb(e),a=ub(o);let i=o==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Qd(i)),[i,Qd(i)]}function $F(e){const t=Qd(e);return[Yd(e),t,Yd(t)]}function Yd(e){return e.replace(/start|end/g,t=>UF[t])}const bw=["left","right"],vw=["right","left"],HF=["top","bottom"],qF=["bottom","top"];function GF(e,t,r){switch(e){case"top":case"bottom":return r?t?vw:bw:t?bw:vw;case"left":case"right":return t?HF:qF;default:return[]}}function KF(e,t,r,n){const o=Qn(e);let a=GF(pn(e),r==="start",n);return o&&(a=a.map(i=>i+"-"+o),t&&(a=a.concat(a.map(Yd)))),a}function Qd(e){return e.replace(/left|right|bottom|top/g,t=>VF[t])}function YF(e){return{top:0,right:0,bottom:0,left:0,...e}}function db(e){return typeof e!="number"?YF(e):{top:e,right:e,bottom:e,left:e}}function vs(e){const{x:t,y:r,width:n,height:o}=e;return{width:n,height:o,top:r,left:t,right:t+n,bottom:r+o,x:t,y:r}}function yw(e,t,r){let{reference:n,floating:o}=e;const a=qn(t),i=cb(t),c=ub(i),f=pn(t),g=a==="y",b=n.x+n.width/2-o.width/2,S=n.y+n.height/2-o.height/2,O=n[c]/2-o[c]/2;let T;switch(f){case"top":T={x:b,y:n.y-o.height};break;case"bottom":T={x:b,y:n.y+n.height};break;case"right":T={x:n.x+n.width,y:S};break;case"left":T={x:n.x-o.width,y:S};break;default:T={x:n.x,y:n.y}}switch(Qn(t)){case"start":T[i]-=O*(r&&g?-1:1);break;case"end":T[i]+=O*(r&&g?-1:1);break}return T}const QF=async(e,t,r)=>{const{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:i}=r,c=a.filter(Boolean),f=await(i.isRTL==null?void 0:i.isRTL(t));let g=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:b,y:S}=yw(g,n,f),O=n,T={},C=0;for(let x=0;x({name:"arrow",options:e,async fn(t){const{x:r,y:n,placement:o,rects:a,platform:i,elements:c,middlewareData:f}=t,{element:g,padding:b=0}=Jn(e,t)||{};if(g==null)return{};const S=db(b),O={x:r,y:n},T=cb(o),C=ub(T),x=await i.getDimensions(g),m=T==="y",d=m?"top":"left",s=m?"bottom":"right",u=m?"clientHeight":"clientWidth",l=a.reference[C]+a.reference[T]-O[T]-a.floating[C],h=O[T]-a.reference[T],v=await(i.getOffsetParent==null?void 0:i.getOffsetParent(g));let w=v?v[u]:0;(!w||!await(i.isElement==null?void 0:i.isElement(v)))&&(w=c.floating[u]||a.floating[C]);const j=l/2-h/2,N=w/2-x[C]/2-1,k=Zn(S[d],N),A=Zn(S[s],N),M=k,D=w-x[C]-A,L=w/2-x[C]/2+j,B=ig(M,L,D),U=!f.arrow&&Qn(o)!=null&&L!==B&&a.reference[C]/2-(LQn(o)===e),...r.filter(o=>Qn(o)!==e)]:r.filter(o=>pn(o)===o)).filter(o=>e?Qn(o)===e||(t?Yd(o)!==o:!1):!0)}const JF=function(e){return e===void 0&&(e={}),{name:"autoPlacement",options:e,async fn(t){var r,n,o;const{rects:a,middlewareData:i,placement:c,platform:f,elements:g}=t,{crossAxis:b=!1,alignment:S,allowedPlacements:O=mw,autoAlignment:T=!0,...C}=Jn(e,t),x=S!==void 0||O===mw?ZF(S||null,T,O):O,m=await si(t,C),d=((r=i.autoPlacement)==null?void 0:r.index)||0,s=x[d];if(s==null)return{};const u=hP(s,a,await(f.isRTL==null?void 0:f.isRTL(g.floating)));if(c!==s)return{reset:{placement:x[0]}};const l=[m[pn(s)],m[u[0]],m[u[1]]],h=[...((n=i.autoPlacement)==null?void 0:n.overflows)||[],{placement:s,overflows:l}],v=x[d+1];if(v)return{data:{index:d+1,overflows:h},reset:{placement:v}};const w=h.map(k=>{const A=Qn(k.placement);return[k.placement,A&&b?k.overflows.slice(0,2).reduce((M,D)=>M+D,0):k.overflows[0],k.overflows]}).sort((k,A)=>k[1]-A[1]),N=((o=w.filter(k=>k[2].slice(0,Qn(k[0])?2:3).every(A=>A<=0))[0])==null?void 0:o[0])||w[0][0];return N!==c?{data:{index:d+1,overflows:h},reset:{placement:N}}:{}}}},e6=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var r,n;const{placement:o,middlewareData:a,rects:i,initialPlacement:c,platform:f,elements:g}=t,{mainAxis:b=!0,crossAxis:S=!0,fallbackPlacements:O,fallbackStrategy:T="bestFit",fallbackAxisSideDirection:C="none",flipAlignment:x=!0,...m}=Jn(e,t);if((r=a.arrow)!=null&&r.alignmentOffset)return{};const d=pn(o),s=qn(c),u=pn(c)===c,l=await(f.isRTL==null?void 0:f.isRTL(g.floating)),h=O||(u||!x?[Qd(c)]:$F(c)),v=C!=="none";!O&&v&&h.push(...KF(c,x,C,l));const w=[c,...h],j=await si(t,m),N=[];let k=((n=a.flip)==null?void 0:n.overflows)||[];if(b&&N.push(j[d]),S){const L=hP(o,i,l);N.push(j[L[0]],j[L[1]])}if(k=[...k,{placement:o,overflows:N}],!N.every(L=>L<=0)){var A,M;const L=(((A=a.flip)==null?void 0:A.index)||0)+1,B=w[L];if(B&&(!(S==="alignment"?s!==qn(B):!1)||k.every(q=>qn(q.placement)===s?q.overflows[0]>0:!0)))return{data:{index:L,overflows:k},reset:{placement:B}};let U=(M=k.filter(Y=>Y.overflows[0]<=0).sort((Y,q)=>Y.overflows[1]-q.overflows[1])[0])==null?void 0:M.placement;if(!U)switch(T){case"bestFit":{var D;const Y=(D=k.filter(q=>{if(v){const z=qn(q.placement);return z===s||z==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(z=>z>0).reduce((z,$)=>z+$,0)]).sort((q,z)=>q[1]-z[1])[0])==null?void 0:D[0];Y&&(U=Y);break}case"initialPlacement":U=c;break}if(o!==U)return{reset:{placement:U}}}return{}}}};function xw(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function ww(e){return pP.some(t=>e[t]>=0)}const t6=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:r}=t,{strategy:n="referenceHidden",...o}=Jn(e,t);switch(n){case"referenceHidden":{const a=await si(t,{...o,elementContext:"reference"}),i=xw(a,r.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:ww(i)}}}case"escaped":{const a=await si(t,{...o,altBoundary:!0}),i=xw(a,r.floating);return{data:{escapedOffsets:i,escaped:ww(i)}}}default:return{}}}}};function gP(e){const t=Zn(...e.map(a=>a.left)),r=Zn(...e.map(a=>a.top)),n=Ar(...e.map(a=>a.right)),o=Ar(...e.map(a=>a.bottom));return{x:t,y:r,width:n-t,height:o-r}}function r6(e){const t=e.slice().sort((o,a)=>o.y-a.y),r=[];let n=null;for(let o=0;on.height/2?r.push([a]):r[r.length-1].push(a),n=a}return r.map(o=>vs(gP(o)))}const n6=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:r,elements:n,rects:o,platform:a,strategy:i}=t,{padding:c=2,x:f,y:g}=Jn(e,t),b=Array.from(await(a.getClientRects==null?void 0:a.getClientRects(n.reference))||[]),S=r6(b),O=vs(gP(b)),T=db(c);function C(){if(S.length===2&&S[0].left>S[1].right&&f!=null&&g!=null)return S.find(m=>f>m.left-T.left&&fm.top-T.top&&g=2){if(qn(r)==="y"){const k=S[0],A=S[S.length-1],M=pn(r)==="top",D=k.top,L=A.bottom,B=M?k.left:A.left,U=M?k.right:A.right,Y=U-B,q=L-D;return{top:D,bottom:L,left:B,right:U,width:Y,height:q,x:B,y:D}}const m=pn(r)==="left",d=Ar(...S.map(k=>k.right)),s=Zn(...S.map(k=>k.left)),u=S.filter(k=>m?k.left===s:k.right===d),l=u[0].top,h=u[u.length-1].bottom,v=s,w=d,j=w-v,N=h-l;return{top:l,bottom:h,left:v,right:w,width:j,height:N,x:v,y:l}}return O}const x=await a.getElementRects({reference:{getBoundingClientRect:C},floating:n.floating,strategy:i});return o.reference.x!==x.reference.x||o.reference.y!==x.reference.y||o.reference.width!==x.reference.width||o.reference.height!==x.reference.height?{reset:{rects:x}}:{}}}},mP=new Set(["left","top"]);async function o6(e,t){const{placement:r,platform:n,elements:o}=e,a=await(n.isRTL==null?void 0:n.isRTL(o.floating)),i=pn(r),c=Qn(r),f=qn(r)==="y",g=mP.has(i)?-1:1,b=a&&f?-1:1,S=Jn(t,e);let{mainAxis:O,crossAxis:T,alignmentAxis:C}=typeof S=="number"?{mainAxis:S,crossAxis:0,alignmentAxis:null}:{mainAxis:S.mainAxis||0,crossAxis:S.crossAxis||0,alignmentAxis:S.alignmentAxis};return c&&typeof C=="number"&&(T=c==="end"?C*-1:C),f?{x:T*b,y:O*g}:{x:O*g,y:T*b}}const a6=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var r,n;const{x:o,y:a,placement:i,middlewareData:c}=t,f=await o6(t,e);return i===((r=c.offset)==null?void 0:r.placement)&&(n=c.arrow)!=null&&n.alignmentOffset?{}:{x:o+f.x,y:a+f.y,data:{...f,placement:i}}}}},i6=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:n,placement:o}=t,{mainAxis:a=!0,crossAxis:i=!1,limiter:c={fn:m=>{let{x:d,y:s}=m;return{x:d,y:s}}},...f}=Jn(e,t),g={x:r,y:n},b=await si(t,f),S=qn(pn(o)),O=lb(S);let T=g[O],C=g[S];if(a){const m=O==="y"?"top":"left",d=O==="y"?"bottom":"right",s=T+b[m],u=T-b[d];T=ig(s,T,u)}if(i){const m=S==="y"?"top":"left",d=S==="y"?"bottom":"right",s=C+b[m],u=C-b[d];C=ig(s,C,u)}const x=c.fn({...t,[O]:T,[S]:C});return{...x,data:{x:x.x-r,y:x.y-n,enabled:{[O]:a,[S]:i}}}}}},s6=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:n,placement:o,rects:a,middlewareData:i}=t,{offset:c=0,mainAxis:f=!0,crossAxis:g=!0}=Jn(e,t),b={x:r,y:n},S=qn(o),O=lb(S);let T=b[O],C=b[S];const x=Jn(c,t),m=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:0,crossAxis:0,...x};if(f){const u=O==="y"?"height":"width",l=a.reference[O]-a.floating[u]+m.mainAxis,h=a.reference[O]+a.reference[u]-m.mainAxis;Th&&(T=h)}if(g){var d,s;const u=O==="y"?"width":"height",l=mP.has(pn(o)),h=a.reference[S]-a.floating[u]+(l&&((d=i.offset)==null?void 0:d[S])||0)+(l?0:m.crossAxis),v=a.reference[S]+a.reference[u]+(l?0:((s=i.offset)==null?void 0:s[S])||0)-(l?m.crossAxis:0);Cv&&(C=v)}return{[O]:T,[S]:C}}}},l6=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var r,n;const{placement:o,rects:a,platform:i,elements:c}=t,{apply:f=()=>{},...g}=Jn(e,t),b=await si(t,g),S=pn(o),O=Qn(o),T=qn(o)==="y",{width:C,height:x}=a.floating;let m,d;S==="top"||S==="bottom"?(m=S,d=O===(await(i.isRTL==null?void 0:i.isRTL(c.floating))?"start":"end")?"left":"right"):(d=S,m=O==="end"?"top":"bottom");const s=x-b.top-b.bottom,u=C-b.left-b.right,l=Zn(x-b[m],s),h=Zn(C-b[d],u),v=!t.middlewareData.shift;let w=l,j=h;if((r=t.middlewareData.shift)!=null&&r.enabled.x&&(j=u),(n=t.middlewareData.shift)!=null&&n.enabled.y&&(w=s),v&&!O){const k=Ar(b.left,0),A=Ar(b.right,0),M=Ar(b.top,0),D=Ar(b.bottom,0);T?j=C-2*(k!==0||A!==0?k+A:Ar(b.left,b.right)):w=x-2*(M!==0||D!==0?M+D:Ar(b.top,b.bottom))}await f({...t,availableWidth:j,availableHeight:w});const N=await i.getDimensions(c.floating);return C!==N.width||x!==N.height?{reset:{rects:!0}}:{}}}};function Vf(){return typeof window<"u"}function As(e){return bP(e)?(e.nodeName||"").toLowerCase():"#document"}function dn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Co(e){var t;return(t=(bP(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function bP(e){return Vf()?e instanceof Node||e instanceof dn(e).Node:!1}function eo(e){return Vf()?e instanceof Element||e instanceof dn(e).Element:!1}function wo(e){return Vf()?e instanceof HTMLElement||e instanceof dn(e).HTMLElement:!1}function _w(e){return!Vf()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof dn(e).ShadowRoot}const u6=new Set(["inline","contents"]);function Su(e){const{overflow:t,overflowX:r,overflowY:n,display:o}=to(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!u6.has(o)}const c6=new Set(["table","td","th"]);function d6(e){return c6.has(As(e))}const f6=[":popover-open",":modal"];function Uf(e){return f6.some(t=>{try{return e.matches(t)}catch{return!1}})}const p6=["transform","translate","scale","rotate","perspective"],h6=["transform","translate","scale","rotate","perspective","filter"],g6=["paint","layout","strict","content"];function fb(e){const t=pb(),r=eo(e)?to(e):e;return p6.some(n=>r[n]?r[n]!=="none":!1)||(r.containerType?r.containerType!=="normal":!1)||!t&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!t&&(r.filter?r.filter!=="none":!1)||h6.some(n=>(r.willChange||"").includes(n))||g6.some(n=>(r.contain||"").includes(n))}function m6(e){let t=Oa(e);for(;wo(t)&&!ys(t);){if(fb(t))return t;if(Uf(t))return null;t=Oa(t)}return null}function pb(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const b6=new Set(["html","body","#document"]);function ys(e){return b6.has(As(e))}function to(e){return dn(e).getComputedStyle(e)}function Wf(e){return eo(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Oa(e){if(As(e)==="html")return e;const t=e.assignedSlot||e.parentNode||_w(e)&&e.host||Co(e);return _w(t)?t.host:t}function vP(e){const t=Oa(e);return ys(t)?e.ownerDocument?e.ownerDocument.body:e.body:wo(t)&&Su(t)?t:vP(t)}function Lo(e,t,r){var n;t===void 0&&(t=[]),r===void 0&&(r=!0);const o=vP(e),a=o===((n=e.ownerDocument)==null?void 0:n.body),i=dn(o);if(a){const c=sg(i);return t.concat(i,i.visualViewport||[],Su(o)?o:[],c&&r?Lo(c):[])}return t.concat(o,Lo(o,[],r))}function sg(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function yP(e){const t=to(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const o=wo(e),a=o?e.offsetWidth:r,i=o?e.offsetHeight:n,c=Kd(r)!==a||Kd(n)!==i;return c&&(r=a,n=i),{width:r,height:n,$:c}}function hb(e){return eo(e)?e:e.contextElement}function os(e){const t=hb(e);if(!wo(t))return yo(1);const r=t.getBoundingClientRect(),{width:n,height:o,$:a}=yP(t);let i=(a?Kd(r.width):r.width)/n,c=(a?Kd(r.height):r.height)/o;return(!i||!Number.isFinite(i))&&(i=1),(!c||!Number.isFinite(c))&&(c=1),{x:i,y:c}}const v6=yo(0);function xP(e){const t=dn(e);return!pb()||!t.visualViewport?v6:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function y6(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==dn(e)?!1:t}function li(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);const o=e.getBoundingClientRect(),a=hb(e);let i=yo(1);t&&(n?eo(n)&&(i=os(n)):i=os(e));const c=y6(a,r,n)?xP(a):yo(0);let f=(o.left+c.x)/i.x,g=(o.top+c.y)/i.y,b=o.width/i.x,S=o.height/i.y;if(a){const O=dn(a),T=n&&eo(n)?dn(n):n;let C=O,x=sg(C);for(;x&&n&&T!==C;){const m=os(x),d=x.getBoundingClientRect(),s=to(x),u=d.left+(x.clientLeft+parseFloat(s.paddingLeft))*m.x,l=d.top+(x.clientTop+parseFloat(s.paddingTop))*m.y;f*=m.x,g*=m.y,b*=m.x,S*=m.y,f+=u,g+=l,C=dn(x),x=sg(C)}}return vs({width:b,height:S,x:f,y:g})}function $f(e,t){const r=Wf(e).scrollLeft;return t?t.left+r:li(Co(e)).left+r}function wP(e,t){const r=e.getBoundingClientRect(),n=r.left+t.scrollLeft-$f(e,r),o=r.top+t.scrollTop;return{x:n,y:o}}function x6(e){let{elements:t,rect:r,offsetParent:n,strategy:o}=e;const a=o==="fixed",i=Co(n),c=t?Uf(t.floating):!1;if(n===i||c&&a)return r;let f={scrollLeft:0,scrollTop:0},g=yo(1);const b=yo(0),S=wo(n);if((S||!S&&!a)&&((As(n)!=="body"||Su(i))&&(f=Wf(n)),wo(n))){const T=li(n);g=os(n),b.x=T.x+n.clientLeft,b.y=T.y+n.clientTop}const O=i&&!S&&!a?wP(i,f):yo(0);return{width:r.width*g.x,height:r.height*g.y,x:r.x*g.x-f.scrollLeft*g.x+b.x+O.x,y:r.y*g.y-f.scrollTop*g.y+b.y+O.y}}function w6(e){return Array.from(e.getClientRects())}function _6(e){const t=Co(e),r=Wf(e),n=e.ownerDocument.body,o=Ar(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),a=Ar(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let i=-r.scrollLeft+$f(e);const c=-r.scrollTop;return to(n).direction==="rtl"&&(i+=Ar(t.clientWidth,n.clientWidth)-o),{width:o,height:a,x:i,y:c}}const Sw=25;function S6(e,t){const r=dn(e),n=Co(e),o=r.visualViewport;let a=n.clientWidth,i=n.clientHeight,c=0,f=0;if(o){a=o.width,i=o.height;const b=pb();(!b||b&&t==="fixed")&&(c=o.offsetLeft,f=o.offsetTop)}const g=$f(n);if(g<=0){const b=n.ownerDocument,S=b.body,O=getComputedStyle(S),T=b.compatMode==="CSS1Compat"&&parseFloat(O.marginLeft)+parseFloat(O.marginRight)||0,C=Math.abs(n.clientWidth-S.clientWidth-T);C<=Sw&&(a-=C)}else g<=Sw&&(a+=g);return{width:a,height:i,x:c,y:f}}const C6=new Set(["absolute","fixed"]);function T6(e,t){const r=li(e,!0,t==="fixed"),n=r.top+e.clientTop,o=r.left+e.clientLeft,a=wo(e)?os(e):yo(1),i=e.clientWidth*a.x,c=e.clientHeight*a.y,f=o*a.x,g=n*a.y;return{width:i,height:c,x:f,y:g}}function Cw(e,t,r){let n;if(t==="viewport")n=S6(e,r);else if(t==="document")n=_6(Co(e));else if(eo(t))n=T6(t,r);else{const o=xP(e);n={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return vs(n)}function _P(e,t){const r=Oa(e);return r===t||!eo(r)||ys(r)?!1:to(r).position==="fixed"||_P(r,t)}function O6(e,t){const r=t.get(e);if(r)return r;let n=Lo(e,[],!1).filter(c=>eo(c)&&As(c)!=="body"),o=null;const a=to(e).position==="fixed";let i=a?Oa(e):e;for(;eo(i)&&!ys(i);){const c=to(i),f=fb(i);!f&&c.position==="fixed"&&(o=null),(a?!f&&!o:!f&&c.position==="static"&&!!o&&C6.has(o.position)||Su(i)&&!f&&_P(e,i))?n=n.filter(b=>b!==i):o=c,i=Oa(i)}return t.set(e,n),n}function P6(e){let{element:t,boundary:r,rootBoundary:n,strategy:o}=e;const i=[...r==="clippingAncestors"?Uf(t)?[]:O6(t,this._c):[].concat(r),n],c=i[0],f=i.reduce((g,b)=>{const S=Cw(t,b,o);return g.top=Ar(S.top,g.top),g.right=Zn(S.right,g.right),g.bottom=Zn(S.bottom,g.bottom),g.left=Ar(S.left,g.left),g},Cw(t,c,o));return{width:f.right-f.left,height:f.bottom-f.top,x:f.left,y:f.top}}function k6(e){const{width:t,height:r}=yP(e);return{width:t,height:r}}function N6(e,t,r){const n=wo(t),o=Co(t),a=r==="fixed",i=li(e,!0,a,t);let c={scrollLeft:0,scrollTop:0};const f=yo(0);function g(){f.x=$f(o)}if(n||!n&&!a)if((As(t)!=="body"||Su(o))&&(c=Wf(t)),n){const T=li(t,!0,a,t);f.x=T.x+t.clientLeft,f.y=T.y+t.clientTop}else o&&g();a&&!n&&o&&g();const b=o&&!n&&!a?wP(o,c):yo(0),S=i.left+c.scrollLeft-f.x-b.x,O=i.top+c.scrollTop-f.y-b.y;return{x:S,y:O,width:i.width,height:i.height}}function wh(e){return to(e).position==="static"}function Tw(e,t){if(!wo(e)||to(e).position==="fixed")return null;if(t)return t(e);let r=e.offsetParent;return Co(e)===r&&(r=r.ownerDocument.body),r}function SP(e,t){const r=dn(e);if(Uf(e))return r;if(!wo(e)){let o=Oa(e);for(;o&&!ys(o);){if(eo(o)&&!wh(o))return o;o=Oa(o)}return r}let n=Tw(e,t);for(;n&&d6(n)&&wh(n);)n=Tw(n,t);return n&&ys(n)&&wh(n)&&!fb(n)?r:n||m6(e)||r}const E6=async function(e){const t=this.getOffsetParent||SP,r=this.getDimensions,n=await r(e.floating);return{reference:N6(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function j6(e){return to(e).direction==="rtl"}const CP={convertOffsetParentRelativeRectToViewportRelativeRect:x6,getDocumentElement:Co,getClippingRect:P6,getOffsetParent:SP,getElementRects:E6,getClientRects:w6,getDimensions:k6,getScale:os,isElement:eo,isRTL:j6};function TP(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function A6(e,t){let r=null,n;const o=Co(e);function a(){var c;clearTimeout(n),(c=r)==null||c.disconnect(),r=null}function i(c,f){c===void 0&&(c=!1),f===void 0&&(f=1),a();const g=e.getBoundingClientRect(),{left:b,top:S,width:O,height:T}=g;if(c||t(),!O||!T)return;const C=xc(S),x=xc(o.clientWidth-(b+O)),m=xc(o.clientHeight-(S+T)),d=xc(b),u={rootMargin:-C+"px "+-x+"px "+-m+"px "+-d+"px",threshold:Ar(0,Zn(1,f))||1};let l=!0;function h(v){const w=v[0].intersectionRatio;if(w!==f){if(!l)return i();w?i(!1,w):n=setTimeout(()=>{i(!1,1e-7)},1e3)}w===1&&!TP(g,e.getBoundingClientRect())&&i(),l=!1}try{r=new IntersectionObserver(h,{...u,root:o.ownerDocument})}catch{r=new IntersectionObserver(h,u)}r.observe(e)}return i(!0),a}function R6(e,t,r,n){n===void 0&&(n={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:f=!1}=n,g=hb(e),b=o||a?[...g?Lo(g):[],...Lo(t)]:[];b.forEach(d=>{o&&d.addEventListener("scroll",r,{passive:!0}),a&&d.addEventListener("resize",r)});const S=g&&c?A6(g,r):null;let O=-1,T=null;i&&(T=new ResizeObserver(d=>{let[s]=d;s&&s.target===g&&T&&(T.unobserve(t),cancelAnimationFrame(O),O=requestAnimationFrame(()=>{var u;(u=T)==null||u.observe(t)})),r()}),g&&!f&&T.observe(g),T.observe(t));let C,x=f?li(e):null;f&&m();function m(){const d=li(e);x&&!TP(x,d)&&r(),x=d,C=requestAnimationFrame(m)}return r(),()=>{var d;b.forEach(s=>{o&&s.removeEventListener("scroll",r),a&&s.removeEventListener("resize",r)}),S==null||S(),(d=T)==null||d.disconnect(),T=null,f&&cancelAnimationFrame(C)}}const Qc=si,OP=a6,M6=JF,I6=i6,D6=e6,L6=l6,F6=t6,Ow=XF,z6=n6,B6=s6,PP=(e,t,r)=>{const n=new Map,o={platform:CP,...r},a={...o.platform,_c:n};return QF(e,t,{...o,platform:a})},V6=e=>{const{element:t,padding:r}=e;function n(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return n(t)?t.current!=null?Ow({element:t.current,padding:r}).fn(o):{}:t?Ow({element:t,padding:r}).fn(o):{}}}};var Xc=typeof document<"u"?P.useLayoutEffect:P.useEffect;function Xd(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!Xd(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=r;n--!==0;){const a=o[n];if(!(a==="_owner"&&e.$$typeof)&&!Xd(e[a],t[a]))return!1}return!0}return e!==e&&t!==t}function Pw(e){const t=P.useRef(e);return Xc(()=>{t.current=e}),t}function U6(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:n=[],platform:o,whileElementsMounted:a,open:i}=e,[c,f]=P.useState({x:null,y:null,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[g,b]=P.useState(n);Xd(g,n)||b(n);const S=P.useRef(null),O=P.useRef(null),T=P.useRef(c),C=Pw(a),x=Pw(o),[m,d]=P.useState(null),[s,u]=P.useState(null),l=P.useCallback(k=>{S.current!==k&&(S.current=k,d(k))},[]),h=P.useCallback(k=>{O.current!==k&&(O.current=k,u(k))},[]),v=P.useCallback(()=>{if(!S.current||!O.current)return;const k={placement:t,strategy:r,middleware:g};x.current&&(k.platform=x.current),PP(S.current,O.current,k).then(A=>{const M={...A,isPositioned:!0};w.current&&!Xd(T.current,M)&&(T.current=M,Uo.flushSync(()=>{f(M)}))})},[g,t,r,x]);Xc(()=>{i===!1&&T.current.isPositioned&&(T.current.isPositioned=!1,f(k=>({...k,isPositioned:!1})))},[i]);const w=P.useRef(!1);Xc(()=>(w.current=!0,()=>{w.current=!1}),[]),Xc(()=>{if(m&&s){if(C.current)return C.current(m,s,v);v()}},[m,s,v,C]);const j=P.useMemo(()=>({reference:S,floating:O,setReference:l,setFloating:h}),[l,h]),N=P.useMemo(()=>({reference:m,floating:s}),[m,s]);return P.useMemo(()=>({...c,update:v,refs:j,elements:N,reference:l,floating:h}),[c,v,j,N,l,h])}var Jt=typeof document<"u"?P.useLayoutEffect:P.useEffect;let _h=!1,W6=0;const kw=()=>"floating-ui-"+W6++;function $6(){const[e,t]=P.useState(()=>_h?kw():void 0);return Jt(()=>{e==null&&t(kw())},[]),P.useEffect(()=>{_h||(_h=!0)},[]),e}const H6=wg["useId".toString()],iu=H6||$6;function kP(){const e=new Map;return{emit(t,r){var n;(n=e.get(t))==null||n.forEach(o=>o(r))},on(t,r){e.set(t,[...e.get(t)||[],r])},off(t,r){e.set(t,(e.get(t)||[]).filter(n=>n!==r))}}}const NP=P.createContext(null),EP=P.createContext(null),Rs=()=>{var e;return((e=P.useContext(NP))==null?void 0:e.id)||null},vi=()=>P.useContext(EP),q6=e=>{const t=iu(),r=vi(),n=Rs(),o=e||n;return Jt(()=>{const a={id:t,parentId:o};return r==null||r.addNode(a),()=>{r==null||r.removeNode(a)}},[r,t,o]),t},G6=e=>{let{children:t,id:r}=e;const n=Rs();return P.createElement(NP.Provider,{value:P.useMemo(()=>({id:r,parentId:n}),[r,n])},t)},K6=e=>{let{children:t}=e;const r=P.useRef([]),n=P.useCallback(i=>{r.current=[...r.current,i]},[]),o=P.useCallback(i=>{r.current=r.current.filter(c=>c!==i)},[]),a=P.useState(()=>kP())[0];return P.createElement(EP.Provider,{value:P.useMemo(()=>({nodesRef:r,addNode:n,removeNode:o,events:a}),[r,n,o,a])},t)};function Yr(e){return(e==null?void 0:e.ownerDocument)||document}function gb(){const e=navigator.userAgentData;return e!=null&&e.platform?e.platform:navigator.platform}function jP(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(t=>{let{brand:r,version:n}=t;return r+"/"+n}).join(" "):navigator.userAgent}function mb(e){return Yr(e).defaultView||window}function On(e){return e?e instanceof mb(e).Element:!1}function ui(e){return e?e instanceof mb(e).HTMLElement:!1}function Y6(e){if(typeof ShadowRoot>"u")return!1;const t=mb(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function AP(e){if(e.mozInputSource===0&&e.isTrusted)return!0;const t=/Android/i;return(t.test(gb())||t.test(jP()))&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function RP(e){return e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType!=="mouse"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0}function lg(){return/apple/i.test(navigator.vendor)}function MP(){return gb().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function Zd(e,t){const r=["mouse","pen"];return t||r.push("",void 0),r.includes(e)}function Pn(e){const t=P.useRef(e);return Jt(()=>{t.current=e}),t}const Nw="data-floating-ui-safe-polygon";function Zc(e,t,r){return r&&!Zd(r)?0:typeof e=="number"?e:e==null?void 0:e[t]}const Q6=function(e,t){let{enabled:r=!0,delay:n=0,handleClose:o=null,mouseOnly:a=!1,restMs:i=0,move:c=!0}=t===void 0?{}:t;const{open:f,onOpenChange:g,dataRef:b,events:S,elements:{domReference:O,floating:T},refs:C}=e,x=vi(),m=Rs(),d=Pn(o),s=Pn(n),u=P.useRef(),l=P.useRef(),h=P.useRef(),v=P.useRef(),w=P.useRef(!0),j=P.useRef(!1),N=P.useRef(()=>{}),k=P.useCallback(()=>{var L;const B=(L=b.current.openEvent)==null?void 0:L.type;return(B==null?void 0:B.includes("mouse"))&&B!=="mousedown"},[b]);P.useEffect(()=>{if(!r)return;function L(){clearTimeout(l.current),clearTimeout(v.current),w.current=!0}return S.on("dismiss",L),()=>{S.off("dismiss",L)}},[r,S]),P.useEffect(()=>{if(!r||!d.current||!f)return;function L(){k()&&g(!1)}const B=Yr(T).documentElement;return B.addEventListener("mouseleave",L),()=>{B.removeEventListener("mouseleave",L)}},[T,f,g,r,d,b,k]);const A=P.useCallback(function(L){L===void 0&&(L=!0);const B=Zc(s.current,"close",u.current);B&&!h.current?(clearTimeout(l.current),l.current=setTimeout(()=>g(!1),B)):L&&(clearTimeout(l.current),g(!1))},[s,g]),M=P.useCallback(()=>{N.current(),h.current=void 0},[]),D=P.useCallback(()=>{if(j.current){const L=Yr(C.floating.current).body;L.style.pointerEvents="",L.removeAttribute(Nw),j.current=!1}},[C]);return P.useEffect(()=>{if(!r)return;function L(){return b.current.openEvent?["click","mousedown"].includes(b.current.openEvent.type):!1}function B(q){if(clearTimeout(l.current),w.current=!1,a&&!Zd(u.current)||i>0&&Zc(s.current,"open")===0)return;b.current.openEvent=q;const z=Zc(s.current,"open",u.current);z?l.current=setTimeout(()=>{g(!0)},z):g(!0)}function U(q){if(L())return;N.current();const z=Yr(T);if(clearTimeout(v.current),d.current){clearTimeout(l.current),h.current=d.current({...e,tree:x,x:q.clientX,y:q.clientY,onClose(){D(),M(),A()}});const $=h.current;z.addEventListener("mousemove",$),N.current=()=>{z.removeEventListener("mousemove",$)};return}A()}function Y(q){L()||d.current==null||d.current({...e,tree:x,x:q.clientX,y:q.clientY,onClose(){M(),A()}})(q)}if(On(O)){const q=O;return f&&q.addEventListener("mouseleave",Y),T==null||T.addEventListener("mouseleave",Y),c&&q.addEventListener("mousemove",B,{once:!0}),q.addEventListener("mouseenter",B),q.addEventListener("mouseleave",U),()=>{f&&q.removeEventListener("mouseleave",Y),T==null||T.removeEventListener("mouseleave",Y),c&&q.removeEventListener("mousemove",B),q.removeEventListener("mouseenter",B),q.removeEventListener("mouseleave",U)}}},[O,T,r,e,a,i,c,A,M,D,g,f,x,s,d,b]),Jt(()=>{var L;if(r&&f&&(L=d.current)!=null&&L.__options.blockPointerEvents&&k()){const Y=Yr(T).body;if(Y.setAttribute(Nw,""),Y.style.pointerEvents="none",j.current=!0,On(O)&&T){var B,U;const q=O,z=x==null||(B=x.nodesRef.current.find($=>$.id===m))==null||(U=B.context)==null?void 0:U.elements.floating;return z&&(z.style.pointerEvents=""),q.style.pointerEvents="auto",T.style.pointerEvents="auto",()=>{q.style.pointerEvents="",T.style.pointerEvents=""}}}},[r,f,m,T,O,x,d,b,k]),Jt(()=>{f||(u.current=void 0,M(),D())},[f,M,D]),P.useEffect(()=>()=>{M(),clearTimeout(l.current),clearTimeout(v.current),D()},[r,M,D]),P.useMemo(()=>{if(!r)return{};function L(B){u.current=B.pointerType}return{reference:{onPointerDown:L,onPointerEnter:L,onMouseMove(){f||i===0||(clearTimeout(v.current),v.current=setTimeout(()=>{w.current||g(!0)},i))}},floating:{onMouseEnter(){clearTimeout(l.current)},onMouseLeave(){S.emit("dismiss",{type:"mouseLeave",data:{returnFocus:!1}}),A(!1)}}}},[S,r,i,f,g,A])},IP=P.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:()=>{},setState:()=>{},isInstantPhase:!1}),DP=()=>P.useContext(IP),X6=e=>{let{children:t,delay:r,timeoutMs:n=0}=e;const[o,a]=P.useReducer((f,g)=>({...f,...g}),{delay:r,timeoutMs:n,initialDelay:r,currentId:null,isInstantPhase:!1}),i=P.useRef(null),c=P.useCallback(f=>{a({currentId:f})},[]);return Jt(()=>{o.currentId?i.current===null?i.current=o.currentId:a({isInstantPhase:!0}):(a({isInstantPhase:!1}),i.current=null)},[o.currentId]),P.createElement(IP.Provider,{value:P.useMemo(()=>({...o,setState:a,setCurrentId:c}),[o,a,c])},t)},Z6=(e,t)=>{let{open:r,onOpenChange:n}=e,{id:o}=t;const{currentId:a,setCurrentId:i,initialDelay:c,setState:f,timeoutMs:g}=DP();P.useEffect(()=>{a&&(f({delay:{open:1,close:Zc(c,"close")}}),a!==o&&n(!1))},[o,n,f,a,c]),P.useEffect(()=>{function b(){n(!1),f({delay:c,currentId:null})}if(!r&&a===o)if(g){const S=window.setTimeout(b,g);return()=>{clearTimeout(S)}}else b()},[r,f,a,o,n,c,g]),P.useEffect(()=>{r&&i(o)},[r,i,o])};function su(){return su=Object.assign||function(e){for(var t=1;te==null?void 0:e.focus({preventScroll:r});o?a():Ew=requestAnimationFrame(a)}function J6(e,t){var r;let n=[],o=(r=e.find(a=>a.id===t))==null?void 0:r.parentId;for(;o;){const a=e.find(i=>i.id===o);o=a==null?void 0:a.parentId,a&&(n=n.concat(a))}return n}function Al(e,t){let r=e.filter(o=>{var a;return o.parentId===t&&((a=o.context)==null?void 0:a.open)})||[],n=r;for(;n.length;)n=e.filter(o=>{var a;return(a=n)==null?void 0:a.some(i=>{var c;return o.parentId===i.id&&((c=o.context)==null?void 0:c.open)})})||[],r=r.concat(n);return r}function Hf(e){return"composedPath"in e?e.composedPath()[0]:e.target}const ez="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";function LP(e){return ui(e)&&e.matches(ez)}function wn(e){e.preventDefault(),e.stopPropagation()}const Jd=()=>({getShadowRoot:!0,displayCheck:typeof ResizeObserver=="function"&&ResizeObserver.toString().includes("[native code]")?"full":"none"});function FP(e,t){const r=Gd(e,Jd());t==="prev"&&r.reverse();const n=r.indexOf(ci(Yr(e)));return r.slice(n+1)[0]}function zP(){return FP(document.body,"next")}function BP(){return FP(document.body,"prev")}function Rl(e,t){const r=t||e.currentTarget,n=e.relatedTarget;return!n||!Hr(r,n)}function tz(e){Gd(e,Jd()).forEach(r=>{r.dataset.tabindex=r.getAttribute("tabindex")||"",r.setAttribute("tabindex","-1")})}function rz(e){e.querySelectorAll("[data-tabindex]").forEach(r=>{const n=r.dataset.tabindex;delete r.dataset.tabindex,n?r.setAttribute("tabindex",n):r.removeAttribute("tabindex")})}const nz=wg["useInsertionEffect".toString()],oz=nz||(e=>e());function Ms(e){const t=P.useRef(()=>{});return oz(()=>{t.current=e}),P.useCallback(function(){for(var r=arguments.length,n=new Array(r),o=0;o(lg()&&a("button"),document.addEventListener("keydown",jw),()=>{document.removeEventListener("keydown",jw)}),[]),P.createElement("span",su({},t,{ref:r,tabIndex:0,role:o,"aria-hidden":o?void 0:!0,"data-floating-ui-focus-guard":"",style:bb,onFocus:i=>{lg()&&MP()&&!az(i)?(i.persist(),vb=window.setTimeout(()=>{n(i)},50)):n(i)}}))}),VP=P.createContext(null),UP=function(e){let{id:t,enabled:r=!0}=e===void 0?{}:e;const[n,o]=P.useState(null),a=iu(),i=WP();return Jt(()=>{if(!r)return;const c=t?document.getElementById(t):null;if(c)c.setAttribute("data-floating-ui-portal",""),o(c);else{const f=document.createElement("div");t!==""&&(f.id=t||a),f.setAttribute("data-floating-ui-portal",""),o(f);const g=(i==null?void 0:i.portalNode)||document.body;return g.appendChild(f),()=>{g.removeChild(f)}}},[t,i,a,r]),n},iz=e=>{let{children:t,id:r,root:n=null,preserveTabOrder:o=!0}=e;const a=UP({id:r,enabled:!n}),[i,c]=P.useState(null),f=P.useRef(null),g=P.useRef(null),b=P.useRef(null),S=P.useRef(null),O=!!i&&!i.modal&&!!(n||a)&&o;return P.useEffect(()=>{if(!a||!o||i!=null&&i.modal)return;function T(C){a&&Rl(C)&&(C.type==="focusin"?rz:tz)(a)}return a.addEventListener("focusin",T,!0),a.addEventListener("focusout",T,!0),()=>{a.removeEventListener("focusin",T,!0),a.removeEventListener("focusout",T,!0)}},[a,o,i==null?void 0:i.modal]),P.createElement(VP.Provider,{value:P.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:f,afterOutsideRef:g,beforeInsideRef:b,afterInsideRef:S,portalNode:a,setFocusManagerState:c}),[o,a])},O&&a&&P.createElement(ef,{"data-type":"outside",ref:f,onFocus:T=>{if(Rl(T,a)){var C;(C=b.current)==null||C.focus()}else{const x=BP()||(i==null?void 0:i.refs.domReference.current);x==null||x.focus()}}}),O&&a&&P.createElement("span",{"aria-owns":a.id,style:bb}),n?Uo.createPortal(t,n):a?Uo.createPortal(t,a):null,O&&a&&P.createElement(ef,{"data-type":"outside",ref:g,onFocus:T=>{if(Rl(T,a)){var C;(C=S.current)==null||C.focus()}else{const x=zP()||(i==null?void 0:i.refs.domReference.current);x==null||x.focus(),i!=null&&i.closeOnFocusOut&&(i==null||i.onOpenChange(!1))}}}))},WP=()=>P.useContext(VP),sz=P.forwardRef(function(t,r){return P.createElement("button",su({},t,{type:"button",ref:r,tabIndex:-1,style:bb}))});function lz(e){let{context:t,children:r,order:n=["content"],guards:o=!0,initialFocus:a=0,returnFocus:i=!0,modal:c=!0,visuallyHiddenDismiss:f=!1,closeOnFocusOut:g=!0}=e;const{refs:b,nodeId:S,onOpenChange:O,events:T,dataRef:C,elements:{domReference:x,floating:m}}=t,d=Pn(n),s=vi(),u=WP(),[l,h]=P.useState(null),v=typeof a=="number"&&a<0,w=P.useRef(null),j=P.useRef(null),N=P.useRef(!1),k=P.useRef(null),A=P.useRef(!1),M=u!=null,D=x&&x.getAttribute("role")==="combobox"&&LP(x),L=P.useCallback(function(q){return q===void 0&&(q=m),q?Gd(q,Jd()):[]},[m]),B=P.useCallback(q=>{const z=L(q);return d.current.map($=>x&&$==="reference"?x:m&&$==="floating"?m:z).filter(Boolean).flat()},[x,m,d,L]);P.useEffect(()=>{if(!c)return;function q($){if($.key==="Tab"){L().length===0&&!D&&wn($);const K=B(),X=Hf($);d.current[0]==="reference"&&X===x&&(wn($),$.shiftKey?oa(K[K.length-1]):oa(K[1])),d.current[1]==="floating"&&X===m&&$.shiftKey&&(wn($),oa(K[0]))}}const z=Yr(m);return z.addEventListener("keydown",q),()=>{z.removeEventListener("keydown",q)}},[x,m,c,d,b,D,L,B]),P.useEffect(()=>{if(!g)return;function q(){A.current=!0,setTimeout(()=>{A.current=!1})}function z($){const K=$.relatedTarget,X=!(Hr(x,K)||Hr(m,K)||Hr(K,m)||Hr(u==null?void 0:u.portalNode,K)||K!=null&&K.hasAttribute("data-floating-ui-focus-guard")||s&&(Al(s.nodesRef.current,S).find(te=>{var me,de;return Hr((me=te.context)==null?void 0:me.elements.floating,K)||Hr((de=te.context)==null?void 0:de.elements.domReference,K)})||J6(s.nodesRef.current,S).find(te=>{var me,de;return((me=te.context)==null?void 0:me.elements.floating)===K||((de=te.context)==null?void 0:de.elements.domReference)===K})));K&&X&&!A.current&&K!==k.current&&(N.current=!0,setTimeout(()=>O(!1)))}if(m&&ui(x))return x.addEventListener("focusout",z),x.addEventListener("pointerdown",q),!c&&m.addEventListener("focusout",z),()=>{x.removeEventListener("focusout",z),x.removeEventListener("pointerdown",q),!c&&m.removeEventListener("focusout",z)}},[x,m,c,S,s,u,O,g]),P.useEffect(()=>{var q;const z=Array.from((u==null||(q=u.portalNode)==null?void 0:q.querySelectorAll("[data-floating-ui-portal]"))||[]);function $(){return[w.current,j.current].filter(Boolean)}if(m&&c){const K=[m,...z,...$()],X=_F(d.current.includes("reference")||D?K.concat(x||[]):K);return()=>{X()}}},[x,m,c,d,u,D]),P.useEffect(()=>{if(c&&!o&&m){const q=[],z=Jd(),$=Gd(Yr(m).body,z),K=B(),X=$.filter(te=>!K.includes(te));return X.forEach((te,me)=>{q[me]=te.getAttribute("tabindex"),te.setAttribute("tabindex","-1")}),()=>{X.forEach((te,me)=>{const de=q[me];de==null?te.removeAttribute("tabindex"):te.setAttribute("tabindex",de)})}}},[m,c,o,B]),Jt(()=>{if(!m)return;const q=Yr(m);let z=i,$=!1;const K=ci(q),X=C.current;k.current=K;const te=B(m),me=(typeof a=="number"?te[a]:a.current)||m;!v&&oa(me,{preventScroll:me===m});function de(ee){if(ee.type==="escapeKey"&&b.domReference.current&&(k.current=b.domReference.current),["referencePress","escapeKey"].includes(ee.type))return;const Se=ee.data.returnFocus;typeof Se=="object"?(z=!0,$=Se.preventScroll):z=Se}return T.on("dismiss",de),()=>{if(T.off("dismiss",de),Hr(m,ci(q))&&b.domReference.current&&(k.current=b.domReference.current),z&&ui(k.current)&&!N.current)if(!b.domReference.current||A.current)oa(k.current,{cancelPrevious:!1,preventScroll:$});else{var ee;X.__syncReturnFocus=!0,(ee=k.current)==null||ee.focus({preventScroll:$}),setTimeout(()=>{delete X.__syncReturnFocus})}}},[m,B,a,i,C,b,T,v]),Jt(()=>{if(u)return u.setFocusManagerState({...t,modal:c,closeOnFocusOut:g}),()=>{u.setFocusManagerState(null)}},[u,c,g,t]),Jt(()=>{if(v||!m)return;function q(){h(L().length)}if(q(),typeof MutationObserver=="function"){const z=new MutationObserver(q);return z.observe(m,{childList:!0,subtree:!0}),()=>{z.disconnect()}}},[m,L,v,b]);const U=o&&(M||c)&&!D;function Y(q){return f&&c?P.createElement(sz,{ref:q==="start"?w:j,onClick:()=>O(!1)},typeof f=="string"?f:"Dismiss"):null}return P.createElement(P.Fragment,null,U&&P.createElement(ef,{"data-type":"inside",ref:u==null?void 0:u.beforeInsideRef,onFocus:q=>{if(c){const $=B();oa(n[0]==="reference"?$[0]:$[$.length-1])}else if(u!=null&&u.preserveTabOrder&&u.portalNode)if(N.current=!1,Rl(q,u.portalNode)){const $=zP()||x;$==null||$.focus()}else{var z;(z=u.beforeOutsideRef.current)==null||z.focus()}}}),D?null:Y("start"),P.cloneElement(r,l===0||n.includes("floating")?{tabIndex:0}:{}),Y("end"),U&&P.createElement(ef,{"data-type":"inside",ref:u==null?void 0:u.afterInsideRef,onFocus:q=>{if(c)oa(B()[0]);else if(u!=null&&u.preserveTabOrder&&u.portalNode)if(N.current=!0,Rl(q,u.portalNode)){const $=BP()||x;$==null||$.focus()}else{var z;(z=u.afterOutsideRef.current)==null||z.focus()}}}))}const wc="data-floating-ui-scroll-lock",uz=P.forwardRef(function(t,r){let{lockScroll:n=!1,...o}=t;return Jt(()=>{var a,i;if(!n||document.body.hasAttribute(wc))return;document.body.setAttribute(wc,"");const g=Math.round(document.documentElement.getBoundingClientRect().left)+document.documentElement.scrollLeft?"paddingLeft":"paddingRight",b=window.innerWidth-document.documentElement.clientWidth;if(!/iP(hone|ad|od)|iOS/.test(gb()))return Object.assign(document.body.style,{overflow:"hidden",[g]:b+"px"}),()=>{document.body.removeAttribute(wc),Object.assign(document.body.style,{overflow:"",[g]:""})};const S=((a=window.visualViewport)==null?void 0:a.offsetLeft)||0,O=((i=window.visualViewport)==null?void 0:i.offsetTop)||0,T=window.pageXOffset,C=window.pageYOffset;return Object.assign(document.body.style,{position:"fixed",overflow:"hidden",top:-(C-Math.floor(O))+"px",left:-(T-Math.floor(S))+"px",right:"0",[g]:b+"px"}),()=>{Object.assign(document.body.style,{position:"",overflow:"",top:"",left:"",right:"",[g]:""}),document.body.removeAttribute(wc),window.scrollTo(T,C)}},[n]),P.createElement("div",su({ref:r},o,{style:{position:"fixed",overflow:"auto",top:0,right:0,bottom:0,left:0,...o.style}}))});function Aw(e){return ui(e.target)&&e.target.tagName==="BUTTON"}function Rw(e){return LP(e)}const cz=function(e,t){let{open:r,onOpenChange:n,dataRef:o,elements:{domReference:a}}=e,{enabled:i=!0,event:c="click",toggle:f=!0,ignoreMouse:g=!1,keyboardHandlers:b=!0}=t===void 0?{}:t;const S=P.useRef();return P.useMemo(()=>i?{reference:{onPointerDown(O){S.current=O.pointerType},onMouseDown(O){O.button===0&&(Zd(S.current,!0)&&g||c!=="click"&&(r?f&&(!o.current.openEvent||o.current.openEvent.type==="mousedown")&&n(!1):(O.preventDefault(),n(!0)),o.current.openEvent=O.nativeEvent))},onClick(O){if(!o.current.__syncReturnFocus){if(c==="mousedown"&&S.current){S.current=void 0;return}Zd(S.current,!0)&&g||(r?f&&(!o.current.openEvent||o.current.openEvent.type==="click")&&n(!1):n(!0),o.current.openEvent=O.nativeEvent)}},onKeyDown(O){S.current=void 0,b&&(Aw(O)||(O.key===" "&&!Rw(a)&&O.preventDefault(),O.key==="Enter"&&(r?f&&n(!1):n(!0))))},onKeyUp(O){b&&(Aw(O)||Rw(a)||O.key===" "&&(r?f&&n(!1):n(!0)))}}}:{},[i,o,c,g,b,a,f,r,n])};function Jc(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);const r=e;return r.target!=null&&t.contains(r.target)}const dz={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},fz={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},pz=function(e){var t,r;return e===void 0&&(e=!0),{escapeKeyBubbles:typeof e=="boolean"?e:(t=e.escapeKey)!=null?t:!0,outsidePressBubbles:typeof e=="boolean"?e:(r=e.outsidePress)!=null?r:!0}},hz=function(e,t){let{open:r,onOpenChange:n,events:o,nodeId:a,elements:{reference:i,domReference:c,floating:f},dataRef:g}=e,{enabled:b=!0,escapeKey:S=!0,outsidePress:O=!0,outsidePressEvent:T="pointerdown",referencePress:C=!1,referencePressEvent:x="pointerdown",ancestorScroll:m=!1,bubbles:d=!0}=t===void 0?{}:t;const s=vi(),u=Rs()!=null,l=Ms(typeof O=="function"?O:()=>!1),h=typeof O=="function"?l:O,v=P.useRef(!1),{escapeKeyBubbles:w,outsidePressBubbles:j}=pz(d);return P.useEffect(()=>{if(!r||!b)return;g.current.__escapeKeyBubbles=w,g.current.__outsidePressBubbles=j;function N(L){if(L.key==="Escape"){const B=s?Al(s.nodesRef.current,a):[];if(B.length>0){let U=!0;if(B.forEach(Y=>{var q;if((q=Y.context)!=null&&q.open&&!Y.context.dataRef.current.__escapeKeyBubbles){U=!1;return}}),!U)return}o.emit("dismiss",{type:"escapeKey",data:{returnFocus:{preventScroll:!1}}}),n(!1)}}function k(L){const B=v.current;if(v.current=!1,B||typeof h=="function"&&!h(L))return;const U=Hf(L);if(ui(U)&&f){const z=f.ownerDocument.defaultView||window,$=U.scrollWidth>U.clientWidth,K=U.scrollHeight>U.clientHeight;let X=K&&L.offsetX>U.clientWidth;if(K&&z.getComputedStyle(U).direction==="rtl"&&(X=L.offsetX<=U.offsetWidth-U.clientWidth),X||$&&L.offsetY>U.clientHeight)return}const Y=s&&Al(s.nodesRef.current,a).some(z=>{var $;return Jc(L,($=z.context)==null?void 0:$.elements.floating)});if(Jc(L,f)||Jc(L,c)||Y)return;const q=s?Al(s.nodesRef.current,a):[];if(q.length>0){let z=!0;if(q.forEach($=>{var K;if((K=$.context)!=null&&K.open&&!$.context.dataRef.current.__outsidePressBubbles){z=!1;return}}),!z)return}o.emit("dismiss",{type:"outsidePress",data:{returnFocus:u?{preventScroll:!0}:AP(L)||RP(L)}}),n(!1)}function A(){n(!1)}const M=Yr(f);S&&M.addEventListener("keydown",N),h&&M.addEventListener(T,k);let D=[];return m&&(On(c)&&(D=Lo(c)),On(f)&&(D=D.concat(Lo(f))),!On(i)&&i&&i.contextElement&&(D=D.concat(Lo(i.contextElement)))),D=D.filter(L=>{var B;return L!==((B=M.defaultView)==null?void 0:B.visualViewport)}),D.forEach(L=>{L.addEventListener("scroll",A,{passive:!0})}),()=>{S&&M.removeEventListener("keydown",N),h&&M.removeEventListener(T,k),D.forEach(L=>{L.removeEventListener("scroll",A)})}},[g,f,c,i,S,h,T,o,s,a,r,n,m,b,w,j,u]),P.useEffect(()=>{v.current=!1},[h,T]),P.useMemo(()=>b?{reference:{[dz[x]]:()=>{C&&(o.emit("dismiss",{type:"referencePress",data:{returnFocus:!1}}),n(!1))}},floating:{[fz[T]]:()=>{v.current=!0}}}:{},[b,o,C,T,x,n])},gz=function(e,t){let{open:r,onOpenChange:n,dataRef:o,events:a,refs:i,elements:{floating:c,domReference:f}}=e,{enabled:g=!0,keyboardOnly:b=!0}=t===void 0?{}:t;const S=P.useRef(""),O=P.useRef(!1),T=P.useRef();return P.useEffect(()=>{if(!g)return;const x=Yr(c).defaultView||window;function m(){!r&&ui(f)&&f===ci(Yr(f))&&(O.current=!0)}return x.addEventListener("blur",m),()=>{x.removeEventListener("blur",m)}},[c,f,r,g]),P.useEffect(()=>{if(!g)return;function C(x){(x.type==="referencePress"||x.type==="escapeKey")&&(O.current=!0)}return a.on("dismiss",C),()=>{a.off("dismiss",C)}},[a,g]),P.useEffect(()=>()=>{clearTimeout(T.current)},[]),P.useMemo(()=>g?{reference:{onPointerDown(C){let{pointerType:x}=C;S.current=x,O.current=!!(x&&b)},onMouseLeave(){O.current=!1},onFocus(C){var x;O.current||C.type==="focus"&&((x=o.current.openEvent)==null?void 0:x.type)==="mousedown"&&o.current.openEvent&&Jc(o.current.openEvent,f)||(o.current.openEvent=C.nativeEvent,n(!0))},onBlur(C){O.current=!1;const x=C.relatedTarget,m=On(x)&&x.hasAttribute("data-floating-ui-focus-guard")&&x.getAttribute("data-type")==="outside";T.current=setTimeout(()=>{Hr(i.floating.current,x)||Hr(f,x)||m||n(!1)})}}}:{},[g,b,f,i,o,n])};let Mw=!1;const yb="ArrowUp",qf="ArrowDown",xs="ArrowLeft",Cu="ArrowRight";function _c(e,t,r){return Math.floor(e/t)!==r}function ul(e,t){return t<0||t>=e.current.length}function Er(e,t){let{startingIndex:r=-1,decrement:n=!1,disabledIndices:o,amount:a=1}=t===void 0?{}:t;const i=e.current;let c=r;do{var f,g;c=c+(n?-a:a)}while(c>=0&&c<=i.length-1&&(o?o.includes(c):i[c]==null||(f=i[c])!=null&&f.hasAttribute("disabled")||((g=i[c])==null?void 0:g.getAttribute("aria-disabled"))==="true"));return c}function Gf(e,t,r){switch(e){case"vertical":return t;case"horizontal":return r;default:return t||r}}function Iw(e,t){return Gf(t,e===yb||e===qf,e===xs||e===Cu)}function Sh(e,t,r){return Gf(t,e===qf,r?e===xs:e===Cu)||e==="Enter"||e==" "||e===""}function mz(e,t,r){return Gf(t,r?e===xs:e===Cu,e===qf)}function bz(e,t,r){return Gf(t,r?e===Cu:e===xs,e===yb)}function Ch(e,t){return Er(e,{disabledIndices:t})}function Dw(e,t){return Er(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}const vz=function(e,t){let{open:r,onOpenChange:n,refs:o,elements:{domReference:a}}=e,{listRef:i,activeIndex:c,onNavigate:f=()=>{},enabled:g=!0,selectedIndex:b=null,allowEscape:S=!1,loop:O=!1,nested:T=!1,rtl:C=!1,virtual:x=!1,focusItemOnOpen:m="auto",focusItemOnHover:d=!0,openOnArrowKeyDown:s=!0,disabledIndices:u=void 0,orientation:l="vertical",cols:h=1,scrollItemIntoView:v=!0}=t===void 0?{listRef:{current:[]},activeIndex:null,onNavigate:()=>{}}:t;const w=Rs(),j=vi(),N=Ms(f),k=P.useRef(m),A=P.useRef(b??-1),M=P.useRef(null),D=P.useRef(!0),L=P.useRef(N),B=P.useRef(r),U=P.useRef(!1),Y=P.useRef(!1),q=Pn(u),z=Pn(r),$=Pn(v),[K,X]=P.useState(),te=P.useCallback(function(ee,Se,pe){pe===void 0&&(pe=!1);const fe=ee.current[Se.current];x?X(fe==null?void 0:fe.id):oa(fe,{preventScroll:!0,sync:MP()&&lg()?Mw||U.current:!1}),requestAnimationFrame(()=>{const be=$.current;be&&fe&&(pe||!D.current)&&(fe.scrollIntoView==null||fe.scrollIntoView(typeof be=="boolean"?{block:"nearest",inline:"nearest"}:be))})},[x,$]);Jt(()=>{document.createElement("div").focus({get preventScroll(){return Mw=!0,!1}})},[]),Jt(()=>{g&&(r?k.current&&b!=null&&(Y.current=!0,N(b)):B.current&&(A.current=-1,L.current(null)))},[g,r,b,N]),Jt(()=>{if(g&&r)if(c==null){if(U.current=!1,b!=null)return;B.current&&(A.current=-1,te(i,A)),!B.current&&k.current&&(M.current!=null||k.current===!0&&M.current==null)&&(A.current=M.current==null||Sh(M.current,l,C)||T?Ch(i,q.current):Dw(i,q.current),N(A.current))}else ul(i,c)||(A.current=c,te(i,A,Y.current),Y.current=!1)},[g,r,c,b,T,i,l,C,N,te,q]),Jt(()=>{if(g&&B.current&&!r){var ee,Se;const pe=j==null||(ee=j.nodesRef.current.find(fe=>fe.id===w))==null||(Se=ee.context)==null?void 0:Se.elements.floating;pe&&!Hr(pe,ci(Yr(pe)))&&pe.focus({preventScroll:!0})}},[g,r,j,w]),Jt(()=>{M.current=null,L.current=N,B.current=r});const me=c!=null,de=P.useMemo(()=>{function ee(pe){if(!r)return;const fe=i.current.indexOf(pe);fe!==-1&&N(fe)}return{onFocus(pe){let{currentTarget:fe}=pe;ee(fe)},onClick:pe=>{let{currentTarget:fe}=pe;return fe.focus({preventScroll:!0})},...d&&{onMouseMove(pe){let{currentTarget:fe}=pe;ee(fe)},onPointerLeave(){if(D.current&&(A.current=-1,te(i,A),Uo.flushSync(()=>N(null)),!x)){var pe;(pe=o.floating.current)==null||pe.focus({preventScroll:!0})}}}}},[r,o,te,d,i,N,x]);return P.useMemo(()=>{if(!g)return{};const ee=q.current;function Se(ye){if(D.current=!1,U.current=!0,!z.current&&ye.currentTarget===o.floating.current)return;if(T&&bz(ye.key,l,C)){wn(ye),n(!1),ui(a)&&a.focus();return}const Pe=A.current,Me=Ch(i,ee),ke=Dw(i,ee);if(ye.key==="Home"&&(A.current=Me,N(A.current)),ye.key==="End"&&(A.current=ke,N(A.current)),h>1){const ce=A.current;if(ye.key===yb){if(wn(ye),ce===-1)A.current=ke;else if(A.current=Er(i,{startingIndex:ce,amount:h,decrement:!0,disabledIndices:ee}),O&&(ce-hje?qe:qe-h}ul(i,A.current)&&(A.current=ce),N(A.current)}if(ye.key===qf&&(wn(ye),ce===-1?A.current=Me:(A.current=Er(i,{startingIndex:ce,amount:h,disabledIndices:ee}),O&&ce+h>ke&&(A.current=Er(i,{startingIndex:ce%h-h,amount:h,disabledIndices:ee}))),ul(i,A.current)&&(A.current=ce),N(A.current)),l==="both"){const je=Math.floor(ce/h);ye.key===Cu&&(wn(ye),ce%h!==h-1?(A.current=Er(i,{startingIndex:ce,disabledIndices:ee}),O&&_c(A.current,h,je)&&(A.current=Er(i,{startingIndex:ce-ce%h-1,disabledIndices:ee}))):O&&(A.current=Er(i,{startingIndex:ce-ce%h-1,disabledIndices:ee})),_c(A.current,h,je)&&(A.current=ce)),ye.key===xs&&(wn(ye),ce%h!==0?(A.current=Er(i,{startingIndex:ce,disabledIndices:ee,decrement:!0}),O&&_c(A.current,h,je)&&(A.current=Er(i,{startingIndex:ce+(h-ce%h),decrement:!0,disabledIndices:ee}))):O&&(A.current=Er(i,{startingIndex:ce+(h-ce%h),decrement:!0,disabledIndices:ee})),_c(A.current,h,je)&&(A.current=ce));const He=Math.floor(ke/h)===je;ul(i,A.current)&&(O&&He?A.current=ye.key===xs?ke:Er(i,{startingIndex:ce-ce%h-1,disabledIndices:ee}):A.current=ce),N(A.current);return}}if(Iw(ye.key,l)){if(wn(ye),r&&!x&&ci(ye.currentTarget.ownerDocument)===ye.currentTarget){A.current=Sh(ye.key,l,C)?Me:ke,N(A.current);return}Sh(ye.key,l,C)?O?A.current=Pe>=ke?S&&Pe!==i.current.length?-1:Me:Er(i,{startingIndex:Pe,disabledIndices:ee}):A.current=Math.min(ke,Er(i,{startingIndex:Pe,disabledIndices:ee})):O?A.current=Pe<=Me?S&&Pe!==-1?i.current.length:ke:Er(i,{startingIndex:Pe,decrement:!0,disabledIndices:ee}):A.current=Math.max(Me,Er(i,{startingIndex:Pe,decrement:!0,disabledIndices:ee})),ul(i,A.current)?N(null):N(A.current)}}function pe(ye){m==="auto"&&AP(ye.nativeEvent)&&(k.current=!0)}function fe(ye){k.current=m,m==="auto"&&RP(ye.nativeEvent)&&(k.current=!0)}const be=x&&r&&me&&{"aria-activedescendant":K};return{reference:{...be,onKeyDown(ye){D.current=!1;const Pe=ye.key.indexOf("Arrow")===0;if(x&&r)return Se(ye);if(!r&&!s&&Pe)return;if((Pe||ye.key==="Enter"||ye.key===" "||ye.key==="")&&(M.current=ye.key),T){mz(ye.key,l,C)&&(wn(ye),r?(A.current=Ch(i,ee),N(A.current)):n(!0));return}Iw(ye.key,l)&&(b!=null&&(A.current=b),wn(ye),!r&&s?n(!0):Se(ye),r&&N(A.current))},onFocus(){r&&N(null)},onPointerDown:fe,onMouseDown:pe,onClick:pe},floating:{"aria-orientation":l==="both"?void 0:l,...be,onKeyDown:Se,onPointerMove(){D.current=!0}},item:de}},[a,o,K,q,z,i,g,l,C,x,r,me,T,b,s,S,h,O,m,N,n,de])};function yz(e){return P.useMemo(()=>e.every(t=>t==null)?null:t=>{e.forEach(r=>{typeof r=="function"?r(t):r!=null&&(r.current=t)})},e)}const xz=function(e,t){let{open:r}=e,{enabled:n=!0,role:o="dialog"}=t===void 0?{}:t;const a=iu(),i=iu();return P.useMemo(()=>{const c={id:a,role:o};return n?o==="tooltip"?{reference:{"aria-describedby":r?a:void 0},floating:c}:{reference:{"aria-expanded":r?"true":"false","aria-haspopup":o==="alertdialog"?"dialog":o,"aria-controls":r?a:void 0,...o==="listbox"&&{role:"combobox"},...o==="menu"&&{id:i}},floating:{...c,...o==="menu"&&{"aria-labelledby":i}}}:{}},[n,o,r,a,i])},Lw=e=>e.replace(/[A-Z]+(?![a-z])|[A-Z]/g,(t,r)=>(r?"-":"")+t.toLowerCase());function wz(e,t){const[r,n]=P.useState(e);return e&&!r&&n(!0),P.useEffect(()=>{if(!e){const o=setTimeout(()=>n(!1),t);return()=>clearTimeout(o)}},[e,t]),r}function $P(e,t){let{open:r,elements:{floating:n}}=e,{duration:o=250}=t===void 0?{}:t;const i=(typeof o=="number"?o:o.close)||0,[c,f]=P.useState(!1),[g,b]=P.useState("unmounted"),S=wz(r,i);return Jt(()=>{c&&!S&&b("unmounted")},[c,S]),Jt(()=>{if(n)if(r){b("initial");const O=requestAnimationFrame(()=>{b("open")});return()=>{cancelAnimationFrame(O)}}else f(!0),b("close")},[r,n]),{isMounted:S,status:g}}function _z(e,t){let{initial:r={opacity:0},open:n,close:o,common:a,duration:i=250}=t===void 0?{}:t;const c=e.placement,f=c.split("-")[0],[g,b]=P.useState({}),{isMounted:S,status:O}=$P(e,{duration:i}),T=Pn(r),C=Pn(n),x=Pn(o),m=Pn(a),d=typeof i=="number",s=(d?i:i.open)||0,u=(d?i:i.close)||0;return Jt(()=>{const l={side:f,placement:c},h=T.current,v=x.current,w=C.current,j=m.current,N=typeof h=="function"?h(l):h,k=typeof v=="function"?v(l):v,A=typeof j=="function"?j(l):j,M=(typeof w=="function"?w(l):w)||Object.keys(N).reduce((D,L)=>(D[L]="",D),{});if(O==="initial"&&b(D=>({transitionProperty:D.transitionProperty,...A,...N})),O==="open"&&b({transitionProperty:Object.keys(M).map(Lw).join(","),transitionDuration:s+"ms",...A,...M}),O==="close"){const D=k||N;b({transitionProperty:Object.keys(D).map(Lw).join(","),transitionDuration:u+"ms",...A,...D})}},[f,c,u,x,T,C,m,s,O]),{isMounted:S,styles:g}}const Sz=function(e,t){var r;let{open:n,dataRef:o}=e,{listRef:a,activeIndex:i,onMatch:c=()=>{},enabled:f=!0,findMatch:g=null,resetMs:b=1e3,ignoreKeys:S=[],selectedIndex:O=null}=t===void 0?{listRef:{current:[]},activeIndex:null}:t;const T=P.useRef(),C=P.useRef(""),x=P.useRef((r=O??i)!=null?r:-1),m=P.useRef(null),d=Ms(c),s=Pn(g),u=Pn(S);return Jt(()=>{n&&(clearTimeout(T.current),m.current=null,C.current="")},[n]),Jt(()=>{if(n&&C.current===""){var l;x.current=(l=O??i)!=null?l:-1}},[n,O,i]),P.useMemo(()=>{if(!f)return{};function l(h){const v=Hf(h.nativeEvent);if(On(v)&&(ci(Yr(v))!==h.currentTarget&&v.closest('[role="dialog"],[role="menu"],[role="listbox"],[role="tree"],[role="grid"]')!==h.currentTarget))return;C.current.length>0&&C.current[0]!==" "&&(o.current.typing=!0,h.key===" "&&wn(h));const w=a.current;if(w==null||u.current.includes(h.key)||h.key.length!==1||h.ctrlKey||h.metaKey||h.altKey)return;w.every(D=>{var L,B;return D?((L=D[0])==null?void 0:L.toLocaleLowerCase())!==((B=D[1])==null?void 0:B.toLocaleLowerCase()):!0})&&C.current===h.key&&(C.current="",x.current=m.current),C.current+=h.key,clearTimeout(T.current),T.current=setTimeout(()=>{C.current="",x.current=m.current,o.current.typing=!1},b);const N=x.current,k=[...w.slice((N||0)+1),...w.slice(0,(N||0)+1)],A=s.current?s.current(k,C.current):k.find(D=>(D==null?void 0:D.toLocaleLowerCase().indexOf(C.current.toLocaleLowerCase()))===0),M=A?w.indexOf(A):-1;M!==-1&&(d(M),m.current=M)}return{reference:{onKeyDown:l},floating:{onKeyDown:l}}},[f,o,a,b,u,s,d])};function Fw(e,t){return{...e,rects:{...e.rects,floating:{...e.rects.floating,height:t}}}}const Cz=e=>({name:"inner",options:e,async fn(t){const{listRef:r,overflowRef:n,onFallbackChange:o,offset:a=0,index:i=0,minItemsVisible:c=4,referenceOverflowThreshold:f=0,scrollRef:g,...b}=e,{rects:S,elements:{floating:O}}=t,T=r.current[i];if(!T)return{};const C={...t,...await OP(-T.offsetTop-S.reference.height/2-T.offsetHeight/2-a).fn(t)},x=(g==null?void 0:g.current)||O,m=await Qc(Fw(C,x.scrollHeight),b),d=await Qc(C,{...b,elementContext:"reference"}),s=Math.max(0,m.top),u=C.y+s,l=Math.max(0,x.scrollHeight-s-Math.max(0,m.bottom));return x.style.maxHeight=l+"px",x.scrollTop=s,o&&(x.offsetHeight=-f||d.bottom>=-f?Uo.flushSync(()=>o(!0)):Uo.flushSync(()=>o(!1))),n&&(n.current=await Qc(Fw({...C,y:u},x.offsetHeight),b)),{y:u}}}),Tz=(e,t)=>{let{open:r,elements:n}=e,{enabled:o=!0,overflowRef:a,scrollRef:i,onChange:c}=t;const f=Ms(c),g=P.useRef(!1),b=P.useRef(null),S=P.useRef(null);return P.useEffect(()=>{if(!o)return;function O(C){if(C.ctrlKey||!T||a.current==null)return;const x=C.deltaY,m=a.current.top>=-.5,d=a.current.bottom>=-.5,s=T.scrollHeight-T.clientHeight,u=x<0?-1:1,l=x<0?"max":"min";T.scrollHeight<=T.clientHeight||(!m&&x>0||!d&&x<0?(C.preventDefault(),Uo.flushSync(()=>{f(h=>h+Math[l](x,s*u))})):/firefox/i.test(jP())&&(T.scrollTop+=x))}const T=(i==null?void 0:i.current)||n.floating;if(r&&T)return T.addEventListener("wheel",O),requestAnimationFrame(()=>{b.current=T.scrollTop,a.current!=null&&(S.current={...a.current})}),()=>{b.current=null,S.current=null,T.removeEventListener("wheel",O)}},[o,r,n.floating,a,i,f]),P.useMemo(()=>o?{floating:{onKeyDown(){g.current=!0},onWheel(){g.current=!1},onPointerMove(){g.current=!1},onScroll(){const O=(i==null?void 0:i.current)||n.floating;if(!(!a.current||!O||!g.current)){if(b.current!==null){const T=O.scrollTop-b.current;(a.current.bottom<-.5&&T<-1||a.current.top<-.5&&T>1)&&Uo.flushSync(()=>f(C=>C+T))}requestAnimationFrame(()=>{b.current=O.scrollTop})}}}}:{},[o,a,n.floating,i,f])};function Oz(e,t){const[r,n]=e;let o=!1;const a=t.length;for(let i=0,c=a-1;i=n!=S>=n&&r<=(b-f)*(n-g)/(S-g)+f&&(o=!o)}return o}function Pz(e,t){return e[0]>=t.x&&e[0]<=t.x+t.width&&e[1]>=t.y&&e[1]<=t.y+t.height}function kz(e){let{restMs:t=0,buffer:r=.5,blockPointerEvents:n=!1}=e===void 0?{}:e,o,a=!1,i=!1;const c=f=>{let{x:g,y:b,placement:S,elements:O,onClose:T,nodeId:C,tree:x}=f;return function(d){function s(){clearTimeout(o),T()}if(clearTimeout(o),!O.domReference||!O.floating||S==null||g==null||b==null)return;const{clientX:u,clientY:l}=d,h=[u,l],v=Hf(d),w=d.type==="mouseleave",j=Hr(O.floating,v),N=Hr(O.domReference,v),k=O.domReference.getBoundingClientRect(),A=O.floating.getBoundingClientRect(),M=S.split("-")[0],D=g>A.right-A.width/2,L=b>A.bottom-A.height/2,B=Pz(h,k);if(j&&(i=!0),N&&(i=!1),N&&!w){i=!0;return}if(w&&On(d.relatedTarget)&&Hr(O.floating,d.relatedTarget)||x&&Al(x.nodesRef.current,C).some(z=>{let{context:$}=z;return $==null?void 0:$.open}))return;if(M==="top"&&b>=k.bottom-1||M==="bottom"&&b<=k.top+1||M==="left"&&g>=k.right-1||M==="right"&&g<=k.left+1)return s();let U=[];switch(M){case"top":U=[[A.left,k.top+1],[A.left,A.bottom-1],[A.right,A.bottom-1],[A.right,k.top+1]],a=u>=A.left&&u<=A.right&&l>=A.top&&l<=k.top+1;break;case"bottom":U=[[A.left,A.top+1],[A.left,k.bottom-1],[A.right,k.bottom-1],[A.right,A.top+1]],a=u>=A.left&&u<=A.right&&l>=k.bottom-1&&l<=A.bottom;break;case"left":U=[[A.right-1,A.bottom],[A.right-1,A.top],[k.left+1,A.top],[k.left+1,A.bottom]],a=u>=A.left&&u<=k.left+1&&l>=A.top&&l<=A.bottom;break;case"right":U=[[k.right-1,A.bottom],[k.right-1,A.top],[A.left+1,A.top],[A.left+1,A.bottom]],a=u>=k.right-1&&u<=A.right&&l>=A.top&&l<=A.bottom;break}function Y(z){let[$,K]=z;const X=A.width>k.width,te=A.height>k.height;switch(M){case"top":{const me=[X?$+r/2:D?$+r*4:$-r*4,K+r+1],de=[X?$-r/2:D?$+r*4:$-r*4,K+r+1],ee=[[A.left,D||X?A.bottom-r:A.top],[A.right,D?X?A.bottom-r:A.top:A.bottom-r]];return[me,de,...ee]}case"bottom":{const me=[X?$+r/2:D?$+r*4:$-r*4,K-r],de=[X?$-r/2:D?$+r*4:$-r*4,K-r],ee=[[A.left,D||X?A.top+r:A.bottom],[A.right,D?X?A.top+r:A.bottom:A.top+r]];return[me,de,...ee]}case"left":{const me=[$+r+1,te?K+r/2:L?K+r*4:K-r*4],de=[$+r+1,te?K-r/2:L?K+r*4:K-r*4];return[...[[L||te?A.right-r:A.left,A.top],[L?te?A.right-r:A.left:A.right-r,A.bottom]],me,de]}case"right":{const me=[$-r,te?K+r/2:L?K+r*4:K-r*4],de=[$-r,te?K-r/2:L?K+r*4:K-r*4],ee=[[L||te?A.left+r:A.right,A.top],[L?te?A.left+r:A.right:A.left+r,A.bottom]];return[me,de,...ee]}}}const q=a?U:Y([g,b]);if(!a){if(i&&!B)return s();Oz([u,l],q)?t&&!i&&(o=setTimeout(s,t)):s()}}};return c.__options={blockPointerEvents:n},c}function Nz(e){e===void 0&&(e={});const{open:t=!1,onOpenChange:r,nodeId:n}=e,o=U6(e),a=vi(),i=P.useRef(null),c=P.useRef({}),f=P.useState(()=>kP())[0],[g,b]=P.useState(null),S=P.useCallback(d=>{const s=On(d)?{getBoundingClientRect:()=>d.getBoundingClientRect(),contextElement:d}:d;o.refs.setReference(s)},[o.refs]),O=P.useCallback(d=>{(On(d)||d===null)&&(i.current=d,b(d)),(On(o.refs.reference.current)||o.refs.reference.current===null||d!==null&&!On(d))&&o.refs.setReference(d)},[o.refs]),T=P.useMemo(()=>({...o.refs,setReference:O,setPositionReference:S,domReference:i}),[o.refs,O,S]),C=P.useMemo(()=>({...o.elements,domReference:g}),[o.elements,g]),x=Ms(r),m=P.useMemo(()=>({...o,refs:T,elements:C,dataRef:c,nodeId:n,events:f,open:t,onOpenChange:x}),[o,n,f,t,x,T,C]);return Jt(()=>{const d=a==null?void 0:a.nodesRef.current.find(s=>s.id===n);d&&(d.context=m)}),P.useMemo(()=>({...o,context:m,refs:T,reference:O,positionReference:S}),[o,T,m,O,S])}function Th(e,t,r){const n=new Map;return{...r==="floating"&&{tabIndex:-1},...e,...t.map(o=>o?o[r]:null).concat(e).reduce((o,a)=>(a&&Object.entries(a).forEach(i=>{let[c,f]=i;if(c.indexOf("on")===0){if(n.has(c)||n.set(c,[]),typeof f=="function"){var g;(g=n.get(c))==null||g.push(f),o[c]=function(){for(var b,S=arguments.length,O=new Array(S),T=0;TC(...O))}}}else o[c]=f}),o),{})}}const Ez=function(e){e===void 0&&(e=[]);const t=e,r=P.useCallback(a=>Th(a,e,"reference"),t),n=P.useCallback(a=>Th(a,e,"floating"),t),o=P.useCallback(a=>Th(a,e,"item"),e.map(a=>a==null?void 0:a.item));return P.useMemo(()=>({getReferenceProps:r,getFloatingProps:n,getItemProps:o}),[r,n,o])},jz=Object.freeze(Object.defineProperty({__proto__:null,FloatingDelayGroup:X6,FloatingFocusManager:lz,FloatingNode:G6,FloatingOverlay:uz,FloatingPortal:iz,FloatingTree:K6,arrow:V6,autoPlacement:M6,autoUpdate:R6,computePosition:PP,detectOverflow:Qc,flip:D6,getOverflowAncestors:Lo,hide:F6,inline:z6,inner:Cz,limitShift:B6,offset:OP,platform:CP,safePolygon:kz,shift:I6,size:L6,useClick:cz,useDelayGroup:Z6,useDelayGroupContext:DP,useDismiss:hz,useFloating:Nz,useFloatingNodeId:q6,useFloatingParentNodeId:Rs,useFloatingPortalNode:UP,useFloatingTree:vi,useFocus:gz,useHover:Q6,useId:iu,useInnerOffset:Tz,useInteractions:Ez,useListNavigation:vz,useMergeRefs:yz,useRole:xz,useTransitionStatus:$P,useTransitionStyles:_z,useTypeahead:Sz},Symbol.toStringTag,{value:"Module"})),pr=lu(jz);var HP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{DialogHeader:function(){return O},default:function(){return T}});var r=g(P),n=g(ct),o=rt,a=g(et),i=Ze,c=Ns;function f(){return f=Object.assign||function(C){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(C,d)&&(m[d]=C[d])}return m}function S(C,x){if(C==null)return{};var m={},d=Object.keys(C),s,u;for(u=0;u=0)&&(m[s]=C[s]);return m}var O=r.default.forwardRef(function(C,x){var m=C.className,d=C.children,s=b(C,["className","children"]),u=(0,i.useTheme)().dialogHeader,l=u.defaultProps,h=u.styles.base;m=m??l.className;var v=(0,o.twMerge)((0,n.default)((0,a.default)(h)),m);return r.default.createElement("div",f({},s,{ref:x,className:v}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.DialogHeader";var T=O})(HP);var qP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,m){for(var d in m)Object.defineProperty(x,d,{enumerable:!0,get:m[d]})}t(e,{DialogBody:function(){return T},default:function(){return C}});var r=b(P),n=b(ct),o=rt,a=b(et),i=Ze,c=Ns;function f(x,m,d){return m in x?Object.defineProperty(x,m,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[m]=d,x}function g(){return g=Object.assign||function(x){for(var m=1;m=0)&&Object.prototype.propertyIsEnumerable.call(x,s)&&(d[s]=x[s])}return d}function O(x,m){if(x==null)return{};var d={},s=Object.keys(x),u,l;for(l=0;l=0)&&(d[u]=x[u]);return d}var T=r.default.forwardRef(function(x,m){var d=x.divider,s=x.className,u=x.children,l=S(x,["divider","className","children"]),h=(0,i.useTheme)().dialogBody,v=h.defaultProps,w=h.styles.base;s=s??v.className;var j=(0,o.twMerge)((0,n.default)((0,a.default)(w.initial),f({},(0,a.default)(w.divider),d)),s);return r.default.createElement("div",g({},l,{ref:m,className:j}),u)});T.propTypes={divider:c.propTypesDivider,className:c.propTypesClassName,children:c.propTypesChildren},T.displayName="MaterialTailwind.DialogBody";var C=T})(qP);var GP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{DialogFooter:function(){return O},default:function(){return T}});var r=g(P),n=g(ct),o=rt,a=g(et),i=Ze,c=Ns;function f(){return f=Object.assign||function(C){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(C,d)&&(m[d]=C[d])}return m}function S(C,x){if(C==null)return{};var m={},d=Object.keys(C),s,u;for(u=0;u=0)&&(m[s]=C[s]);return m}var O=r.default.forwardRef(function(C,x){var m=C.className,d=C.children,s=b(C,["className","children"]),u=(0,i.useTheme)().dialogFooter,l=u.defaultProps,h=u.styles.base;m=m??l.className;var v=(0,o.twMerge)((0,n.default)((0,a.default)(h)),m);return r.default.createElement("div",f({},s,{ref:x,className:v}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.DialogFooter";var T=O})(GP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(k,A){for(var M in A)Object.defineProperty(k,M,{enumerable:!0,get:A[M]})}t(e,{Dialog:function(){return j},DialogHeader:function(){return T.DialogHeader},DialogBody:function(){return C.DialogBody},DialogFooter:function(){return x.DialogFooter},default:function(){return N}});var r=s(P),n=s(nt),o=pr,a=xr,i=s(ct),c=s(Tr),f=rt,g=s(Xt),b=s(et),S=Ze,O=Ns,T=HP,C=qP,x=GP;function m(k,A,M){return A in k?Object.defineProperty(k,A,{value:M,enumerable:!0,configurable:!0,writable:!0}):k[A]=M,k}function d(){return d=Object.assign||function(k){for(var A=1;A=0)&&Object.prototype.propertyIsEnumerable.call(k,D)&&(M[D]=k[D])}return M}function w(k,A){if(k==null)return{};var M={},D=Object.keys(k),L,B;for(B=0;B=0)&&(M[L]=k[L]);return M}var j=r.default.forwardRef(function(k,A){var M=k.open,D=k.handler,L=k.size,B=k.dismiss,U=k.animate,Y=k.className,q=k.children,z=v(k,["open","handler","size","dismiss","animate","className","children"]),$=(0,S.useTheme)().dialog,K=$.defaultProps,X=$.valid,te=$.styles,me=te.base,de=te.sizes;D=D??void 0,L=L??K.size,B=B??K.dismiss,U=U??K.animate,Y=Y??K.className;var ee=(0,i.default)((0,b.default)(me.backdrop)),Se=(0,f.twMerge)((0,i.default)((0,b.default)(me.container),(0,b.default)(de[(0,g.default)(X.sizes,L,"md")])),Y),pe={unmount:{opacity:0,y:-50,transition:{duration:.3}},mount:{opacity:1,y:0,transition:{duration:.3}}},fe={unmount:{opacity:0,transition:{delay:.2}},mount:{opacity:1}},be=(0,c.default)(pe,U),ye=(0,o.useFloating)({open:M,onOpenChange:D}),Pe=ye.floating,Me=ye.context,ke=(0,o.useId)(),ce="".concat(ke,"-label"),je="".concat(ke,"-description"),He=(0,o.useInteractions)([(0,o.useClick)(Me),(0,o.useRole)(Me),(0,o.useDismiss)(Me,B)]).getFloatingProps,qe=(0,o.useMergeRefs)([A,Pe]),Je=a.AnimatePresence;return r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(o.FloatingPortal,null,r.default.createElement(Je,null,M&&r.default.createElement(o.FloatingOverlay,{style:{zIndex:9999},lockScroll:!0},r.default.createElement(o.FloatingFocusManager,{context:Me},r.default.createElement(a.m.div,{className:L==="xxl"?"":ee,initial:"unmount",exit:"unmount",animate:M?"mount":"unmount",variants:fe,transition:{duration:.2}},r.default.createElement(a.m.div,d({},He(h(u({},z),{ref:qe,className:Se,"aria-labelledby":ce,"aria-describedby":je})),{initial:"unmount",exit:"unmount",animate:M?"mount":"unmount",variants:be}),q)))))))});j.propTypes={open:O.propTypesOpen,handler:O.propTypesHandler,size:n.default.oneOf(O.propTypesSize),dismiss:O.propTypesDismiss,animate:O.propTypesAnimate,className:O.propTypesClassName,children:O.propTypesChildren},j.displayName="MaterialTailwind.Dialog";var N=Object.assign(j,{Header:T.DialogHeader,Body:C.DialogBody,Footer:x.DialogFooter})})(sP);var KP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{Input:function(){return C},default:function(){return x}});var r=S(P),n=S(nt),o=S(ct),a=S(Xt),i=S(et),c=Ze,f=gu;function g(m,d,s){return d in m?Object.defineProperty(m,d,{value:s,enumerable:!0,configurable:!0,writable:!0}):m[d]=s,m}function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.variant,u=m.color,l=m.size,h=m.label,v=m.error,w=m.success,j=m.icon,N=m.containerProps,k=m.labelProps,A=m.className,M=m.shrink,D=m.inputRef,L=O(m,["variant","color","size","label","error","success","icon","containerProps","labelProps","className","shrink","inputRef"]),B=(0,c.useTheme)().input,U=B.defaultProps,Y=B.valid,q=B.styles,z=q.base,$=q.variants;s=s??U.variant,l=l??U.size,u=u??U.color,h=h??U.label,k=k??U.labelProps,N=N??U.containerProps,A=A??U.className,M=M??U.shrink,j=j??U.icon;var K=$[(0,a.default)(Y.variants,s,"outlined")],X=K.sizes[(0,a.default)(Y.sizes,l,"md")],te=(0,i.default)(K.error.input),me=(0,i.default)(K.success.input),de=(0,i.default)(K.shrink.input),ee=(0,i.default)(K.colors.input[(0,a.default)(Y.colors,u,"gray")]),Se=(0,i.default)(K.error.label),pe=(0,i.default)(K.success.label),fe=(0,i.default)(K.shrink.label),be=(0,i.default)(K.colors.label[(0,a.default)(Y.colors,u,"gray")]),ye=(0,o.default)((0,i.default)(z.container),(0,i.default)(X.container),N==null?void 0:N.className),Pe=(0,o.default)((0,i.default)(z.input),(0,i.default)(K.base.input),(0,i.default)(X.input),g({},(0,i.default)(K.base.inputWithIcon),j),g({},ee,!v&&!w),g({},te,v),g({},me,w),g({},de,M),A),Me=(0,o.default)((0,i.default)(z.label),(0,i.default)(K.base.label),(0,i.default)(X.label),g({},be,!v&&!w),g({},Se,v),g({},pe,w),g({},fe,M),k==null?void 0:k.className),ke=(0,o.default)((0,i.default)(z.icon),(0,i.default)(K.base.icon),(0,i.default)(X.icon)),ce=(0,o.default)((0,i.default)(z.asterisk));return r.default.createElement("div",b({},N,{ref:d,className:ye}),j&&r.default.createElement("div",{className:ke},j),r.default.createElement("input",b({},L,{ref:D,className:Pe,placeholder:(L==null?void 0:L.placeholder)||" "})),r.default.createElement("label",b({},k,{className:Me}),h," ",L.required?r.default.createElement("span",{className:ce},"*"):""))});C.propTypes={variant:n.default.oneOf(f.propTypesVariant),size:n.default.oneOf(f.propTypesSize),color:n.default.oneOf(f.propTypesColor),label:f.propTypesLabel,error:f.propTypesError,success:f.propTypesSuccess,icon:f.propTypesIcon,labelProps:f.propTypesLabelProps,containerProps:f.propTypesContainerProps,shrink:f.propTypesShrink,className:f.propTypesClassName},C.displayName="MaterialTailwind.Input";var x=C})(KP);var YP={},Tu={},Is={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{propTypesOpen:function(){return g},propTypesHandler:function(){return b},propTypesPlacement:function(){return S},propTypesOffset:function(){return O},propTypesDismiss:function(){return T},propTypesAnimate:function(){return C},propTypesLockScroll:function(){return x},propTypesDisabled:function(){return m},propTypesClassName:function(){return d},propTypesChildren:function(){return s},propTypesContextValue:function(){return u}});var r=a(nt),n=Gt;function o(l,h,v){return h in l?Object.defineProperty(l,h,{value:v,enumerable:!0,configurable:!0,writable:!0}):l[h]=v,l}function a(l){return l&&l.__esModule?l:{default:l}}function i(l){for(var h=1;hs.length)&&(u=s.length);for(var l=0,h=new Array(u);l=0)&&Object.prototype.propertyIsEnumerable.call(x,s)&&(d[s]=x[s])}return d}function O(x,m){if(x==null)return{};var d={},s=Object.keys(x),u,l;for(l=0;l=0)&&(d[u]=x[u]);return d}var T=r.default.forwardRef(function(x,m){var d=x.children,s=S(x,["children"]),u=(0,o.useMenu)(),l=u.getReferenceProps,h=u.reference,v=u.nested,w=(0,n.useMergeRefs)([m,h]);return r.default.cloneElement(d,f({},l(f(b(f({},s),{ref:w,onClick:function(N){N.stopPropagation()}}),v&&{role:"menuitem"}))))});T.propTypes={children:a.propTypesChildren},T.displayName="MaterialTailwind.MenuHandler";var C=T})(XP);var ZP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{MenuList:function(){return x},default:function(){return m}});var r=O(P),n=pr,o=xr,a=O(ct),i=rt,c=O(et),f=Ze,g=Tu,b=Is;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.children,l=d.className,h=T(d,["children","className"]),v=(0,f.useTheme)().menu,w=v.styles.base,j=(0,g.useMenu)(),N=j.open,k=j.handler,A=j.strategy,M=j.x,D=j.y,L=j.floating,B=j.listItemsRef,U=j.getFloatingProps,Y=j.getItemProps,q=j.appliedAnimation,z=j.lockScroll,$=j.context,K=j.activeIndex,X=j.tree,te=j.allowHover,me=j.internalAllowHover,de=j.setActiveIndex,ee=j.nested;l=l??"";var Se=(0,i.twMerge)((0,a.default)((0,c.default)(w.menu)),l),pe=(0,n.useMergeRefs)([s,L]),fe=o.AnimatePresence,be=r.default.createElement(o.m.div,S({},h,{ref:pe,style:{position:A,top:D??0,left:M??0},className:Se},U({onKeyDown:function(Pe){Pe.key==="Tab"&&(k(!1),Pe.shiftKey&&Pe.preventDefault())}}),{initial:"unmount",exit:"unmount",animate:N?"mount":"unmount",variants:q}),r.default.Children.map(u,function(ye,Pe){return r.default.isValidElement(ye)&&r.default.cloneElement(ye,Y({tabIndex:K===Pe?0:-1,role:"menuitem",className:ye.props.className,ref:function(ke){B.current[Pe]=ke},onClick:function(ke){if(ye.props.onClick){var ce,je;(je=(ce=ye.props).onClick)===null||je===void 0||je.call(ce,ke)}X==null||X.events.emit("click")},onMouseEnter:function(){(te&&N||me&&N)&&de(Pe)}}))}));return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(n.FloatingPortal,null,r.default.createElement(fe,null,N&&r.default.createElement(r.default.Fragment,null,z?r.default.createElement(n.FloatingOverlay,{lockScroll:!0},r.default.createElement(n.FloatingFocusManager,{context:$,modal:!ee,initialFocus:ee?-1:0,returnFocus:!ee,visuallyHiddenDismiss:!0},be)):r.default.createElement(n.FloatingFocusManager,{context:$,modal:!ee,initialFocus:ee?-1:0,returnFocus:!ee,visuallyHiddenDismiss:!0},be)))))});x.propTypes={className:b.propTypesClassName,children:b.propTypesChildren},x.displayName="MaterialTailwind.MenuList";var m=x})(ZP);var JP={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,m){for(var d in m)Object.defineProperty(x,d,{enumerable:!0,get:m[d]})}t(e,{MenuItem:function(){return T},default:function(){return C}});var r=b(P),n=b(ct),o=rt,a=b(et),i=Ze,c=Is;function f(x,m,d){return m in x?Object.defineProperty(x,m,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[m]=d,x}function g(){return g=Object.assign||function(x){for(var m=1;m=0)&&Object.prototype.propertyIsEnumerable.call(x,s)&&(d[s]=x[s])}return d}function O(x,m){if(x==null)return{};var d={},s=Object.keys(x),u,l;for(l=0;l=0)&&(d[u]=x[u]);return d}var T=r.default.forwardRef(function(x,m){var d=x.className,s=d===void 0?"":d,u=x.disabled,l=u===void 0?!1:u,h=x.children,v=S(x,["className","disabled","children"]),w=(0,i.useTheme)().menu,j=w.styles.base,N=(0,o.twMerge)((0,n.default)((0,a.default)(j.item.initial),f({},(0,a.default)(j.item.disabled),l)),s);return r.default.createElement("button",g({},v,{ref:m,role:"menuitem",className:N}),h)});T.propTypes={className:c.propTypesClassName,disabled:c.propTypesDisabled,children:c.propTypesChildren},T.displayName="MaterialTailwind.MenuItem";var C=T})(JP);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{Menu:function(){return S},MenuHandler:function(){return i.MenuHandler},MenuList:function(){return c.MenuList},MenuItem:function(){return f.MenuItem},useMenu:function(){return o.useMenu},default:function(){return O}});var r=b(P),n=pr,o=Tu,a=QP,i=XP,c=ZP,f=JP;function g(){return g=Object.assign||function(T){for(var C=1;C=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.open,l=d.animate,h=d.className,v=d.children,w=T(d,["open","animate","className","children"]),j;console.error(` will be deprecated in the future versions of @material-tailwind/react use instead. + +More details: https://www.material-tailwind.com/docs/react/collapse + `);var N=r.default.useRef(null),k=(0,g.useTheme)().navbar,A=k.styles,M=A.base.mobileNav;l=l??{},h=h??"";var D=(0,c.twMerge)((0,i.default)((0,f.default)(M)),h),L={unmount:{height:0,opacity:0,transition:{duration:.3,times:"[0.4, 0, 0.2, 1]"}},mount:{opacity:1,height:"".concat((j=N.current)===null||j===void 0?void 0:j.scrollHeight,"px"),transition:{duration:.3,times:"[0.4, 0, 0.2, 1]"}}},B=(0,a.default)(L,l),U=n.AnimatePresence,Y=(0,o.useMergeRefs)([s,N]);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(U,null,r.default.createElement(n.m.div,S({},w,{ref:Y,className:D,initial:"unmount",exit:"unmount",animate:u?"mount":"unmount",variants:B}),v)))});x.displayName="MaterialTailwind.MobileNav",x.propTypes={open:b.propTypesOpen,animate:b.propTypesAnimate,className:b.propTypesClassName,children:b.propTypesChildren};var m=x})(tk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Navbar:function(){return m},MobileNav:function(){return g.MobileNav},default:function(){return d}});var r=T(P),n=T(nt),o=T(ct),a=rt,i=T(Xt),c=T(et),f=Ze,g=tk,b=Pf;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.variant,h=s.color,v=s.shadow,w=s.blurred,j=s.fullWidth,N=s.className,k=s.children,A=C(s,["variant","color","shadow","blurred","fullWidth","className","children"]),M=(0,f.useTheme)().navbar,D=M.defaultProps,L=M.valid,B=M.styles,U=B.base,Y=B.variants;l=l??D.variant,h=h??D.color,v=v??D.shadow,w=w??D.blurred,j=j??D.fullWidth,N=N??D.className;var q,z=(0,o.default)((0,c.default)(U.navbar.initial),(q={},S(q,(0,c.default)(U.navbar.shadow),v),S(q,(0,c.default)(U.navbar.blurred),w&&h==="white"),S(q,(0,c.default)(U.navbar.fullWidth),j),q)),$=(0,o.default)((0,c.default)(Y[(0,i.default)(L.variants,l,"filled")][(0,i.default)(L.colors,h,"white")])),K=(0,a.twMerge)((0,o.default)(z,$),N);return r.default.createElement("nav",O({},A,{ref:u,className:K}),k)});m.propTypes={variant:n.default.oneOf(b.propTypesVariant),color:n.default.oneOf(b.propTypesColor),shadow:b.propTypesShadow,blurred:b.propTypesBlurred,fullWidth:b.propTypesFullWidth,className:b.propTypesClassName,children:b.propTypesChildren},m.displayName="MaterialTailwind.Navbar";var d=Object.assign(m,{MobileNav:g.MobileNav})})(ek);var rk={},Kf={},Ds={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{propTypesOpen:function(){return a},propTypesHandler:function(){return i},propTypesPlacement:function(){return c},propTypesOffset:function(){return f},propTypesDismiss:function(){return g},propTypesAnimate:function(){return b},propTypesContent:function(){return S},propTypesInteractive:function(){return O},propTypesClassName:function(){return T},propTypesChildren:function(){return C},propTypesContextValue:function(){return x}});var r=o(nt),n=Gt;function o(m){return m&&m.__esModule?m:{default:m}}var a=r.default.bool,i=r.default.func,c=n.propTypesPlacements,f=n.propTypesOffsetType,g=n.propTypesDismissType,b=n.propTypesAnimation,S=r.default.node,O=r.default.bool,T=r.default.string,C=r.default.node.isRequired,x=r.default.shape({open:r.default.bool.isRequired,strategy:r.default.oneOf(["fixed","absolute"]).isRequired,x:r.default.number,y:r.default.number,context:r.default.instanceOf(Object).isRequired,reference:r.default.func.isRequired,floating:r.default.func.isRequired,getReferenceProps:r.default.func.isRequired,getFloatingProps:r.default.func.isRequired,appliedAnimation:b.isRequired,labelId:r.default.string.isRequired,descriptionId:r.default.string.isRequired}).isRequired})(Ds);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(f,g){for(var b in g)Object.defineProperty(f,b,{enumerable:!0,get:g[b]})}t(e,{PopoverContext:function(){return a},usePopover:function(){return i},PopoverContextProvider:function(){return c}});var r=o(P),n=Ds;function o(f){return f&&f.__esModule?f:{default:f}}var a=r.default.createContext(null);a.displayName="MaterialTailwind.PopoverContext";function i(){var f=r.default.useContext(a);if(!f)throw new Error("usePopover() must be used within a Popover. It happens when you use PopoverHandler or PopoverContent components outside the Popover component.");return f}var c=function(f){var g=f.value,b=f.children;return r.default.createElement(a.Provider,{value:g},b)};c.propTypes={value:n.propTypesContextValue,children:n.propTypesChildren},c.displayName="MaterialTailwind.PopoverContextProvider"})(Kf);var nk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(x,m){for(var d in m)Object.defineProperty(x,d,{enumerable:!0,get:m[d]})}t(e,{PopoverHandler:function(){return T},default:function(){return C}});var r=c(P),n=pr,o=Kf,a=Ds;function i(x,m,d){return m in x?Object.defineProperty(x,m,{value:d,enumerable:!0,configurable:!0,writable:!0}):x[m]=d,x}function c(x){return x&&x.__esModule?x:{default:x}}function f(x){for(var m=1;m=0)&&Object.prototype.propertyIsEnumerable.call(x,s)&&(d[s]=x[s])}return d}function O(x,m){if(x==null)return{};var d={},s=Object.keys(x),u,l;for(l=0;l=0)&&(d[u]=x[u]);return d}var T=r.default.forwardRef(function(x,m){var d=x.children,s=S(x,["children"]),u=(0,o.usePopover)(),l=u.getReferenceProps,h=u.reference,v=(0,n.useMergeRefs)([m,h]);return r.default.cloneElement(d,f({},l(b(f({},s),{ref:v}))))});T.propTypes={children:a.propTypesChildren},T.displayName="MaterialTailwind.PopoverHandler";var C=T})(nk);var ok={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,v){for(var w in v)Object.defineProperty(h,w,{enumerable:!0,get:v[w]})}t(e,{PopoverContent:function(){return u},default:function(){return l}});var r=T(P),n=pr,o=xr,a=T(ct),i=rt,c=T(et),f=Ze,g=Kf,b=Ds;function S(h,v,w){return v in h?Object.defineProperty(h,v,{value:w,enumerable:!0,configurable:!0,writable:!0}):h[v]=w,h}function O(){return O=Object.assign||function(h){for(var v=1;v=0)&&Object.prototype.propertyIsEnumerable.call(h,j)&&(w[j]=h[j])}return w}function s(h,v){if(h==null)return{};var w={},j=Object.keys(h),N,k;for(k=0;k=0)&&(w[N]=h[N]);return w}var u=r.default.forwardRef(function(h,v){var w=h.children,j=h.className,N=d(h,["children","className"]),k=(0,f.useTheme)().popover,A=k.defaultProps,M=k.styles.base,D=(0,g.usePopover)(),L=D.open,B=D.strategy,U=D.x,Y=D.y,q=D.context,z=D.floating,$=D.getFloatingProps,K=D.appliedAnimation,X=D.labelId,te=D.descriptionId;j=j??A.className;var me=(0,i.twMerge)((0,a.default)((0,c.default)(M)),j),de=(0,n.useMergeRefs)([v,z]),ee=o.AnimatePresence;return r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(n.FloatingPortal,null,r.default.createElement(ee,null,L&&r.default.createElement(n.FloatingFocusManager,{context:q},r.default.createElement(o.m.div,O({},$(m(C({},N),{ref:de,className:me,style:{position:B,top:Y??"",left:U??""},"aria-labelledby":X,"aria-describedby":te})),{initial:"unmount",exit:"unmount",animate:L?"mount":"unmount",variants:K}),w)))))});u.propTypes={className:b.propTypesClassName,children:b.propTypesChildren},u.displayName="MaterialTailwind.PopoverContent";var l=u})(ok);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{Popover:function(){return s},PopoverHandler:function(){return g.PopoverHandler},PopoverContent:function(){return b.PopoverContent},usePopover:function(){return c.usePopover},default:function(){return u}});var r=T(P),n=T(nt),o=pr,a=T(Tr),i=Ze,c=Kf,f=Ds,g=nk,b=ok;function S(l,h){(h==null||h>l.length)&&(h=l.length);for(var v=0,w=new Array(h);v=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.variant,l=d.color,h=d.size,v=d.value,w=d.label,j=d.className,N=d.barProps,k=T(d,["variant","color","size","value","label","className","barProps"]),A=(0,f.useTheme)().progress,M=A.defaultProps,D=A.valid,L=A.styles,B=L.base,U=L.variants,Y=L.sizes;u=u??M.variant,l=l??M.color,h=h??M.size,w=w??M.label,j=j??M.className,N=N??M.barProps;var q=(0,c.default)(U[(0,i.default)(D.variants,u,"filled")][(0,i.default)(D.colors,l,"gray")]),z=(0,c.default)(Y[(0,i.default)(D.sizes,h,"md")].container.initial),$=(0,o.default)((0,c.default)(B.container.initial),z),K=(0,c.default)(Y[(0,i.default)(D.sizes,h,"md")].container.withLabel),X=(0,o.default)((0,c.default)(B.container.withLabel),K),te=(0,c.default)(Y[(0,i.default)(D.sizes,h,"md")].bar),me=(0,o.default)((0,c.default)(B.bar),te),de=(0,a.twMerge)((0,o.default)($,b({},X,w)),j),ee=(0,a.twMerge)((0,o.default)(me,q),N==null?void 0:N.className);return r.default.createElement("div",S({},k,{ref:s,className:de}),r.default.createElement("div",S({},N,{className:ee,style:{width:"".concat(v,"%")}}),w&&"".concat(v,"% ").concat(typeof w=="string"?w:"")))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),size:n.default.oneOf(g.propTypesSize),value:g.propTypesValue,label:g.propTypesLabel,barProps:g.propTypesBarProps,className:g.propTypesClassName},x.displayName="MaterialTailwind.Progress";var m=x})(ak);var ik={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Radio:function(){return m},default:function(){return d}});var r=T(P),n=T(nt),o=T(js),a=T(ct),i=rt,c=T(Xt),f=T(et),g=Ze,b=mi;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.color,h=s.label,v=s.icon,w=s.ripple,j=s.className,N=s.disabled,k=s.containerProps,A=s.labelProps,M=s.iconProps,D=s.inputRef,L=C(s,["color","label","icon","ripple","className","disabled","containerProps","labelProps","iconProps","inputRef"]),B=(0,g.useTheme)().radio,U=B.defaultProps,Y=B.valid,q=B.styles,z=q.base,$=q.colors,K=r.default.useId();l=l??U.color,h=h??U.label,v=v??U.icon,w=w??U.ripple,j=j??U.className,N=N??U.disabled,k=k??U.containerProps,A=A??U.labelProps,M=M??U.iconProps;var X=w!==void 0&&new o.default,te=(0,a.default)((0,f.default)(z.root),S({},(0,f.default)(z.disabled),N)),me=(0,i.twMerge)((0,a.default)((0,f.default)(z.container)),k==null?void 0:k.className),de=(0,i.twMerge)((0,a.default)((0,f.default)(z.input),(0,f.default)($[(0,c.default)(Y.colors,l,"gray")])),j),ee=(0,i.twMerge)((0,a.default)((0,f.default)(z.label)),A==null?void 0:A.className),Se=(0,a.default)((0,a.default)((0,f.default)(z.icon)),$[(0,c.default)(Y.colors,l,"gray")].color,M==null?void 0:M.className);return r.default.createElement("div",{ref:u,className:te},r.default.createElement("label",O({},k,{className:me,htmlFor:L.id||K,onMouseDown:function(pe){var fe=k==null?void 0:k.onMouseDown;return w&&X.create(pe,"dark"),typeof fe=="function"&&fe(pe)}}),r.default.createElement("input",O({},L,{ref:D,type:"radio",disabled:N,className:de,id:L.id||K})),r.default.createElement("span",{className:Se},v||r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 16 16",fill:"currentColor"},r.default.createElement("circle",{"data-name":"ellipse",cx:"8",cy:"8",r:"8"})))),h&&r.default.createElement("label",O({},A,{className:ee,htmlFor:L.id||K}),h))});m.propTypes={color:n.default.oneOf(b.propTypesColor),label:b.propTypesLabel,icon:b.propTypesIcon,ripple:b.propTypesRipple,className:b.propTypesClassName,disabled:b.propTypesDisabled,containerProps:b.propTypesObject,labelProps:b.propTypesObject},m.displayName="MaterialTailwind.Radio";var d=m})(ik);var sk={},xb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(b,S){for(var O in S)Object.defineProperty(b,O,{enumerable:!0,get:S[O]})}t(e,{SelectContext:function(){return i},useSelect:function(){return c},usePrevious:function(){return f},SelectContextProvider:function(){return g}});var r=a(P),n=xr,o=mu;function a(b){return b&&b.__esModule?b:{default:b}}var i=r.default.createContext(null);i.displayName="MaterialTailwind.SelectContext";function c(){var b=r.default.useContext(i);if(b===null)throw new Error("useSelect() must be used within a Select. It happens when you use SelectOption component outside the Select component.");return b}function f(b){var S=r.default.useRef();return(0,n.useIsomorphicLayoutEffect)(function(){S.current=b},[b]),S.current}var g=function(b){var S=b.value,O=b.children;return r.default.createElement(i.Provider,{value:S},O)};g.propTypes={value:o.propTypesContextValue,children:o.propTypesChildren},g.displayName="MaterialTailwind.SelectContextProvider"})(xb);var lk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{SelectOption:function(){return C},default:function(){return x}});var r=S(P),n=S(ct),o=rt,a=S(et),i=Ze,c=xb,f=mu;function g(m,d,s){return d in m?Object.defineProperty(m,d,{value:s,enumerable:!0,configurable:!0,writable:!0}):m[d]=s,m}function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=function(m){var d=function(){q(v),K(l),$(!1),te(null)},s=function(Pe){(Pe.key==="Enter"||Pe.key===" "&&!de.current.typing)&&(Pe.preventDefault(),d())},u=m.value,l=u===void 0?"":u,h=m.index,v=h===void 0?0:h,w=m.disabled,j=w===void 0?!1:w,N=m.className,k=N===void 0?"":N,A=m.children,M=O(m,["value","index","disabled","className","children"]),D=(0,i.useTheme)().select,L=D.styles,B=L.base,U=(0,c.useSelect)(),Y=U.selectedIndex,q=U.setSelectedIndex,z=U.listRef,$=U.setOpen,K=U.onChange,X=U.activeIndex,te=U.setActiveIndex,me=U.getItemProps,de=U.dataRef,ee=(0,a.default)(B.option.initial),Se=(0,a.default)(B.option.active),pe=(0,a.default)(B.option.disabled),fe,be=(0,o.twMerge)((0,n.default)(ee,(fe={},g(fe,Se,Y===v),g(fe,pe,j),fe)),k??"");return r.default.createElement("li",b({},M,{role:"option",ref:function(ye){return z.current[v]=ye},className:be,disabled:j,tabIndex:X===v?0:1,"aria-selected":X===v&&Y===v,"data-selected":Y===v},me({onClick:function(ye){var Pe=M==null?void 0:M.onClick;typeof Pe=="function"&&(Pe(ye),d()),d()},onKeyDown:function(ye){var Pe=M==null?void 0:M.onKeyDown;typeof Pe=="function"&&(Pe(ye),s(ye)),s(ye)}})),A)};C.propTypes={value:f.propTypesValue,index:f.propTypesIndex,disabled:f.propTypesDisabled,className:f.propTypesClassName,children:f.propTypesChildren},C.displayName="MaterialTailwind.SelectOption";var x=C})(lk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(z,$){for(var K in $)Object.defineProperty(z,K,{enumerable:!0,get:$[K]})}t(e,{Select:function(){return Y},Option:function(){return C.SelectOption},useSelect:function(){return O.useSelect},usePrevious:function(){return O.usePrevious},default:function(){return q}});var r=l(P),n=l(nt),o=pr,a=xr,i=l(ct),c=rt,f=l(Tr),g=l(Xt),b=l(et),S=Ze,O=xb,T=mu,C=lk;function x(z,$){($==null||$>z.length)&&($=z.length);for(var K=0,X=new Array($);K<$;K++)X[K]=z[K];return X}function m(z){if(Array.isArray(z))return z}function d(z){if(Array.isArray(z))return x(z)}function s(z,$,K){return $ in z?Object.defineProperty(z,$,{value:K,enumerable:!0,configurable:!0,writable:!0}):z[$]=K,z}function u(){return u=Object.assign||function(z){for(var $=1;$=0)&&Object.prototype.propertyIsEnumerable.call(z,X)&&(K[X]=z[X])}return K}function D(z,$){if(z==null)return{};var K={},X=Object.keys(z),te,me;for(me=0;me=0)&&(K[te]=z[te]);return K}function L(z,$){return m(z)||v(z,$)||U(z,$)||w()}function B(z){return d(z)||h(z)||U(z)||j()}function U(z,$){if(z){if(typeof z=="string")return x(z,$);var K=Object.prototype.toString.call(z).slice(8,-1);if(K==="Object"&&z.constructor&&(K=z.constructor.name),K==="Map"||K==="Set")return Array.from(K);if(K==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(K))return x(z,$)}}var Y=r.default.forwardRef(function(z,$){var K=z.variant,X=z.color,te=z.size,me=z.label,de=z.error,ee=z.success,Se=z.arrow,pe=z.value,fe=z.onChange,be=z.selected,ye=z.offset,Pe=z.dismiss,Me=z.animate,ke=z.lockScroll,ce=z.labelProps,je=z.menuProps,He=z.className,qe=z.disabled,Je=z.name,Qe=z.children,Ge=z.containerProps,Xe=M(z,["variant","color","size","label","error","success","arrow","value","onChange","selected","offset","dismiss","animate","lockScroll","labelProps","menuProps","className","disabled","name","children","containerProps"]),ht,Ve=(0,S.useTheme)().select,ot=Ve.defaultProps,_t=Ve.valid,Ne=Ve.styles,at=Ne.base,Te=Ne.variants,ae=L(r.default.useState("close"),2),ge=ae[0],oe=ae[1];K=K??ot.variant,X=X??ot.color,te=te??ot.size,me=me??ot.label,de=de??ot.error,ee=ee??ot.success,Se=Se??ot.arrow,pe=pe??ot.value,fe=fe??ot.onChange,be=be??ot.selected,ye=ye??ot.offset,Pe=Pe??ot.dismiss,Me=Me??ot.animate,ce=ce??ot.labelProps,je=je??ot.menuProps;var ve;Ge=(ve=(0,f.default)(Ge,(ot==null?void 0:ot.containerProps)||{}))!==null&&ve!==void 0?ve:ot.containerProps,He=He??ot.className;var se=r.default.useRef([]),ie,he=r.default.useRef(B((ie=r.default.Children.map(Qe,function(jt){var Nt=jt.props;return Nt==null?void 0:Nt.value}))!==null&&ie!==void 0?ie:[])),Oe=L(r.default.useState(!1),2),Ce=Oe[0],Ue=Oe[1],Fe=L(r.default.useState(null),2),Ie=Fe[0],Ee=Fe[1],dt=L(r.default.useState(0),2),ft=dt[0],Ft=dt[1],Kt=L(r.default.useState(!1),2),Pt=Kt[0],Rt=Kt[1],hr=(0,O.usePrevious)(Ie),ir=(0,o.useFloating)({placement:"bottom-start",open:Ce,onOpenChange:Ue,whileElementsMounted:o.autoUpdate,middleware:[(0,o.offset)(5),(0,o.flip)({padding:10}),(0,o.size)({apply:function(Nt){var zt=Nt.rects,Or=Nt.elements,tn,so;Object.assign(Or==null||(tn=Or.floating)===null||tn===void 0?void 0:tn.style,{width:"".concat(zt==null||(so=zt.reference)===null||so===void 0?void 0:so.width,"px"),zIndex:99})},padding:20})]}),Jr=ir.x,jn=ir.y,Mr=ir.strategy,en=ir.refs,wr=ir.context;r.default.useEffect(function(){Ft(Math.max(0,he.current.indexOf(pe)+1))},[pe]);var no=en.floating,An=(0,o.useInteractions)([(0,o.useClick)(wr),(0,o.useRole)(wr,{role:"listbox"}),(0,o.useDismiss)(wr,N({},Pe)),(0,o.useListNavigation)(wr,{listRef:se,activeIndex:Ie,selectedIndex:ft,onNavigate:Ee,loop:!0}),(0,o.useTypeahead)(wr,{listRef:he,activeIndex:Ie,selectedIndex:ft,onMatch:Ce?Ee:Ft})]),J=An.getReferenceProps,Ae=An.getFloatingProps,Be=An.getItemProps;(0,a.useIsomorphicLayoutEffect)(function(){var jt=no.current;if(Ce&&Pt&&jt){var Nt=Ie!=null?se.current[Ie]:ft!=null?se.current[ft]:null;if(Nt&&hr!=null){var zt,Or,tn=(Or=(zt=se.current[hr])===null||zt===void 0?void 0:zt.offsetHeight)!==null&&Or!==void 0?Or:0,so=jt.offsetHeight,Da=Nt.offsetTop,In=Da+tn;Daso+jt.scrollTop&&(jt.scrollTop+=In-so-jt.scrollTop+5)}}},[Ce,Pt,hr,Ie]);var Mt=r.default.useMemo(function(){return{selectedIndex:ft,setSelectedIndex:Ft,listRef:se,setOpen:Ue,onChange:fe||function(){},activeIndex:Ie,setActiveIndex:Ee,getItemProps:Be,dataRef:wr.dataRef}},[ft,fe,Ie,Be,wr.dataRef]);r.default.useEffect(function(){oe(Ce?"open":!Ce&&ft||!Ce&&pe?"withValue":"close")},[Ce,pe,ft,be]);var yt=Te[(0,g.default)(_t.variants,K,"outlined")],Et=yt.sizes[(0,g.default)(_t.sizes,te,"md")],It=yt.error.select,or=yt.success.select,kt=yt.colors.select[(0,g.default)(_t.colors,X,"gray")],Rn=yt.error.label,Ir=yt.success.label,gr=yt.colors.label[(0,g.default)(_t.colors,X,"gray")],Mn=yt.states[ge],oo=(0,i.default)((0,b.default)(at.container),(0,b.default)(Et.container),Ge==null?void 0:Ge.className),Ct=(0,c.twMerge)((0,i.default)((0,b.default)(at.select),(0,b.default)(yt.base.select),(0,b.default)(Mn.select),(0,b.default)(Et.select),s({},(0,b.default)(kt[ge]),!de&&!ee),s({},(0,b.default)(It.initial),de),s({},(0,b.default)(It.states[ge]),de),s({},(0,b.default)(or.initial),ee),s({},(0,b.default)(or.states[ge]),ee)),He),Ra,To=(0,c.twMerge)((0,i.default)((0,b.default)(at.label),(0,b.default)(yt.base.label),(0,b.default)(Mn.label),(0,b.default)(Et.label.initial),(0,b.default)(Et.label.states[ge]),s({},(0,b.default)(gr[ge]),!de&&!ee),s({},(0,b.default)(Rn.initial),de),s({},(0,b.default)(Rn.states[ge]),de),s({},(0,b.default)(Ir.initial),ee),s({},(0,b.default)(Ir.states[ge]),ee)),(Ra=ce.className)!==null&&Ra!==void 0?Ra:""),ao=(0,i.default)((0,b.default)(at.arrow.initial),s({},(0,b.default)(at.arrow.active),Ce)),io,Oo=(0,c.twMerge)((0,i.default)((0,b.default)(at.menu)),(io=je.className)!==null&&io!==void 0?io:""),Ma=(0,i.default)("absolute top-2/4 -translate-y-2/4",K==="outlined"?"left-3 pt-0.5":"left-0 pt-3"),xi={unmount:{opacity:0,transformOrigin:"top",transform:"scale(0.95)",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{opacity:1,transformOrigin:"top",transform:"scale(1)",transition:{duration:.2,times:[.4,0,.2,1]}}},wi=(0,f.default)(xi,Me),Ia=a.AnimatePresence;r.default.useEffect(function(){pe&&!fe&&console.error("Warning: You provided a `value` prop to a select component without an `onChange` handler. This will render a read-only select. If the field should be mutable use `onChange` handler with `value` together.")},[pe,fe]);var mn=r.default.createElement(o.FloatingFocusManager,{context:wr,modal:!1},r.default.createElement(a.m.ul,u({},Ae(A(N({},je),{ref:en.setFloating,role:"listbox",className:Oo,style:{position:Mr,top:jn??0,left:Jr??0,overflow:"auto"},onPointerEnter:function(Nt){var zt=je==null?void 0:je.onPointerEnter;typeof zt=="function"&&(zt(Nt),Rt(!1)),Rt(!1)},onPointerMove:function(Nt){var zt=je==null?void 0:je.onPointerMove;typeof zt=="function"&&(zt(Nt),Rt(!1)),Rt(!1)},onKeyDown:function(Nt){var zt=je==null?void 0:je.onKeyDown;typeof zt=="function"&&(zt(Nt),Rt(!0)),Rt(!0)}})),{initial:"unmount",exit:"unmount",animate:Ce?"mount":"unmount",variants:wi}),r.default.Children.map(Qe,function(jt,Nt){var zt;return r.default.isValidElement(jt)&&r.default.cloneElement(jt,A(N({},jt.props),{index:((zt=jt.props)===null||zt===void 0?void 0:zt.index)||Nt+1,id:"material-tailwind-select-".concat(Nt)}))})));return r.default.createElement(O.SelectContextProvider,{value:Mt},r.default.createElement("div",u({},Ge,{ref:$,className:oo}),r.default.createElement("button",u({type:"button"},J(A(N({},Xe),{ref:en.setReference,className:Ct,disabled:qe,name:Je}))),typeof be=="function"?r.default.createElement("span",{className:Ma},be(Qe[ft-1],ft-1)):pe&&!fe?r.default.createElement("span",{className:Ma},pe):r.default.createElement("span",u({},(ht=Qe[ft-1])===null||ht===void 0?void 0:ht.props,{className:Ma})),r.default.createElement("div",{className:ao},Se??r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},r.default.createElement("path",{fillRule:"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",clipRule:"evenodd"})))),r.default.createElement("label",u({},ce,{className:To}),me),r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(Ia,null,Ce&&r.default.createElement(r.default.Fragment,null,ke?r.default.createElement(o.FloatingOverlay,{lockScroll:!0},mn):mn)))))});Y.propTypes={variant:n.default.oneOf(T.propTypesVariant),color:n.default.oneOf(T.propTypesColor),size:n.default.oneOf(T.propTypesSize),label:T.propTypesLabel,error:T.propTypesError,success:T.propTypesSuccess,arrow:T.propTypesArrow,value:T.propTypesValue,onChange:T.propTypesOnChange,selected:T.propTypesSelected,offset:T.propTypesOffset,dismiss:T.propTypesDismiss,animate:T.propTypesAnimate,lockScroll:T.propTypesLockScroll,labelProps:T.propTypesLabelProps,menuProps:T.propTypesMenuProps,className:T.propTypesClassName,disabled:T.propTypesDisabled,name:T.propTypesName,children:T.propTypesChildren,containerProps:T.propTypesContainerProps},Y.displayName="MaterialTailwind.Select";var q=Object.assign(Y,{Option:C.SelectOption})})(sk);var uk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Switch:function(){return m},default:function(){return d}});var r=T(P),n=T(nt),o=T(js),a=T(ct),i=rt,c=T(Xt),f=T(et),g=Ze,b=mi;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.color,h=s.label,v=s.ripple,w=s.className,j=s.disabled,N=s.containerProps,k=s.circleProps,A=s.labelProps,M=s.inputRef,D=C(s,["color","label","ripple","className","disabled","containerProps","circleProps","labelProps","inputRef"]),L=(0,g.useTheme)(),B=L.switch,U=B.defaultProps,Y=B.valid,q=B.styles,z=q.base,$=q.colors,K=r.default.useId();l=l??U.color,v=v??U.ripple,w=w??U.className,j=j??U.disabled,N=N??U.containerProps,A=A??U.labelProps,k=k??U.circleProps;var X=v!==void 0&&new o.default,te=(0,a.default)((0,f.default)(z.root),S({},(0,f.default)(z.disabled),j)),me=(0,i.twMerge)((0,a.default)((0,f.default)(z.container)),N==null?void 0:N.className),de=(0,i.twMerge)((0,a.default)((0,f.default)(z.input),(0,f.default)($[(0,c.default)(Y.colors,l,"gray")])),w),ee=(0,i.twMerge)((0,a.default)((0,f.default)(z.circle),$[(0,c.default)(Y.colors,l,"gray")].circle,$[(0,c.default)(Y.colors,l,"gray")].before),k==null?void 0:k.className),Se=(0,a.default)((0,f.default)(z.ripple)),pe=(0,i.twMerge)((0,a.default)((0,f.default)(z.label)),A==null?void 0:A.className);return r.default.createElement("div",{ref:u,className:te},r.default.createElement("div",O({},N,{className:me}),r.default.createElement("input",O({},D,{ref:M,type:"checkbox",disabled:j,id:D.id||K,className:de})),r.default.createElement("label",O({},k,{htmlFor:D.id||K,className:ee}),v&&r.default.createElement("div",{className:Se,onMouseDown:function(fe){var be=N==null?void 0:N.onMouseDown;return v&&X.create(fe,"dark"),typeof be=="function"&&be(fe)}}))),h&&r.default.createElement("label",O({},A,{htmlFor:D.id||K,className:pe}),h))});m.propTypes={color:n.default.oneOf(b.propTypesColor),label:b.propTypesLabel,ripple:b.propTypesRipple,className:b.propTypesClassName,disabled:b.propTypesDisabled,containerProps:b.propTypesObject,labelProps:b.propTypesObject,circleProps:b.propTypesObject},m.displayName="MaterialTailwind.Switch";var d=m})(uk);var ck={},Ls={},yi={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{propTypesId:function(){return a},propTypesValue:function(){return i},propTypesAnimate:function(){return c},propTypesDisabled:function(){return f},propTypesClassName:function(){return g},propTypesOrientation:function(){return b},propTypesIndicator:function(){return S},propTypesChildren:function(){return O}});var r=o(nt),n=Gt;function o(T){return T&&T.__esModule?T:{default:T}}var a=r.default.string,i=r.default.oneOfType([r.default.string,r.default.number]).isRequired,c=n.propTypesAnimation,f=r.default.bool,g=r.default.string,b=r.default.oneOf(["horizontal","vertical"]),S=r.default.instanceOf(Object),O=r.default.node.isRequired})(yi);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(N,k){for(var A in k)Object.defineProperty(N,A,{enumerable:!0,get:k[A]})}t(e,{TabsContext:function(){return m},useTabs:function(){return d},TabsContextProvider:function(){return s},setId:function(){return u},setActive:function(){return l},setAnimation:function(){return h},setIndicator:function(){return v},setIsInitial:function(){return w},setOrientation:function(){return j}});var r=c(P),n=yi;function o(N,k){(k==null||k>N.length)&&(k=N.length);for(var A=0,M=new Array(k);A=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.value,l=d.className,h=d.activeClassName,v=d.disabled,w=d.children,j=T(d,["value","className","activeClassName","disabled","children"]),N=(0,c.useTheme)(),k=N.tab,A=k.defaultProps,M=k.styles.base,D=(0,f.useTabs)(),L=D.state,B=D.dispatch,U=L.id,Y=L.active,q=L.indicatorProps;l=l??A.className,h=h??A.activeClassName,v=v??A.disabled;var z,$=(0,a.twMerge)((0,o.default)((0,i.default)(M.tab.initial),(z={},b(z,(0,i.default)(M.tab.disabled),v),b(z,h,Y===u),z)),l),K,X=(0,a.twMerge)((0,o.default)((0,i.default)(M.indicator)),(K=q==null?void 0:q.className)!==null&&K!==void 0?K:"");return r.default.createElement("li",S({},j,{ref:s,role:"tab",className:$,onClick:function(te){var me=j==null?void 0:j.onClick;typeof me=="function"&&((0,f.setActive)(B,u),(0,f.setIsInitial)(B,!1),me(te)),(0,f.setIsInitial)(B,!1),(0,f.setActive)(B,u)},"data-value":u}),r.default.createElement("div",{className:"z-20 text-inherit"},w),Y===u&&r.default.createElement(n.motion.div,S({},q,{transition:{duration:.5},className:X,layoutId:U})))});x.propTypes={value:g.propTypesValue,className:g.propTypesClassName,disabled:g.propTypesDisabled,children:g.propTypesChildren},x.displayName="MaterialTailwind.Tab";var m=x})(dk);var fk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{TabsBody:function(){return x},default:function(){return m}});var r=O(P),n=xr,o=O(Tr),a=O(ct),i=rt,c=O(et),f=Ze,g=Ls,b=yi;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.animate,l=d.className,h=d.children,v=T(d,["animate","className","children"]),w=(0,f.useTheme)().tabsBody,j=w.defaultProps,N=w.styles.base,k=(0,g.useTabs)().dispatch;l=l??j.className,u=u??j.animate;var A=(0,i.twMerge)((0,a.default)((0,c.default)(N)),l),M=r.default.useMemo(function(){return{initial:{opacity:0,position:"absolute",top:"0",left:"0",zIndex:1,transition:{duration:0}},unmount:{opacity:0,position:"absolute",top:"0",left:"0",zIndex:1,transition:{duration:.5,times:[.4,0,.2,1]}},mount:{opacity:1,position:"relative",zIndex:2,transition:{duration:.5,times:[.4,0,.2,1]}}}},[]),D=r.default.useMemo(function(){return(0,o.default)(M,u)},[u,M]);return(0,n.useIsomorphicLayoutEffect)(function(){(0,g.setAnimation)(k,D)},[D,k]),r.default.createElement("div",S({},v,{ref:s,className:A}),h)});x.propTypes={animate:b.propTypesAnimate,className:b.propTypesClassName,children:b.propTypesChildren},x.displayName="MaterialTailwind.TabsBody";var m=x})(fk);var pk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{TabsHeader:function(){return C},default:function(){return x}});var r=S(P),n=S(ct),o=rt,a=S(et),i=Ze,c=Ls,f=yi;function g(m,d,s){return d in m?Object.defineProperty(m,d,{value:s,enumerable:!0,configurable:!0,writable:!0}):m[d]=s,m}function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.indicatorProps,u=m.className,l=m.children,h=O(m,["indicatorProps","className","children"]),v=(0,i.useTheme)().tabsHeader,w=v.defaultProps,j=v.styles,N=(0,c.useTabs)(),k=N.state,A=N.dispatch,M=k.orientation;r.default.useEffect(function(){(0,c.setIndicator)(A,s)},[A,s]),u=u??w.className;var D=(0,o.twMerge)((0,n.default)((0,a.default)(j.base),g({},j[M]&&(0,a.default)(j[M]),M)),u);return r.default.createElement("nav",null,r.default.createElement("ul",b({},h,{ref:d,role:"tablist",className:D}),l))});C.propTypes={indicatorProps:f.propTypesIndicator,className:f.propTypesClassName,children:f.propTypesChildren},C.displayName="MaterialTailwind.TabsHeader";var x=C})(pk);var hk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{TabPanel:function(){return C},default:function(){return x}});var r=S(P),n=xr,o=S(ct),a=rt,i=S(et),c=Ze,f=Ls,g=yi;function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.value,u=m.className,l=m.children,h=O(m,["value","className","children"]),v=(0,c.useTheme)().tabPanel,w=v.defaultProps,j=v.styles.base,N=(0,f.useTabs)().state,k=N.active,A=N.appliedAnimation,M=N.isInitial;u=u??w.className;var D=(0,a.twMerge)((0,o.default)((0,i.default)(j)),u),L=n.AnimatePresence;return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(L,{exitBeforeEnter:!0},r.default.createElement(n.m.div,b({},h,{ref:d,role:"tabpanel",className:D,initial:"unmount",exit:"unmount",animate:k===s?"mount":M?"initial":"unmount",variants:A,"data-value":s}),l)))});C.propTypes={value:g.propTypesValue,className:g.propTypesClassName,children:g.propTypesChildren},C.displayName="MaterialTailwind.TabPanel";var x=C})(hk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{Tabs:function(){return s},Tab:function(){return f.Tab},TabsBody:function(){return g.TabsBody},TabsHeader:function(){return b.TabsHeader},TabPanel:function(){return S.TabPanel},useTabs:function(){return c.useTabs},default:function(){return u}});var r=x(P),n=x(ct),o=rt,a=x(et),i=Ze,c=Ls,f=dk,g=fk,b=pk,S=hk,O=yi;function T(l,h,v){return h in l?Object.defineProperty(l,h,{value:v,enumerable:!0,configurable:!0,writable:!0}):l[h]=v,l}function C(){return C=Object.assign||function(l){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(l,w)&&(v[w]=l[w])}return v}function d(l,h){if(l==null)return{};var v={},w=Object.keys(l),j,N;for(N=0;N=0)&&(v[j]=l[j]);return v}var s=r.default.forwardRef(function(l,h){var v=l.value,w=l.className,j=l.orientation,N=l.children,k=m(l,["value","className","orientation","children"]),A=(0,i.useTheme)().tabs,M=A.defaultProps,D=A.styles,L=r.default.useId();w=w??M.className,j=j??M.orientation;var B=(0,o.twMerge)((0,n.default)((0,a.default)(D.base),T({},D[j]&&(0,a.default)(D[j]),j)),w);return r.default.createElement(c.TabsContextProvider,{id:L,value:v,orientation:j},r.default.createElement("div",C({},k,{ref:h,className:B}),N))});s.propTypes={id:O.propTypesId,value:O.propTypesValue,className:O.propTypesClassName,orientation:O.propTypesOrientation,children:O.propTypesChildren},s.displayName="MaterialTailwind.Tabs";var u=Object.assign(s,{Tab:f.Tab,Body:g.TabsBody,Header:b.TabsHeader,Panel:S.TabPanel})})(ck);var gk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{Textarea:function(){return C},default:function(){return x}});var r=S(P),n=S(nt),o=S(ct),a=S(Xt),i=S(et),c=Ze,f=gu;function g(m,d,s){return d in m?Object.defineProperty(m,d,{value:s,enumerable:!0,configurable:!0,writable:!0}):m[d]=s,m}function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.variant,u=m.color,l=m.size,h=m.label,v=m.error,w=m.success,j=m.resize,N=m.labelProps,k=m.containerProps,A=m.shrink,M=m.className,D=O(m,["variant","color","size","label","error","success","resize","labelProps","containerProps","shrink","className"]),L=(0,c.useTheme)().textarea,B=L.defaultProps,U=L.valid,Y=L.styles,q=Y.base,z=Y.variants;s=s??B.variant,l=l??B.size,u=u??B.color,h=h??B.label,N=N??B.labelProps,k=k??B.containerProps,A=A??B.shrink,M=M??B.className;var $=z[(0,a.default)(U.variants,s,"outlined")],K=(0,i.default)($.error.textarea),X=(0,i.default)($.success.textarea),te=(0,i.default)($.shrink.textarea),me=(0,i.default)($.colors.textarea[(0,a.default)(U.colors,u,"gray")]),de=(0,i.default)($.error.label),ee=(0,i.default)($.success.label),Se=(0,i.default)($.shrink.label),pe=(0,i.default)($.colors.label[(0,a.default)(U.colors,u,"gray")]),fe=(0,o.default)((0,i.default)(q.container),k==null?void 0:k.className),be=(0,o.default)((0,i.default)(q.textarea),(0,i.default)($.base.textarea),(0,i.default)($.sizes[(0,a.default)(U.sizes,l,"md")].textarea),g({},me,!v&&!w),g({},K,v),g({},X,w),g({},te,A),j?"":"!resize-none",M),ye=(0,o.default)((0,i.default)(q.label),(0,i.default)($.base.label),(0,i.default)($.sizes[(0,a.default)(U.sizes,l,"md")].label),g({},pe,!v&&!w),g({},de,v),g({},ee,w),g({},Se,A),N==null?void 0:N.className);return r.default.createElement("div",{ref:d,className:fe},r.default.createElement("textarea",b({},D,{className:be,placeholder:(D==null?void 0:D.placeholder)||" "})),r.default.createElement("label",{className:ye},h))});C.propTypes={variant:n.default.oneOf(f.propTypesVariant),size:n.default.oneOf(f.propTypesSize),color:n.default.oneOf(f.propTypesColor),label:f.propTypesLabel,error:f.propTypesError,success:f.propTypesSuccess,resize:f.propTypesResize,labelProps:f.propTypesLabelProps,containerProps:f.propTypesContainerProps,shrink:f.propTypesShrink,className:f.propTypesClassName},C.displayName="MaterialTailwind.Textarea";var x=C})(gk);var mk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(M,D){for(var L in D)Object.defineProperty(M,L,{enumerable:!0,get:D[L]})}t(e,{Tooltip:function(){return k},default:function(){return A}});var r=m(P),n=m(nt),o=pr,a=xr,i=m(ct),c=rt,f=m(Tr),g=m(et),b=Ze,S=Ds;function O(M,D){(D==null||D>M.length)&&(D=M.length);for(var L=0,B=new Array(D);L=0)&&Object.prototype.propertyIsEnumerable.call(M,B)&&(L[B]=M[B])}return L}function w(M,D){if(M==null)return{};var L={},B=Object.keys(M),U,Y;for(Y=0;Y=0)&&(L[U]=M[U]);return L}function j(M,D){return T(M)||d(M,D)||N(M,D)||s()}function N(M,D){if(M){if(typeof M=="string")return O(M,D);var L=Object.prototype.toString.call(M).slice(8,-1);if(L==="Object"&&M.constructor&&(L=M.constructor.name),L==="Map"||L==="Set")return Array.from(L);if(L==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(L))return O(M,D)}}var k=r.default.forwardRef(function(M,D){var L=M.open,B=M.handler,U=M.content,Y=M.interactive,q=M.placement,z=M.offset,$=M.dismiss,K=M.animate,X=M.className,te=M.children,me=v(M,["open","handler","content","interactive","placement","offset","dismiss","animate","className","children"]),de=(0,b.useTheme)().tooltip,ee=de.defaultProps,Se=de.styles.base,pe=j(r.default.useState(!1),2),fe=pe[0],be=pe[1];L=L??fe,B=B??be,Y=Y??ee.interactive,q=q??ee.placement,z=z??ee.offset,$=$??ee.dismiss,K=K??ee.animate,X=X??ee.className;var ye=(0,c.twMerge)((0,i.default)((0,g.default)(Se)),X),Pe={unmount:{opacity:0},mount:{opacity:1}},Me=(0,f.default)(Pe,K),ke=(0,o.useFloating)({open:L,onOpenChange:B,middleware:[(0,o.offset)(z),(0,o.flip)(),(0,o.shift)()],placement:q}),ce=ke.x,je=ke.y,He=ke.reference,qe=ke.floating,Je=ke.strategy,Qe=ke.refs,Ge=ke.update,Xe=ke.context,ht=(0,o.useInteractions)([(0,o.useClick)(Xe,{enabled:Y}),(0,o.useFocus)(Xe),(0,o.useHover)(Xe),(0,o.useRole)(Xe,{role:"tooltip"}),(0,o.useDismiss)(Xe,$)]),Ve=ht.getReferenceProps,ot=ht.getFloatingProps;r.default.useEffect(function(){if(Qe.reference.current&&Qe.floating.current&&L)return(0,o.autoUpdate)(Qe.reference.current,Qe.floating.current,Ge)},[L,Ge,Qe.reference,Qe.floating]);var _t=(0,o.useMergeRefs)([D,qe]),Ne=(0,o.useMergeRefs)([D,He]),at=a.AnimatePresence;return r.default.createElement(r.default.Fragment,null,typeof te=="string"?r.default.createElement("span",x({},Ve({ref:Ne})),te):r.default.cloneElement(te,u({},Ve(h(u({},te==null?void 0:te.props),{ref:Ne})))),r.default.createElement(a.LazyMotion,{features:a.domAnimation},r.default.createElement(o.FloatingPortal,null,r.default.createElement(at,null,L&&r.default.createElement(a.m.div,x({},ot(h(u({},me),{ref:_t,className:ye,style:{position:Je,top:je??"",left:ce??""}})),{initial:"unmount",exit:"unmount",animate:L?"mount":"unmount",variants:Me}),U)))))});k.propTypes={open:S.propTypesOpen,handler:S.propTypesHandler,content:S.propTypesContent,interactive:S.propTypesInteractive,placement:n.default.oneOf(S.propTypesPlacement),offset:S.propTypesOffset,dismiss:S.propTypesDismiss,animate:S.propTypesAnimate,className:S.propTypesClassName,children:S.propTypesChildren},k.displayName="MaterialTailwind.Tooltip";var A=k})(mk);var bk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(u,l){for(var h in l)Object.defineProperty(u,h,{enumerable:!0,get:l[h]})}t(e,{Typography:function(){return d},default:function(){return s}});var r=S(P),n=S(nt),o=S(ct),a=rt,i=S(Xt),c=S(et),f=Ze,g=Im;function b(u,l,h){return l in u?Object.defineProperty(u,l,{value:h,enumerable:!0,configurable:!0,writable:!0}):u[l]=h,u}function S(u){return u&&u.__esModule?u:{default:u}}function O(u){for(var l=1;l=0)&&Object.prototype.propertyIsEnumerable.call(u,v)&&(h[v]=u[v])}return h}function m(u,l){if(u==null)return{};var h={},v=Object.keys(u),w,j;for(j=0;j=0)&&(h[w]=u[w]);return h}var d=r.default.forwardRef(function(u,l){var h=u.variant,v=u.color,w=u.textGradient,j=u.as,N=u.className,k=u.children,A=x(u,["variant","color","textGradient","as","className","children"]),M=(0,f.useTheme)().typography,D=M.defaultProps,L=M.valid,B=M.styles,U=B.variants,Y=B.colors,q=B.textGradient;h=h??D.variant,v=v??D.color,w=w||D.textGradient,j=j??void 0,N=N??D.className;var z=(0,c.default)(U[(0,i.default)(L.variants,h,"paragraph")]),$=Y[(0,i.default)(L.colors,v,"inherit")],K=(0,c.default)(q),X=(0,a.twMerge)((0,o.default)(z,b({},$.color,!w),b({},K,w),b({},$.gradient,w)),N),te;switch(h){case"h1":te=r.default.createElement(j||"h1",C(O({},A),{ref:l,className:X}),k);break;case"h2":te=r.default.createElement(j||"h2",C(O({},A),{ref:l,className:X}),k);break;case"h3":te=r.default.createElement(j||"h3",C(O({},A),{ref:l,className:X}),k);break;case"h4":te=r.default.createElement(j||"h4",C(O({},A),{ref:l,className:X}),k);break;case"h5":te=r.default.createElement(j||"h5",C(O({},A),{ref:l,className:X}),k);break;case"h6":te=r.default.createElement(j||"h6",C(O({},A),{ref:l,className:X}),k);break;case"lead":te=r.default.createElement(j||"p",C(O({},A),{ref:l,className:X}),k);break;case"paragraph":te=r.default.createElement(j||"p",C(O({},A),{ref:l,className:X}),k);break;case"small":te=r.default.createElement(j||"p",C(O({},A),{ref:l,className:X}),k);break;default:te=r.default.createElement(j||"p",C(O({},A),{ref:l,className:X}),k);break}return te});d.propTypes={variant:n.default.oneOf(g.propTypesVariant),color:n.default.oneOf(g.propTypesColor),as:g.propTypesAs,textGradient:g.propTypesTextGradient,className:g.propTypesClassName,children:g.propTypesChildren},d.displayName="MaterialTailwind.Typography";var s=d})(bk);var vk={},yk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,b){for(var S in b)Object.defineProperty(g,S,{enumerable:!0,get:b[S]})}t(e,{propTypesClassName:function(){return a},propTypesChildren:function(){return i},propTypesOpen:function(){return c},propTypesAnimate:function(){return f}});var r=o(nt),n=Gt;function o(g){return g&&g.__esModule?g:{default:g}}var a=r.default.string,i=r.default.node.isRequired,c=r.default.bool.isRequired,f=n.propTypesAnimation})(yk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{Collapse:function(){return x},default:function(){return m}});var r=O(P),n=xr,o=pr,a=O(Tr),i=O(ct),c=rt,f=O(et),g=Ze,b=yk;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.open,l=d.animate,h=d.className,v=d.children,w=T(d,["open","animate","className","children"]),j=r.default.useRef(null),N=(0,g.useTheme)().collapse,k=N.styles,A=k.base;l=l??{},h=h??"";var M=(0,c.twMerge)((0,i.default)((0,f.default)(A)),h),D={unmount:{height:"0px",transition:{duration:.3,times:[.4,0,.2,1]}},mount:{height:"auto",transition:{duration:.3,times:[.4,0,.2,1]}}},L=(0,a.default)(D,l),B=n.AnimatePresence,U=(0,o.useMergeRefs)([s,j]);return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(B,null,r.default.createElement(n.m.div,S({},w,{ref:U,className:M,initial:"unmount",exit:"unmount",animate:u?"mount":"unmount",variants:L}),v)))});x.displayName="MaterialTailwind.Collapse",x.propTypes={open:b.propTypesOpen,animate:b.propTypesAnimate,className:b.propTypesClassName,children:b.propTypesChildren};var m=x})(vk);var xk={},Ou={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,b){for(var S in b)Object.defineProperty(g,S,{enumerable:!0,get:b[S]})}t(e,{propTypesClassName:function(){return o},propTypesDisabled:function(){return a},propTypesSelected:function(){return i},propTypesRipple:function(){return c},propTypesChildren:function(){return f}});var r=n(nt);function n(g){return g&&g.__esModule?g:{default:g}}var o=r.default.string,a=r.default.bool,i=r.default.bool,c=r.default.bool,f=r.default.node.isRequired})(Ou);var wk={},wb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{ListItemPrefix:function(){return O},default:function(){return T}});var r=g(P),n=Ze,o=g(ct),a=rt,i=g(et),c=Ou;function f(){return f=Object.assign||function(C){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(C,d)&&(m[d]=C[d])}return m}function S(C,x){if(C==null)return{};var m={},d=Object.keys(C),s,u;for(u=0;u=0)&&(m[s]=C[s]);return m}var O=r.default.forwardRef(function(C,x){var m=C.className,d=C.children,s=b(C,["className","children"]),u=(0,n.useTheme)().list,l=u.styles.base,h=(0,a.twMerge)((0,o.default)((0,i.default)(l.itemPrefix)),m);return r.default.createElement("div",f({},s,{ref:x,className:h}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.ListItemPrefix";var T=O})(wb);var _b={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{ListItemSuffix:function(){return O},default:function(){return T}});var r=g(P),n=Ze,o=g(ct),a=rt,i=g(et),c=Ou;function f(){return f=Object.assign||function(C){for(var x=1;x=0)&&Object.prototype.propertyIsEnumerable.call(C,d)&&(m[d]=C[d])}return m}function S(C,x){if(C==null)return{};var m={},d=Object.keys(C),s,u;for(u=0;u=0)&&(m[s]=C[s]);return m}var O=r.default.forwardRef(function(C,x){var m=C.className,d=C.children,s=b(C,["className","children"]),u=(0,n.useTheme)().list,l=u.styles.base,h=(0,a.twMerge)((0,o.default)((0,i.default)(l.itemSuffix)),m);return r.default.createElement("div",f({},s,{ref:x,className:h}),d)});O.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},O.displayName="MaterialTailwind.ListItemSuffix";var T=O})(_b);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{ListItem:function(){return m},ListItemPrefix:function(){return g.ListItemPrefix},ListItemSuffix:function(){return b.ListItemSuffix},default:function(){return d}});var r=T(P),n=Ze,o=T(js),a=T(ct),i=rt,c=T(et),f=Ou,g=wb,b=_b;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.className,h=s.disabled,v=s.selected,w=s.ripple,j=s.children,N=C(s,["className","disabled","selected","ripple","children"]),k=(0,n.useTheme)().list,A=k.defaultProps,M=k.styles.base;w=w??A.ripple;var D=w!==void 0&&new o.default,L,B=(0,i.twMerge)((0,a.default)((0,c.default)(M.item.initial),(L={},S(L,(0,c.default)(M.item.disabled),h),S(L,(0,c.default)(M.item.selected),v&&!h),L)),l);return r.default.createElement("div",O({},N,{ref:u,role:"button",tabIndex:0,className:B,onMouseDown:function(U){var Y=N==null?void 0:N.onMouseDown;return w&&D.create(U,"dark"),typeof Y=="function"&&Y(U)}}),j)});m.propTypes={className:f.propTypesClassName,selected:f.propTypesSelected,disabled:f.propTypesDisabled,ripple:f.propTypesRipple,children:f.propTypesChildren},m.displayName="MaterialTailwind.ListItem";var d=Object.assign(m,{Prefix:g.ListItemPrefix,Suffix:b.ListItemSuffix})})(wk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{List:function(){return x},ListItem:function(){return f.ListItem},ListItemPrefix:function(){return g.ListItemPrefix},ListItemSuffix:function(){return b.ListItemSuffix},default:function(){return m}});var r=O(P),n=Ze,o=O(ct),a=rt,i=O(et),c=Ou,f=wk,g=wb,b=_b;function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.className,l=d.children,h=T(d,["className","children"]),v=(0,n.useTheme)().list,w=v.defaultProps,j=v.styles.base;u=u??w.className;var N=(0,a.twMerge)((0,o.default)((0,i.default)(j.list)),u);return r.default.createElement("nav",S({},h,{ref:s,className:N}),l)});x.propTypes={className:c.propTypesClassName,children:c.propTypesChildren},x.displayName="MaterialTailwind.List";var m=Object.assign(x,{Item:f.ListItem,ItemPrefix:g.ListItemPrefix,ItemSuffix:b.ListItemSuffix})})(xk);var _k={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(d,s){for(var u in s)Object.defineProperty(d,u,{enumerable:!0,get:s[u]})}t(e,{ButtonGroup:function(){return x},default:function(){return m}});var r=O(P),n=O(nt),o=O(ct),a=rt,i=O(Xt),c=O(et),f=Ze,g=hi;function b(d,s,u){return s in d?Object.defineProperty(d,s,{value:u,enumerable:!0,configurable:!0,writable:!0}):d[s]=u,d}function S(){return S=Object.assign||function(d){for(var s=1;s=0)&&Object.prototype.propertyIsEnumerable.call(d,l)&&(u[l]=d[l])}return u}function C(d,s){if(d==null)return{};var u={},l=Object.keys(d),h,v;for(v=0;v=0)&&(u[h]=d[h]);return u}var x=r.default.forwardRef(function(d,s){var u=d.variant,l=d.size,h=d.color,v=d.fullWidth,w=d.ripple,j=d.className,N=d.children,k=T(d,["variant","size","color","fullWidth","ripple","className","children"]),A=(0,f.useTheme)().buttonGroup,M=A.defaultProps,D=A.styles,L=A.valid,B=D.base,U=D.dividerColor;u=u??M.variant,l=l??M.size,h=h??M.color,w=w??M.ripple,v=v??M.fullWidth,j=j??M.className;var Y,q=(0,a.twMerge)((0,o.default)((0,c.default)(B.initial),(Y={},b(Y,(0,c.default)(B.fullWidth),v),b(Y,"divide-x",u!=="outlined"),b(Y,(0,c.default)(U[(0,i.default)(L.colors,h,"gray")]),u!=="outlined"),Y)),j);return r.default.createElement("div",S({},k,{ref:s,className:q}),r.default.Children.map(N,function(z,$){var K;return r.default.isValidElement(z)&&r.default.cloneElement(z,{variant:u,size:l,color:h,ripple:w,fullWidth:v,className:(0,a.twMerge)((0,o.default)({"rounded-r-none":$!==r.default.Children.count(N)-1,"border-r-0":$!==r.default.Children.count(N)-1,"rounded-l-none":$!==0}),(K=z.props)===null||K===void 0?void 0:K.className)})}))});x.propTypes={variant:n.default.oneOf(g.propTypesVariant),size:n.default.oneOf(g.propTypesSize),color:n.default.oneOf(g.propTypesColor),fullWidth:g.propTypesFullWidth,ripple:g.propTypesRipple,className:g.propTypesClassName,children:g.propTypesChildren},x.displayName="MaterialTailwind.ButtonGroup";var m=x})(_k);var Sk={},Ck={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(C,x){for(var m in x)Object.defineProperty(C,m,{enumerable:!0,get:x[m]})}t(e,{propTypesClassName:function(){return o},propTypesPrevArrow:function(){return a},propTypesNextArrow:function(){return i},propTypesNavigation:function(){return c},propTypesAutoplay:function(){return f},propTypesAutoplayDelay:function(){return g},propTypesTransition:function(){return b},propTypesLoop:function(){return S},propTypesChildren:function(){return O},propTypesSlideRef:function(){return T}});var r=n(nt);function n(C){return C&&C.__esModule?C:{default:C}}var o=r.default.string,a=r.default.func,i=r.default.func,c=r.default.func,f=r.default.bool,g=r.default.number,b=r.default.object,S=r.default.bool,O=r.default.node.isRequired,T=r.default.oneOfType([r.default.func,r.default.shape({current:r.default.any})])})(Ck);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(v,w){for(var j in w)Object.defineProperty(v,j,{enumerable:!0,get:w[j]})}t(e,{Carousel:function(){return l},default:function(){return h}});var r=T(P),n=xr,o=pr,a=T(ct),i=rt,c=T(et),f=Ze,g=Ck;function b(v,w){(w==null||w>v.length)&&(w=v.length);for(var j=0,N=new Array(w);j=0)&&Object.prototype.propertyIsEnumerable.call(v,N)&&(j[N]=v[N])}return j}function d(v,w){if(v==null)return{};var j={},N=Object.keys(v),k,A;for(A=0;A=0)&&(j[k]=v[k]);return j}function s(v,w){return S(v)||C(v,w)||u(v,w)||x()}function u(v,w){if(v){if(typeof v=="string")return b(v,w);var j=Object.prototype.toString.call(v).slice(8,-1);if(j==="Object"&&v.constructor&&(j=v.constructor.name),j==="Map"||j==="Set")return Array.from(j);if(j==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(j))return b(v,w)}}var l=r.default.forwardRef(function(v,w){var j=v.children,N=v.prevArrow,k=v.nextArrow,A=v.navigation,M=v.autoplay,D=v.autoplayDelay,L=v.transition,B=v.loop,U=v.className,Y=v.slideRef,q=m(v,["children","prevArrow","nextArrow","navigation","autoplay","autoplayDelay","transition","loop","className","slideRef"]),z=(0,f.useTheme)().carousel,$=z.defaultProps,K=z.styles.base,X=(0,n.useMotionValue)(0),te=r.default.useRef(null),me=s(r.default.useState(0),2),de=me[0],ee=me[1],Se=r.default.Children.toArray(j);U=U??$.className,N=N??$.prevArrow,k=k??$.nextArrow,A=A??$.navigation,M=M??$.autoplay,D=D??$.autoplayDelay,L=L??$.transition,B=B??$.loop;var pe=(0,i.twMerge)((0,a.default)((0,c.default)(K.carousel)),U),fe=(0,i.twMerge)((0,a.default)((0,c.default)(K.slide))),be=r.default.useCallback(function(){var ke;return-de*(((ke=te.current)===null||ke===void 0?void 0:ke.clientWidth)||0)},[de]),ye=r.default.useCallback(function(){var ke=B?0:de;ee(de+1===Se.length?ke:de+1)},[de,B,Se.length]),Pe=function(){var ke=B?Se.length-1:0;ee(de-1<0?ke:de-1)};r.default.useEffect(function(){var ke=(0,n.animate)(X,be(),L);return ke.stop},[be,de,X,L]),r.default.useEffect(function(){window.addEventListener("resize",function(){(0,n.animate)(X,be(),L)})},[be,L,X]),r.default.useEffect(function(){if(M){var ke=setInterval(function(){return ye()},D);return function(){return clearInterval(ke)}}},[M,ye,D]);var Me=(0,o.useMergeRefs)([te,w]);return r.default.createElement("div",O({},q,{ref:Me,className:pe}),Se.map(function(ke,ce){return r.default.createElement(n.LazyMotion,{key:ce,features:n.domAnimation},r.default.createElement(n.m.div,{ref:Y,className:fe,style:{x:X,left:"".concat(ce*100,"%"),right:"".concat(ce*100,"%")}},ke))}),N&&N({loop:B,handlePrev:Pe,activeIndex:de,firstIndex:de===0}),k&&k({loop:B,handleNext:ye,activeIndex:de,lastIndex:de===Se.length-1}),A&&A({setActiveIndex:ee,activeIndex:de,length:Se.length}))});l.propTypes={className:g.propTypesClassName,children:g.propTypesChildren,nextArrow:g.propTypesNextArrow,prevArrow:g.propTypesPrevArrow,navigation:g.propTypesNavigation,autoplay:g.propTypesAutoplay,autoplayDelay:g.propTypesAutoplayDelay,transition:g.propTypesTransition,loop:g.propTypesLoop,slideRef:g.propTypesSlideRef},l.displayName="MaterialTailwind.Carousel";var h=l})(Sk);var Tk={},Ok={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{propTypesOpen:function(){return a},propTypesSize:function(){return i},propTypesOverlay:function(){return c},propTypesChildren:function(){return f},propTypesPlacement:function(){return g},propTypesOverlayProps:function(){return b},propTypesClassName:function(){return S},propTypesOnClose:function(){return O},propTypesDismiss:function(){return T},propTypesTransition:function(){return C},propTypesOverlayRef:function(){return x}});var r=o(nt),n=Gt;function o(m){return m&&m.__esModule?m:{default:m}}var a=r.default.bool.isRequired,i=r.default.number,c=r.default.bool,f=r.default.node.isRequired,g=["top","right","bottom","left"],b=r.default.object,S=r.default.string,O=r.default.func,T=n.propTypesDismissType,C=r.default.object,x=r.default.oneOfType([r.default.func,r.default.shape({current:r.default.any})])})(Ok);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{Drawer:function(){return s},default:function(){return u}});var r=C(P),n=C(nt),o=xr,a=pr,i=C(Tr),c=C(ct),f=rt,g=C(et),b=Ze,S=Ok;function O(l,h,v){return h in l?Object.defineProperty(l,h,{value:v,enumerable:!0,configurable:!0,writable:!0}):l[h]=v,l}function T(){return T=Object.assign||function(l){for(var h=1;h=0)&&Object.prototype.propertyIsEnumerable.call(l,w)&&(v[w]=l[w])}return v}function d(l,h){if(l==null)return{};var v={},w=Object.keys(l),j,N;for(N=0;N=0)&&(v[j]=l[j]);return v}var s=r.default.forwardRef(function(l,h){var v=l.open,w=l.size,j=l.overlay,N=l.children,k=l.placement,A=l.overlayProps,M=l.className,D=l.onClose,L=l.dismiss,B=l.transition,U=l.overlayRef,Y=m(l,["open","size","overlay","children","placement","overlayProps","className","onClose","dismiss","transition","overlayRef"]),q=(0,b.useTheme)().drawer,z=q.defaultProps,$=q.styles.base,K=(0,o.useAnimation)();w=w??z.size,j=j??z.overlay,k=k??z.placement,M=M??z.className,A=A??z.overlayProps,D=D??z.onClose;var X;L=(X=(0,i.default)(z.dismiss,L||{}))!==null&&X!==void 0?X:z.dismiss,B=B??z.transition;var te=(0,f.twMerge)((0,c.default)((0,g.default)($.drawer),{"top-0 right-0":k==="right","bottom-0 left-0":k==="bottom","top-0 left-0":k==="top"||k==="left"}),M),me=(0,f.twMerge)((0,c.default)((0,g.default)($.overlay)),A==null?void 0:A.className),de=(0,a.useFloating)({open:v,onOpenChange:D}).context,ee=(0,a.useInteractions)([(0,a.useDismiss)(de,L)]).getFloatingProps;r.default.useEffect(function(){K.start(v?"open":"close")},[v,K,k]);var Se={open:{x:0,y:0},close:{x:k==="left"?-w:k==="right"?w:0,y:k==="top"?-w:k==="bottom"?w:0}},pe={unmount:{opacity:0,transition:{delay:.3}},mount:{opacity:1}};return r.default.createElement(r.default.Fragment,null,r.default.createElement(o.LazyMotion,{features:o.domAnimation},r.default.createElement(o.AnimatePresence,null,j&&v&&r.default.createElement(o.m.div,{ref:U,className:me,initial:"unmount",exit:"unmount",animate:v?"mount":"unmount",variants:pe,transition:{duration:.3}})),r.default.createElement(o.m.div,T({},ee(x({ref:h},Y)),{className:te,style:{maxWidth:k==="left"||k==="right"?w:"100%",maxHeight:k==="top"||k==="bottom"?w:"100%",height:k==="left"||k==="right"?"100vh":"100%"},initial:"close",animate:K,variants:Se,transition:B}),N)))});s.propTypes={open:S.propTypesOpen,size:S.propTypesSize,overlay:S.propTypesOverlay,children:S.propTypesChildren,placement:n.default.oneOf(S.propTypesPlacement),overlayProps:S.propTypesOverlayProps,className:S.propTypesClassName,onClose:S.propTypesOnClose,dismiss:S.propTypesDismiss,transition:S.propTypesTransition,overlayRef:S.propTypesOverlayRef},s.displayName="MaterialTailwind.Drawer";var u=s})(Tk);var Pk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Badge:function(){return m},default:function(){return d}});var r=T(P),n=T(nt),o=T(Tr),a=T(ct),i=rt,c=T(Xt),f=T(et),g=Ze,b=Dm;function S(s,u,l){return u in s?Object.defineProperty(s,u,{value:l,enumerable:!0,configurable:!0,writable:!0}):s[u]=l,s}function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.color,h=s.invisible,v=s.withBorder,w=s.overlap,j=s.placement,N=s.className,k=s.content,A=s.children,M=s.containerProps,D=s.containerRef,L=C(s,["color","invisible","withBorder","overlap","placement","className","content","children","containerProps","containerRef"]),B=(0,g.useTheme)().badge,U=B.valid,Y=B.defaultProps,q=B.styles,z=q.base,$=q.placements,K=q.colors;l=l??Y.color,h=h??Y.invisible,v=v??Y.withBorder,w=w??Y.overlap,j=j??Y.placement;var X;N=(X=(0,a.default)(N,Y.className))!==null&&X!==void 0?X:Y.className;var te;M=(te=(0,o.default)(M,Y.containerProps||{}))!==null&&te!==void 0?te:Y.containerProps;var me=(0,f.default)(z.badge.initial),de=(0,f.default)(z.badge.withBorder),ee=(0,f.default)(z.badge.withContent),Se=(0,f.default)(K[(0,c.default)(U.colors,l,"red")]),pe=(0,f.default)($[(0,c.default)(U.placements,j,"top-end")][(0,c.default)(U.overlaps,w,"square")]),fe,be=(0,i.twMerge)((0,a.default)(me,pe,Se,(fe={},S(fe,de,v),S(fe,ee,k),fe)),N),ye=(0,i.twMerge)((0,a.default)((0,f.default)(z.container),M==null?void 0:M.className));return r.default.createElement("div",O({ref:D},M,{className:ye}),A,!h&&r.default.createElement("span",O({},L,{ref:u,className:be}),k))});m.propTypes={color:n.default.oneOf(b.propTypesColor),invisible:b.propTypesInvisible,withBorder:b.propTypesWithBorder,overlap:n.default.oneOf(b.propTypesOverlap),className:b.propTypesClassName,content:b.propTypesContent,children:b.propTypesChildren,placement:n.default.oneOf(b.propTypesPlacement),containerProps:b.propTypesContainerProps,containerRef:b.propTypesContainerRef},m.displayName="MaterialTailwind.Badge";var d=m})(Pk);var kk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(k,A){for(var M in A)Object.defineProperty(k,M,{enumerable:!0,get:A[M]})}t(e,{Rating:function(){return j},default:function(){return N}});var r=C(P),n=C(nt),o=C(ct),a=rt,i=C(Xt),c=C(et),f=Ze,g=Lm;function b(k,A){(A==null||A>k.length)&&(A=k.length);for(var M=0,D=new Array(A);M=0)&&Object.prototype.propertyIsEnumerable.call(k,D)&&(M[D]=k[D])}return M}function l(k,A){if(k==null)return{};var M={},D=Object.keys(k),L,B;for(B=0;B=0)&&(M[L]=k[L]);return M}function h(k,A){return S(k)||m(k,A)||w(k,A)||d()}function v(k){return O(k)||x(k)||w(k)||s()}function w(k,A){if(k){if(typeof k=="string")return b(k,A);var M=Object.prototype.toString.call(k).slice(8,-1);if(M==="Object"&&k.constructor&&(M=k.constructor.name),M==="Map"||M==="Set")return Array.from(M);if(M==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(M))return b(k,A)}}var j=r.default.forwardRef(function(k,A){var M=k.count,D=k.value,L=k.ratedIcon,B=k.unratedIcon,U=k.ratedColor,Y=k.unratedColor,q=k.className,z=k.onChange,$=k.readonly,K=u(k,["count","value","ratedIcon","unratedIcon","ratedColor","unratedColor","className","onChange","readonly"]),X,te,me=(0,f.useTheme)().rating,de=me.valid,ee=me.defaultProps,Se=me.styles,pe=Se.base,fe=Se.colors;M=M??ee.count,D=D??ee.value,L=L??ee.ratedIcon,L=L??ee.ratedIcon,B=B??ee.unratedIcon,U=U??ee.ratedColor,Y=Y??ee.unratedColor,q=q??ee.className,z=z??ee.onChange,$=$??ee.readonly;var be=h(r.default.useState(function(){return v(Array(D).fill("rated")).concat(v(Array(M-D).fill("un_rated")))}),2),ye=be[0],Pe=be[1],Me=h(r.default.useState(function(){return v(Array(M).fill("un_rated"))}),2),ke=Me[0],ce=Me[1],je=h(r.default.useState(!1),2),He=je[0],qe=je[1],Je=(0,c.default)(fe[(0,i.default)(de.colors,U,"yellow")]),Qe=(0,c.default)(fe[(0,i.default)(de.colors,Y,"blue-gray")]),Ge=(0,a.twMerge)((0,o.default)((0,c.default)(pe.rating),q)),Xe=(0,c.default)(pe.icon),ht=L,Ve=B,ot=r.default.isValidElement(L)&&r.default.cloneElement(ht,{className:(0,a.twMerge)((0,o.default)(Xe,Je,ht==null||(X=ht.props)===null||X===void 0?void 0:X.className))}),_t=r.default.isValidElement(L)&&r.default.cloneElement(Ve,{className:(0,a.twMerge)((0,o.default)(Xe,Qe,Ve==null||(te=Ve.props)===null||te===void 0?void 0:te.className))}),Ne=!r.default.isValidElement(L)&&r.default.createElement(L,{className:(0,a.twMerge)((0,o.default)(Xe,Je))}),at=!r.default.isValidElement(L)&&r.default.createElement(B,{className:(0,a.twMerge)((0,o.default)(Xe,Qe))}),Te=function(ae){return ae.map(function(ge,oe){return r.default.createElement("span",{key:oe,onClick:function(){if(!$){var ve=ye.map(function(se,ie){return ie<=oe?"rated":"un_rated"});Pe(ve),z&&typeof z=="function"&&z(ve.filter(function(se){return se==="rated"}).length)}},onMouseEnter:function(){if(!$){var ve=ke.map(function(se,ie){return ie<=oe?"rated":"un_rated"});qe(!0),ce(ve)}},onMouseLeave:function(){return!$&&qe(!1)}},r.default.isValidElement(ge==="rated"?L:B)?ge==="rated"?ot:_t:ge==="rated"?Ne:at)})};return r.default.createElement("div",T({},K,{ref:A,className:Ge}),Te(He?ke:ye))});j.propTypes={count:g.propTypesCount,value:g.propTypesValue,ratedIcon:g.propTypesRatedIcon,unratedIcon:g.propTypesUnratedIcon,ratedColor:n.default.oneOf(g.propTypesColor),unratedColor:n.default.oneOf(g.propTypesColor),className:g.propTypesClassName,onChange:g.propTypesOnChange,readonly:g.propTypesReadonly},j.displayName="MaterialTailwind.Rating";var N=j})(kk);var Nk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(w,j){for(var N in j)Object.defineProperty(w,N,{enumerable:!0,get:j[N]})}t(e,{Slider:function(){return h},default:function(){return v}});var r=C(P),n=C(nt),o=C(Tr),a=C(ct),i=rt,c=C(Xt),f=C(et),g=Ze,b=Fm;function S(w,j){(j==null||j>w.length)&&(j=w.length);for(var N=0,k=new Array(j);N=0)&&Object.prototype.propertyIsEnumerable.call(w,k)&&(N[k]=w[k])}return N}function s(w,j){if(w==null)return{};var N={},k=Object.keys(w),A,M;for(M=0;M=0)&&(N[A]=w[A]);return N}function u(w,j){return O(w)||x(w,j)||l(w,j)||m()}function l(w,j){if(w){if(typeof w=="string")return S(w,j);var N=Object.prototype.toString.call(w).slice(8,-1);if(N==="Object"&&w.constructor&&(N=w.constructor.name),N==="Map"||N==="Set")return Array.from(N);if(N==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(N))return S(w,j)}}var h=r.default.forwardRef(function(w,j){var N=w.color,k=w.size,A=w.className,M=w.trackClassName,D=w.thumbClassName,L=w.barClassName,B=w.value,U=w.defaultValue,Y=w.onChange,q=w.min,z=w.max,$=w.step,K=w.inputRef,X=w.inputProps,te=d(w,["color","size","className","trackClassName","thumbClassName","barClassName","value","defaultValue","onChange","min","max","step","inputRef","inputProps"]),me=(0,g.useTheme)().slider,de=me.valid,ee=me.defaultProps,Se=me.styles,pe=Se.base,fe=Se.sizes,be=Se.colors,ye=u(r.default.useState(U||0),2),Pe=ye[0],Me=ye[1];r.default.useMemo(function(){U&&Me(U)},[U]),N=N??ee.color,k=k??ee.size,q=q??ee.min,z=z??ee.max,$=$??ee.step;var ke;A=(ke=(0,a.default)(ee.className,A))!==null&&ke!==void 0?ke:ee.className;var ce;D=(ce=(0,a.default)(ee.thumbClassName,D))!==null&&ce!==void 0?ce:ee.thumbClassName;var je;M=(je=(0,a.default)(ee.trackClassName,M))!==null&&je!==void 0?je:ee.trackClassName;var He;L=(He=(0,a.default)(ee.barClassName,L))!==null&&He!==void 0?He:ee.barClassName;var qe;X=(qe=(0,o.default)(X,(ee==null?void 0:ee.inputProps)||{}))!==null&&qe!==void 0?qe:ee.inputProps;var Je=(0,i.twMerge)((0,a.default)((0,f.default)(pe.container),(0,f.default)(be[(0,c.default)(de.colors,N,"gray")]),(0,f.default)(fe[(0,c.default)(de.sizes,k,"md")].container),A)),Qe=(0,i.twMerge)((0,a.default)((0,f.default)(pe.bar),L)),Ge=(0,a.default)((0,f.default)(pe.track),(0,f.default)(fe[(0,c.default)(de.sizes,k,"md")].track)),Xe=(0,a.default)((0,f.default)(pe.thumb),(0,f.default)(fe[(0,c.default)(de.sizes,k,"md")].thumb)),ht=(0,a.default)((0,f.default)(pe.slider),(0,i.twMerge)(Ge,M),(0,i.twMerge)(Xe,D));return r.default.createElement("div",T({},te,{ref:j,className:Je}),r.default.createElement("label",{className:Qe,style:{width:"".concat(B||Pe,"%")}}),r.default.createElement("input",T({ref:K,type:"range",max:z,min:q,step:$,className:ht},B?{value:B}:null,{defaultValue:U,onChange:function(Ve){return Y?Y(Ve):Me(Number(Ve.target.value))}})))});h.propTypes={color:n.default.oneOf(b.propTypesColor),size:n.default.oneOf(b.propTypesSize),className:b.propTypesClassName,trackClassName:b.propTypesTrackClassName,thumbClassName:b.propTypesThumbClassName,barClassName:b.propTypesBarClassName,defaultValue:b.propTypesDefaultValue,value:b.propTypesValue,onChange:b.propTypesOnChange,min:b.propTypesMin,max:b.propTypesMax,step:b.propTypesStep,inputRef:b.propTypesInputRef,inputProps:b.propTypesInputProps},h.displayName="MaterialTailwind.Slider";var v=h})(Nk);var Ek={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Spinner:function(){return m},default:function(){return d}});var r=S(nt),n=T(P),o=S(ct),a=rt,i=S(Xt),c=S(et),f=Ze,g=zm;function b(){return b=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=(0,n.forwardRef)(function(s,u){var l=s.color,h=s.className,v=C(s,["color","className"]),w=(0,f.useTheme)().spinner,j=w.defaultProps,N=w.valid,k=w.styles,A=k.base,M=k.colors;l=l??j.color;var D;h=(D=(0,o.default)(j.className,h))!==null&&D!==void 0?D:j.className;var L=(0,c.default)(M[(0,i.default)(N.colors,l,"gray")]),B=(0,a.twMerge)((0,o.default)((0,c.default)(A)),h),U,Y;return n.default.createElement("svg",b({},v,{ref:u,className:B,viewBox:"0 0 64 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:(U=v==null?void 0:v.width)!==null&&U!==void 0?U:24,height:(Y=v==null?void 0:v.height)!==null&&Y!==void 0?Y:24}),n.default.createElement("path",{d:"M32 3C35.8083 3 39.5794 3.75011 43.0978 5.20749C46.6163 6.66488 49.8132 8.80101 52.5061 11.4939C55.199 14.1868 57.3351 17.3837 58.7925 20.9022C60.2499 24.4206 61 28.1917 61 32C61 35.8083 60.2499 39.5794 58.7925 43.0978C57.3351 46.6163 55.199 49.8132 52.5061 52.5061C49.8132 55.199 46.6163 57.3351 43.0978 58.7925C39.5794 60.2499 35.8083 61 32 61C28.1917 61 24.4206 60.2499 20.9022 58.7925C17.3837 57.3351 14.1868 55.199 11.4939 52.5061C8.801 49.8132 6.66487 46.6163 5.20749 43.0978C3.7501 39.5794 3 35.8083 3 32C3 28.1917 3.75011 24.4206 5.2075 20.9022C6.66489 17.3837 8.80101 14.1868 11.4939 11.4939C14.1868 8.80099 17.3838 6.66487 20.9022 5.20749C24.4206 3.7501 28.1917 3 32 3L32 3Z",stroke:"currentColor",strokeWidth:"5",strokeLinecap:"round",strokeLinejoin:"round"}),n.default.createElement("path",{d:"M32 3C36.5778 3 41.0906 4.08374 45.1692 6.16256C49.2477 8.24138 52.7762 11.2562 55.466 14.9605C58.1558 18.6647 59.9304 22.9531 60.6448 27.4748C61.3591 31.9965 60.9928 36.6232 59.5759 40.9762",stroke:"currentColor",strokeWidth:"5",strokeLinecap:"round",strokeLinejoin:"round",className:L}))});m.propTypes={color:r.default.oneOf(g.propTypesColor),className:g.propTypesClassName},m.displayName="MaterialTailwind.Spinner";var d=m})(Ek);var jk={},Pu={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,v){for(var w in v)Object.defineProperty(h,w,{enumerable:!0,get:v[w]})}t(e,{useTimelineItem:function(){return s},TimelineItem:function(){return u},default:function(){return l}});var r=b(P),n=rt,o=b(et),a=Ze,i=qo;function c(h,v){(v==null||v>h.length)&&(v=h.length);for(var w=0,j=new Array(v);w=0)&&Object.prototype.propertyIsEnumerable.call(h,j)&&(w[j]=h[j])}return w}function C(h,v){if(h==null)return{};var w={},j=Object.keys(h),N,k;for(k=0;k=0)&&(w[N]=h[N]);return w}function x(h,v){return f(h)||S(h,v)||m(h,v)||O()}function m(h,v){if(h){if(typeof h=="string")return c(h,v);var w=Object.prototype.toString.call(h).slice(8,-1);if(w==="Object"&&h.constructor&&(w=h.constructor.name),w==="Map"||w==="Set")return Array.from(w);if(w==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(w))return c(h,v)}}var d=r.default.createContext(0);d.displayName="MaterialTailwind.TimelineItemContext";function s(){var h=r.default.useContext(d);if(!h)throw new Error("useTimelineItemContext() must be used within a TimelineItem. It happens when you use TimelineIcon, TimelineConnector or TimelineBody components outside the TimelineItem component.");return h}var u=r.default.forwardRef(function(h,v){var w=h.className,j=h.children,N=T(h,["className","children"]),k=(0,a.useTheme)().timelineItem,A=k.styles,M=A.base,D=x(r.default.useState(0),2),L=D[0],B=D[1],U=r.default.useMemo(function(){return[L,B]},[L,B]),Y=(0,n.twMerge)((0,o.default)(M),w);return r.default.createElement(d.Provider,{value:U},r.default.createElement("li",g({ref:v},N,{className:Y}),j))});u.propTypes={className:i.propTypeClassName,children:i.propTypeChildren.isRequired},u.displayName="MaterialTailwind.TimelineItem";var l=u})(Pu);var Ak={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(w,j){for(var N in j)Object.defineProperty(w,N,{enumerable:!0,get:j[N]})}t(e,{TimelineIcon:function(){return h},default:function(){return v}});var r=C(P),n=C(nt),o=pr,a=rt,i=C(Xt),c=C(et),f=Ze,g=Pu,b=qo;function S(w,j){(j==null||j>w.length)&&(j=w.length);for(var N=0,k=new Array(j);N=0)&&Object.prototype.propertyIsEnumerable.call(w,k)&&(N[k]=w[k])}return N}function s(w,j){if(w==null)return{};var N={},k=Object.keys(w),A,M;for(M=0;M=0)&&(N[A]=w[A]);return N}function u(w,j){return O(w)||x(w,j)||l(w,j)||m()}function l(w,j){if(w){if(typeof w=="string")return S(w,j);var N=Object.prototype.toString.call(w).slice(8,-1);if(N==="Object"&&w.constructor&&(N=w.constructor.name),N==="Map"||N==="Set")return Array.from(N);if(N==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(N))return S(w,j)}}var h=r.default.forwardRef(function(w,j){var N=w.color,k=w.variant,A=w.className,M=w.children,D=d(w,["color","variant","className","children"]),L=(0,f.useTheme)().timelineIcon,B=L.styles,U=L.valid,Y=B.base,q=B.variants,z=u((0,g.useTimelineItem)(),2),$=z[1],K=r.default.useRef(null),X=(0,o.useMergeRefs)([j,K]);r.default.useEffect(function(){var de=K.current;if(de){var ee=de.getBoundingClientRect().width;return $(ee),function(){$(0)}}},[$,A,M]);var te=(0,c.default)(q[(0,i.default)(U.variants,k,"filled")][(0,i.default)(U.colors,N,"gray")]),me=(0,a.twMerge)((0,c.default)(Y),te,A);return r.default.createElement("span",T({ref:X},D,{className:me}),M)});h.propTypes={children:b.propTypeChildren,className:b.propTypeClassName,color:n.default.oneOf(b.propTypeColor),variant:n.default.oneOf(b.propTypeVariant)},h.displayName="MaterialTailwind.TimelineIcon";var v=h})(Ak);var Rk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{TimelineHeader:function(){return s},default:function(){return u}});var r=S(P),n=rt,o=S(et),a=Ze,i=Pu,c=qo;function f(l,h){(h==null||h>l.length)&&(h=l.length);for(var v=0,w=new Array(h);v=0)&&Object.prototype.propertyIsEnumerable.call(l,w)&&(v[w]=l[w])}return v}function x(l,h){if(l==null)return{};var v={},w=Object.keys(l),j,N;for(N=0;N=0)&&(v[j]=l[j]);return v}function m(l,h){return g(l)||O(l,h)||d(l,h)||T()}function d(l,h){if(l){if(typeof l=="string")return f(l,h);var v=Object.prototype.toString.call(l).slice(8,-1);if(v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set")return Array.from(v);if(v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v))return f(l,h)}}var s=r.default.forwardRef(function(l,h){var v=l.className,w=l.children,j=C(l,["className","children"]),N=(0,a.useTheme)().timelineBody,k=N.styles,A=k.base,M=m((0,i.useTimelineItem)(),1),D=M[0],L=(0,n.twMerge)((0,o.default)(A),v);return r.default.createElement("div",b({},j,{ref:h,className:L}),r.default.createElement("span",{className:"pointer-events-none invisible h-full flex-shrink-0",style:{width:"".concat(D,"px")}}),r.default.createElement("div",null,w))});s.propTypes={children:c.propTypeChildren,className:c.propTypeClassName},s.displayName="MaterialTailwind.TimelineHeader";var u=s})(Rk);var Mk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{TimelineHeader:function(){return S},default:function(){return O}});var r=f(P),n=rt,o=f(et),a=Ze,i=qo;function c(){return c=Object.assign||function(T){for(var C=1;C=0)&&Object.prototype.propertyIsEnumerable.call(T,m)&&(x[m]=T[m])}return x}function b(T,C){if(T==null)return{};var x={},m=Object.keys(T),d,s;for(s=0;s=0)&&(x[d]=T[d]);return x}var S=r.default.forwardRef(function(T,C){var x=T.className,m=T.children,d=g(T,["className","children"]),s=(0,a.useTheme)().timelineHeader,u=s.styles,l=u.base,h=(0,n.twMerge)((0,o.default)(l),x);return r.default.createElement("div",c({},d,{ref:C,className:h}),m)});S.propTypes={children:i.propTypeChildren,className:i.propTypeClassName},S.displayName="MaterialTailwind.TimelineHeader";var O=S})(Mk);var Ik={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(l,h){for(var v in h)Object.defineProperty(l,v,{enumerable:!0,get:h[v]})}t(e,{TimelineConnector:function(){return s},default:function(){return u}});var r=S(P),n=rt,o=S(et),a=Ze,i=Pu,c=qo;function f(l,h){(h==null||h>l.length)&&(h=l.length);for(var v=0,w=new Array(h);v=0)&&Object.prototype.propertyIsEnumerable.call(l,w)&&(v[w]=l[w])}return v}function x(l,h){if(l==null)return{};var v={},w=Object.keys(l),j,N;for(N=0;N=0)&&(v[j]=l[j]);return v}function m(l,h){return g(l)||O(l,h)||d(l,h)||T()}function d(l,h){if(l){if(typeof l=="string")return f(l,h);var v=Object.prototype.toString.call(l).slice(8,-1);if(v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set")return Array.from(v);if(v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v))return f(l,h)}}var s=r.default.forwardRef(function(l,h){var v=l.className,w=l.children,j=C(l,["className","children"]),N,k=(0,a.useTheme)().timelineConnector,A=k.styles,M=A.base,D=m((0,i.useTimelineItem)(),1),L=D[0],B=(0,o.default)(M.line),U=(0,n.twMerge)((0,o.default)(M.container),v);return r.default.createElement("span",b({},j,{ref:h,className:U,style:{top:"".concat(L,"px"),width:"".concat(L,"px"),opacity:L?1:0,height:"calc(100% - ".concat(L,"px)")}}),w&&r.default.isValidElement(w)?r.default.cloneElement(w,{className:(0,n.twMerge)(B,(N=w.props)===null||N===void 0?void 0:N.className)}):r.default.createElement("span",{className:B}))});s.propTypes={children:c.propTypeChildren,className:c.propTypeClassName},s.displayName="MaterialTailwind.TimelineConnector";var u=s})(Ik);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(s,u){for(var l in u)Object.defineProperty(s,l,{enumerable:!0,get:u[l]})}t(e,{Timeline:function(){return m},TimelineItem:function(){return c.default},TimelineIcon:function(){return f.default},TimelineBody:function(){return g.default},TimelineHeader:function(){return b.default},TimelineConnector:function(){return S.default},default:function(){return d}});var r=T(P),n=rt,o=T(et),a=Ze,i=qo,c=T(Pu),f=T(Ak),g=T(Rk),b=T(Mk),S=T(Ik);function O(){return O=Object.assign||function(s){for(var u=1;u=0)&&Object.prototype.propertyIsEnumerable.call(s,h)&&(l[h]=s[h])}return l}function x(s,u){if(s==null)return{};var l={},h=Object.keys(s),v,w;for(w=0;w=0)&&(l[v]=s[v]);return l}var m=r.default.forwardRef(function(s,u){var l=s.className,h=s.children,v=C(s,["className","children"]),w=(0,a.useTheme)().timeline,j=w.styles,N=j.base,k=(0,n.twMerge)((0,o.default)(N),l);return r.default.createElement("ul",O({ref:u},v,{className:k}),h)});m.propTypes={className:i.propTypeClassName,children:i.propTypeChildren},m.displayName="MaterialTailwind.Timeline";var d=Object.assign(m,{Item:c.default,Icon:f.default,Header:b.default,Body:g.default,Connector:S.default})})(jk);var Dk={},Lk={},Sb={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(g,b){for(var S in b)Object.defineProperty(g,S,{enumerable:!0,get:b[S]})}t(e,{propTypesActiveStep:function(){return o},propTypesIsLastStep:function(){return a},propTypesIsFirstStep:function(){return i},propTypesChildren:function(){return c},propTypesClassName:function(){return f}});var r=n(nt);function n(g){return g&&g.__esModule?g:{default:g}}var o=r.default.number,a=r.default.func,i=r.default.func,c=r.default.node,f=r.default.string})(Sb);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{Step:function(){return S},default:function(){return O}});var r=f(P),n=rt,o=f(et),a=Ze,i=Sb;function c(){return c=Object.assign||function(T){for(var C=1;C=0)&&Object.prototype.propertyIsEnumerable.call(T,m)&&(x[m]=T[m])}return x}function b(T,C){if(T==null)return{};var x={},m=Object.keys(T),d,s;for(s=0;s=0)&&(x[d]=T[d]);return x}var S=r.default.forwardRef(function(T,C){var x=T.className;T.activeClassName,T.completedClassName;var m=T.children,d=g(T,["className","activeClassName","completedClassName","children"]),s=(0,a.useTheme)().step,u=s.styles.base,l=(0,n.twMerge)((0,o.default)(u.initial),x);return r.default.createElement("div",c({},d,{ref:C,className:l}),m)});S.propTypes={className:i.propTypesClassName,activeClassName:i.propTypesClassName,completedClassName:i.propTypesClassName,children:i.propTypesChildren},S.displayName="MaterialTailwind.Step";var O=S})(Lk);(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(N,k){for(var A in k)Object.defineProperty(N,A,{enumerable:!0,get:k[A]})}t(e,{Stepper:function(){return w},Step:function(){return c.default},default:function(){return j}});var r=T(P),n=pr,o=rt,a=T(et),i=Ze,c=T(Lk),f=Sb;function g(N,k){(k==null||k>N.length)&&(k=N.length);for(var A=0,M=new Array(k);A=0)&&Object.prototype.propertyIsEnumerable.call(N,M)&&(A[M]=N[M])}return A}function l(N,k){if(N==null)return{};var A={},M=Object.keys(N),D,L;for(L=0;L=0)&&(A[D]=N[D]);return A}function h(N,k){return b(N)||C(N,k)||v(N,k)||x()}function v(N,k){if(N){if(typeof N=="string")return g(N,k);var A=Object.prototype.toString.call(N).slice(8,-1);if(A==="Object"&&N.constructor&&(A=N.constructor.name),A==="Map"||A==="Set")return Array.from(A);if(A==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(A))return g(N,k)}}var w=r.default.forwardRef(function(N,k){var A=N.activeStep,M=N.isFirstStep,D=N.isLastStep,L=N.className,B=N.lineClassName,U=N.activeLineClassName,Y=N.children,q=u(N,["activeStep","isFirstStep","isLastStep","className","lineClassName","activeLineClassName","children"]),z=(0,i.useTheme)(),$=z.stepper,K=z.step,X=$.styles.base,te=K.styles,me=te.base,de=r.default.useRef(null),ee=h(r.default.useState(0),2),Se=ee[0],pe=ee[1],fe=A===0,be=Array.isArray(Y)&&A===Y.length-1,ye=Array.isArray(Y)&&A>Y.length-1;r.default.useEffect(function(){if(de.current){var qe=Y,Je=de.current.getBoundingClientRect().width,Qe=Je/(qe.length-1);pe(Qe)}},[Y]);var Pe=r.default.useMemo(function(){if(!ye)return Se*A},[A,ye,Se]);(0,n.useMergeRefs)([k,de]);var Me=(0,o.twMerge)((0,a.default)(X.stepper),L),ke=(0,o.twMerge)((0,a.default)(X.line.initial),B),ce=(0,o.twMerge)(ke,(0,a.default)(X.line.active),U),je=(0,a.default)(me.active),He=(0,a.default)(me.completed);return r.default.useEffect(function(){D&&typeof D=="function"&&D(be),M&&typeof M=="function"&&M(fe)},[M,fe,D,be]),r.default.createElement("div",O({},q,{ref:de,className:Me}),r.default.createElement("div",{className:ke}),r.default.createElement("div",{className:ce,style:{width:"".concat(Pe,"px")}}),Array.isArray(Y)?Y.map(function(qe,Je){var Qe,Ge;return r.default.cloneElement(qe,s(m({key:Je},qe.props),{className:(0,o.twMerge)(qe.props.className,Je===A?(0,o.twMerge)(je,(Qe=qe.props)===null||Qe===void 0?void 0:Qe.activeClassName):Je=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.children,u=O(m,["children"]),l,h=(0,o.useSpeedDial)(),v=h.getReferenceProps,w=h.refs,j=(0,n.useMergeRefs)([d,w.setReference]);return r.default.cloneElement(s,g({},v(S(g({},u),{ref:j,className:(0,a.twMerge)(s==null||(l=s.props)===null||l===void 0?void 0:l.className,u==null?void 0:u.className)}))))});C.propTypes={children:i.propTypesChildren},C.displayName="MaterialTailwind.SpeedDialHandler";var x=C}(Ph)),Ph}var kh={},Bw;function Rz(){return Bw||(Bw=1,function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(m,d){for(var s in d)Object.defineProperty(m,s,{enumerable:!0,get:d[s]})}t(e,{SpeedDialContent:function(){return C},default:function(){return x}});var r=S(P),n=xr,o=pr,a=Cb(),i=Ze,c=rt,f=S(et),g=ku;function b(){return b=Object.assign||function(m){for(var d=1;d=0)&&Object.prototype.propertyIsEnumerable.call(m,u)&&(s[u]=m[u])}return s}function T(m,d){if(m==null)return{};var s={},u=Object.keys(m),l,h;for(h=0;h=0)&&(s[l]=m[l]);return s}var C=r.default.forwardRef(function(m,d){var s=m.children,u=m.className,l=O(m,["children","className"]),h=(0,i.useTheme)(),v=h.speedDialContent.styles,w=(0,a.useSpeedDial)(),j=w.x,N=w.y,k=w.refs,A=w.open,M=w.strategy,D=w.getFloatingProps,L=w.animation,B=(0,o.useMergeRefs)([d,k.setFloating]),U=(0,c.twMerge)((0,f.default)(v),u),Y=n.AnimatePresence;return r.default.createElement(n.LazyMotion,{features:n.domAnimation},r.default.createElement(Y,null,A&&r.default.createElement("div",b({},l,{ref:B,className:U,style:{position:M,top:N??0,left:j??0}},D()),r.default.Children.map(s,function(q){return r.default.createElement(n.m.div,{initial:"unmount",exit:"unmount",animate:A?"mount":"unmount",variants:L},q)}))))});C.propTypes={children:g.propTypesChildren,className:g.propTypesClassName},C.displayName="MaterialTailwind.SpeedDialContent";var x=C}(kh)),kh}var Fk={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(T,C){for(var x in C)Object.defineProperty(T,x,{enumerable:!0,get:C[x]})}t(e,{SpeedDialAction:function(){return S},default:function(){return O}});var r=f(P),n=Ze,o=rt,a=f(et),i=ku;function c(){return c=Object.assign||function(T){for(var C=1;C=0)&&Object.prototype.propertyIsEnumerable.call(T,m)&&(x[m]=T[m])}return x}function b(T,C){if(T==null)return{};var x={},m=Object.keys(T),d,s;for(s=0;s=0)&&(x[d]=T[d]);return x}var S=r.default.forwardRef(function(T,C){var x=T.className,m=T.children,d=g(T,["className","children"]),s=(0,n.useTheme)(),u=s.speedDialAction.styles,l=(0,o.twMerge)((0,a.default)(u),x);return r.default.createElement("button",c({},d,{ref:C,className:l}),m)});S.propTypes={children:i.propTypesChildren,className:i.propTypesClassName},S.displayName="SpeedDialAction";var O=S})(Fk);var Vw;function Cb(){return Vw||(Vw=1,function(e){Object.defineProperty(e,"__esModule",{value:!0});function t(h,v){for(var w in v)Object.defineProperty(h,w,{enumerable:!0,get:v[w]})}t(e,{SpeedDialContext:function(){return d},useSpeedDial:function(){return s},SpeedDial:function(){return u},SpeedDialHandler:function(){return c.default},SpeedDialContent:function(){return f.default},SpeedDialAction:function(){return g.default},default:function(){return l}});var r=O(P),n=pr,o=Ze,a=O(Tr),i=ku,c=O(Az()),f=O(Rz()),g=O(Fk);function b(h,v){(v==null||v>h.length)&&(v=h.length);for(var w=0,j=new Array(v);w.");return h}function u(h){var v=h.open,w=h.handler,j=h.placement,N=h.offset,k=h.dismiss,A=h.animate,M=h.children,D=(0,o.useTheme)(),L=D.speedDial.defaultProps,B=x(r.default.useState(!1),2),U=B[0],Y=B[1];v=v??U,w=w??Y,j=j??L.placement,N=N??L.offset,k=k??L.dismiss,A=A??L.animate;var q={unmount:{opacity:0,transform:"scale(0.5)",transition:{duration:.2,times:[.4,0,.2,1]}},mount:{opacity:1,transform:"scale(1)",transition:{duration:.2,times:[.4,0,.2,1]}}},z=(0,a.default)(q,A),$=(0,n.useFloatingNodeId)(),K=(0,n.useFloating)({open:v,nodeId:$,placement:j,onOpenChange:w,whileElementsMounted:n.autoUpdate,middleware:[(0,n.offset)(N),(0,n.flip)(),(0,n.shift)()]}),X=K.x,te=K.y,me=K.strategy,de=K.refs,ee=K.context,Se=(0,n.useInteractions)([(0,n.useHover)(ee,{handleClose:(0,n.safePolygon)()}),(0,n.useDismiss)(ee,k)]),pe=Se.getReferenceProps,fe=Se.getFloatingProps,be=r.default.useMemo(function(){return{x:X,y:te,strategy:me,refs:de,open:v,context:ee,getReferenceProps:pe,getFloatingProps:fe,animation:z}},[ee,fe,pe,de,me,X,te,v,z]);return r.default.createElement(d.Provider,{value:be},r.default.createElement("div",{className:"group"},r.default.createElement(n.FloatingNode,{id:$},M)))}u.propTypes={open:i.propTypesOpen,handler:i.propTypesHanlder,placement:i.propTypesPlacement,offset:i.propTypesOffset,dismiss:i.propTypesDismiss,className:i.propTypesClassName,children:i.propTypesChildren,animate:i.propTypesAnimate},u.displayName="MaterialTailwind.SpeedDial";var l=Object.assign(u,{Handler:c.default,Content:f.default,Action:g.default})}(Oh)),Oh}(function(e){Object.defineProperty(e,"__esModule",{value:!0}),t(X5,e),t(QO,e),t(XO,e),t(ZO,e),t(eP,e),t(tP,e),t(aP,e),t(iP,e),t(sP,e),t(Bf,e),t(KP,e),t(YP,e),t(ek,e),t(rk,e),t(ak,e),t(ik,e),t(sk,e),t(uk,e),t(ck,e),t(gk,e),t(mk,e),t(bk,e),t(vk,e),t(xk,e),t(_k,e),t(Sk,e),t(Tk,e),t(Pk,e),t(kk,e),t(Nk,e),t(Ek,e),t(jk,e),t(Dk,e),t(Cb(),e),t(Ze,e),t(Cm,e);function t(r,n){return Object.keys(r).forEach(function(o){o!=="default"&&!Object.prototype.hasOwnProperty.call(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:function(){return r[o]}})}),r}})(H);function Mz({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"}))}const Iz=P.forwardRef(Mz),Dz=Iz;function Lz({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"}))}const Fz=P.forwardRef(Lz),zz=Fz;function Bz({title:e,titleId:t,...r},n){return P.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true",ref:n,"aria-labelledby":t},r),e?P.createElement("title",{id:t},e):null,P.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))}const Vz=P.forwardRef(Bz),zk=Vz,Tb=xo.createContext(null);Tb.displayName="MaterialTailwindContext";function Uz(e,t){switch(t.type){case"OPEN_SIDENAV":return{...e,openSidenav:t.value};case"SIDENAV_TYPE":return{...e,sidenavType:t.value};case"SIDENAV_COLOR":return{...e,sidenavColor:t.value};case"TRANSPARENT_NAVBAR":return{...e,transparentNavbar:t.value};case"FIXED_NAVBAR":return{...e,fixedNavbar:t.value};case"OPEN_CONFIGURATOR":return{...e,openConfigurator:t.value};default:throw new Error(`Unhandled action type: ${t.type}`)}}function Ob({children:e}){const t={openSidenav:!1,sidenavColor:"gray",sidenavType:"white",transparentNavbar:!1,fixedNavbar:!0,openConfigurator:!1},[r,n]=xo.useReducer(Uz,t),o=xo.useMemo(()=>[r,n],[r,n]);return y.jsx(Tb.Provider,{value:o,children:e})}function Yf(){const e=xo.useContext(Tb);if(!e)throw new Error("useMaterialTailwindController should be used inside the MaterialTailwindControllerProvider.");return e}Ob.displayName="/src/context/index.jsx";Ob.propTypes={children:sn.node.isRequired};const Bk=(e,t)=>e({type:"OPEN_SIDENAV",value:t}),Wz=(e,t)=>e({type:"SIDENAV_COLOR",value:t}),$z=(e,t)=>e({type:"FIXED_NAVBAR",value:t}),Pb=(e,t)=>e({type:"OPEN_CONFIGURATOR",value:t}),Nh={none:0,read:1,full:2},kb=P.createContext(null);kb.displayName="AuthContext";const Hz=e=>!e||typeof e!="object"||Array.isArray(e)?{}:Object.entries(e).reduce((t,[r,n])=>{if(typeof r!="string"||!r)return t;const o=typeof n=="string"?n:String(n??"").trim();return t[r]=o||"none",t},{});function qz({children:e}){const[t,r]=P.useState({user:null,permissions:{},loading:!1,error:null,lastErrorCode:null,initialized:!1}),n=P.useCallback(g=>{const b=(g==null?void 0:g.user)??null,S=Hz(g==null?void 0:g.permissions);r({user:b,permissions:S,loading:!1,error:null,lastErrorCode:null,initialized:!0})},[]),o=P.useCallback(()=>{r(g=>({user:null,permissions:{},loading:!1,error:null,lastErrorCode:null,initialized:g.initialized||!0}))},[]),a=P.useCallback(async()=>{r(g=>({...g,loading:!0,error:null,lastErrorCode:null}));try{const g=await fetch("/api/auth/session",{credentials:"include"}),b=await g.json().catch(()=>({}));return g.ok?(n(b),{ok:!0,data:b}):(r({user:null,permissions:{},loading:!1,error:(b==null?void 0:b.error)??null,lastErrorCode:(b==null?void 0:b.error)??null,initialized:!0}),{ok:!1,status:g.status,error:(b==null?void 0:b.error)??null})}catch(g){const b=(g==null?void 0:g.message)||"NETWORK_ERROR";return r({user:null,permissions:{},loading:!1,error:b,lastErrorCode:"NETWORK_ERROR",initialized:!0}),{ok:!1,error:b}}},[n]),i=P.useCallback(async()=>{let g=null;try{const b=await fetch("/api/auth/logout",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"}});if(!b.ok){const S=await b.json().catch(()=>({})),O=new Error((S==null?void 0:S.error)||"LOGOUT_FAILED");throw O.code=(S==null?void 0:S.error)||`STATUS_${b.status}`,O}}catch(b){g=b}finally{o()}if(g)throw g},[o]),c=P.useCallback((g,b="full")=>{var C,x;if(!g||(C=t.user)!=null&&C.isSuperuser)return!0;const S=((x=t.permissions)==null?void 0:x[g])??"none",O=Nh[S]??0,T=Nh[b]??Nh.full;return O>=T},[t.permissions,t.user]),f=P.useMemo(()=>({user:t.user,permissions:t.permissions,loading:t.loading,error:t.error,lastErrorCode:t.lastErrorCode,initialized:t.initialized,isAuthenticated:!!t.user,refreshSession:a,setSession:n,clearSession:o,logout:i,hasPermission:c}),[t,a,n,o,i,c]);return y.jsx(kb.Provider,{value:f,children:e})}function Ur(){const e=P.useContext(kb);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}const Gz="/assets/stackpulse-846837e9.png";function Qf({brandImg:e,brandName:t,routes:r}){const[n,o]=Yf(),{sidenavColor:a,sidenavType:i,openSidenav:c}=n,{initialized:f,hasPermission:g}=Ur(),b={dark:"bg-gradient-to-br from-gray-800 to-gray-900",white:"bg-white shadow-sm",transparent:"bg-transparent"};return y.jsxs("aside",{className:`${b[i]} ${c?"translate-x-0":"-translate-x-80"} fixed inset-0 z-50 my-4 ml-4 h-[calc(100vh-32px)] w-72 rounded-xl transition-transform duration-300 xl:translate-x-0 border border-blue-gray-100`,children:[y.jsxs("div",{className:"relative py-6 px-8 text-right",children:[y.jsx("img",{src:Gz,alt:"StackPulse",className:"w-auto"}),y.jsx("span",{className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:"v0.5"}),y.jsx(H.IconButton,{variant:"text",size:"sm",ripple:!1,className:"absolute right-0 top-0 grid rounded-br-none rounded-tl-none",onClick:()=>Bk(o,!1),children:y.jsx(zk,{strokeWidth:2.5,className:"h-5 w-5 text-black"})})]}),y.jsx("div",{className:"m-4",children:r.map(({layout:S,title:O,pages:T},C)=>{const x=T.filter(({permission:m,hidden:d})=>{if(d)return!1;if(!m||!m.key)return!0;if(!f)return!1;const s=m.requiredLevel||m.level||"full";return g(m.key,s)});return S!=="dashboard"&&S!=="auth"||x.length===0&&!O?null:y.jsxs("ul",{className:"mb-4 flex flex-col gap-1",children:[O&&y.jsx("li",{className:"mx-3.5 mt-4 mb-2",children:y.jsx(H.Typography,{variant:"small",color:i==="dark"?"white":"blue-gray",className:"font-black uppercase opacity-75",children:O})}),x.map(({icon:m,name:d,path:s})=>y.jsx("li",{children:y.jsx(VI,{to:`/${S}${s}`,children:({isActive:u})=>y.jsxs(H.Button,{variant:u?"gradient":"text",color:u?a:i==="dark"?"white":"blue-gray",className:"flex items-center gap-4 px-4 capitalize",fullWidth:!0,children:[m,y.jsx(H.Typography,{color:"inherit",className:"font-medium capitalize",children:d})]})})},d))]},C)})})]})}Qf.defaultProps={brandImg:"/img/logo-ct.png",brandName:"Material Tailwind React"};Qf.propTypes={brandImg:sn.string,brandName:sn.string,routes:sn.arrayOf(sn.object).isRequired};Qf.displayName="/src/widgets/layout/sidnave.jsx";function Vk(){const[e,t]=Yf(),{fixedNavbar:r,openSidenav:n}=e,{pathname:o}=Ea();return o.split("/").filter(a=>a!==""),y.jsx(H.Navbar,{color:r?"white":"transparent",className:`rounded-xl transition-all ${r?"sticky top-4 z-40 py-3 shadow-md shadow-blue-gray-500/5":"px-0 py-1"}`,fullWidth:!0,blurred:r,children:y.jsxs("div",{className:"flex justify-between gap-6 flex-row items-center",children:[y.jsx("div",{className:"capitalize"}),y.jsxs("div",{className:"flex items-center",children:[y.jsx(H.IconButton,{variant:"text",color:"blue-gray",className:"grid xl:hidden",onClick:()=>Bk(t,!n),children:y.jsx(QI,{strokeWidth:3,className:"h-6 w-6 text-blue-gray-500"})}),y.jsx(H.IconButton,{variant:"text",color:"blue-gray",onClick:()=>Pb(t,!0),children:y.jsx(Q5,{className:"h-5 w-5 text-blue-gray-500 "})})]})]})})}Vk.displayName="/src/widgets/layout/dashboard-navbar.jsx";function Kz(e,t){t=Math.pow(10,t);const r=["K","M","B","T"];for(let o=r.length-1;o>=0;o--){var n=Math.pow(10,(o+1)*3);if(n<=e){e=Math.round(e*t/n)/t,e==1e3&&o{fetch("https://api.github.com/repos/creativetimofficial/material-tailwind-dashboard-react").then(g=>g.json()).then(g=>c(Kz(g.stargazers_count,1)))},[]),y.jsxs("aside",{className:`fixed top-0 right-0 z-50 h-screen w-96 bg-white px-2.5 shadow-lg transition-transform duration-300 ${r?"translate-x-0":"translate-x-96"}`,children:[y.jsxs("div",{className:"flex items-start justify-between px-6 pt-8 pb-6",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Dashboard Configurator"}),y.jsx(H.Typography,{className:"font-normal text-blue-gray-600",children:"See our dashboard options."})]}),y.jsx(H.IconButton,{variant:"text",color:"blue-gray",onClick:()=>Pb(t,!1),children:y.jsx(zk,{strokeWidth:2.5,className:"h-5 w-5"})})]}),y.jsxs("div",{className:"py-4 px-6",children:[y.jsxs("div",{className:"mb-12",children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",children:"Sidenav Colors"}),y.jsx("div",{className:"mt-3 flex items-center gap-2",children:Object.keys(f).map(g=>y.jsx("span",{className:`h-6 w-6 cursor-pointer rounded-full border bg-gradient-to-br transition-transform hover:scale-105 ${f[g]} ${n===g?"border-black":"border-transparent"}`,onClick:()=>Wz(t,g)},g))})]}),y.jsxs("div",{className:"mb-12",children:[y.jsx("hr",{}),y.jsxs("div",{className:"flex items-center justify-between py-5",children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",children:"Navbar Fixed"}),y.jsx(H.Switch,{defaultChecked:!0,id:"navbar-fixed",value:a,onChange:()=>$z(t,!a)})]})]})]})]})}Uk.displayName="/src/widgets/layout/configurator.jsx";function Wk(){const e=new Date().getFullYear();return y.jsx("footer",{children:y.jsx("div",{className:"flex w-full flex-wrap items-center justify-center md:justify-end",children:y.jsxs(H.Typography,{variant:"small",className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:["StackPulse: © ",e," by Michael Böhmländer"]})})})}Wk.displayName="/src/widgets/layout/footer.jsx";sn.string,sn.arrayOf(sn.object).isRequired,sn.node;const _o=Object.create(null);_o.open="0";_o.close="1";_o.ping="2";_o.pong="3";_o.message="4";_o.upgrade="5";_o.noop="6";const ed=Object.create(null);Object.keys(_o).forEach(e=>{ed[_o[e]]=e});const cg={type:"error",data:"parser error"},$k=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",Hk=typeof ArrayBuffer=="function",qk=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,Nb=({type:e,data:t},r,n)=>$k&&t instanceof Blob?r?n(t):Uw(t,n):Hk&&(t instanceof ArrayBuffer||qk(t))?r?n(t):Uw(new Blob([t]),n):n(_o[e]+(t||"")),Uw=(e,t)=>{const r=new FileReader;return r.onload=function(){const n=r.result.split(",")[1];t("b"+(n||""))},r.readAsDataURL(e)};function Ww(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Eh;function Yz(e,t){if($k&&e.data instanceof Blob)return e.data.arrayBuffer().then(Ww).then(t);if(Hk&&(e.data instanceof ArrayBuffer||qk(e.data)))return t(Ww(e.data));Nb(e,!1,r=>{Eh||(Eh=new TextEncoder),t(Eh.encode(r))})}const $w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",yl=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e<$w.length;e++)yl[$w.charCodeAt(e)]=e;const Qz=e=>{let t=e.length*.75,r=e.length,n,o=0,a,i,c,f;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const g=new ArrayBuffer(t),b=new Uint8Array(g);for(n=0;n>4,b[o++]=(i&15)<<4|c>>2,b[o++]=(c&3)<<6|f&63;return g},Xz=typeof ArrayBuffer=="function",Eb=(e,t)=>{if(typeof e!="string")return{type:"message",data:Gk(e,t)};const r=e.charAt(0);return r==="b"?{type:"message",data:Zz(e.substring(1),t)}:ed[r]?e.length>1?{type:ed[r],data:e.substring(1)}:{type:ed[r]}:cg},Zz=(e,t)=>{if(Xz){const r=Qz(e);return Gk(r,t)}else return{base64:!0,data:e}},Gk=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},Kk=String.fromCharCode(30),Jz=(e,t)=>{const r=e.length,n=new Array(r);let o=0;e.forEach((a,i)=>{Nb(a,!1,c=>{n[i]=c,++o===r&&t(n.join(Kk))})})},eB=(e,t)=>{const r=e.split(Kk),n=[];for(let o=0;o{const n=r.length;let o;if(n<126)o=new Uint8Array(1),new DataView(o.buffer).setUint8(0,n);else if(n<65536){o=new Uint8Array(3);const a=new DataView(o.buffer);a.setUint8(0,126),a.setUint16(1,n)}else{o=new Uint8Array(9);const a=new DataView(o.buffer);a.setUint8(0,127),a.setBigUint64(1,BigInt(n))}e.data&&typeof e.data!="string"&&(o[0]|=128),t.enqueue(o),t.enqueue(r)})}})}let jh;function Sc(e){return e.reduce((t,r)=>t+r.length,0)}function Cc(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let n=0;for(let o=0;oMath.pow(2,53-32)-1){c.enqueue(cg);break}o=b*Math.pow(2,32)+g.getUint32(4),n=3}else{if(Sc(r)e){c.enqueue(cg);break}}}})}const Yk=4;function lr(e){if(e)return nB(e)}function nB(e){for(var t in lr.prototype)e[t]=lr.prototype[t];return e}lr.prototype.on=lr.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};lr.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this};lr.prototype.off=lr.prototype.removeListener=lr.prototype.removeAllListeners=lr.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var r=this._callbacks["$"+e];if(!r)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var n,o=0;otypeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,r)=>r(t,0))(),Cn=(()=>typeof self<"u"?self:typeof window<"u"?window:Function("return this")())(),oB="arraybuffer";function Qk(e,...t){return t.reduce((r,n)=>(e.hasOwnProperty(n)&&(r[n]=e[n]),r),{})}const aB=Cn.setTimeout,iB=Cn.clearTimeout;function Zf(e,t){t.useNativeTimers?(e.setTimeoutFn=aB.bind(Cn),e.clearTimeoutFn=iB.bind(Cn)):(e.setTimeoutFn=Cn.setTimeout.bind(Cn),e.clearTimeoutFn=Cn.clearTimeout.bind(Cn))}const sB=1.33;function lB(e){return typeof e=="string"?uB(e):Math.ceil((e.byteLength||e.size)*sB)}function uB(e){let t=0,r=0;for(let n=0,o=e.length;n=57344?r+=3:(n++,r+=4);return r}function Xk(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function cB(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function dB(e){let t={},r=e.split("&");for(let n=0,o=r.length;n{this.readyState="paused",t()};if(this._polling||!this.writable){let n=0;this._polling&&(n++,this.once("pollComplete",function(){--n||r()})),this.writable||(n++,this.once("drain",function(){--n||r()}))}else r()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const r=n=>{if(this.readyState==="opening"&&n.type==="open"&&this.onOpen(),n.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(n)};eB(t,this.socket.binaryType).forEach(r),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,Jz(t,r=>{this.doWrite(r,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",r=this.query||{};return this.opts.timestampRequests!==!1&&(r[this.opts.timestampParam]=Xk()),!this.supportsBinary&&!r.sid&&(r.b64=1),this.createUri(t,r)}}let Zk=!1;try{Zk=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const hB=Zk;function gB(){}class mB extends pB{constructor(t){if(super(t),typeof location<"u"){const r=location.protocol==="https:";let n=location.port;n||(n=r?"443":"80"),this.xd=typeof location<"u"&&t.hostname!==location.hostname||n!==t.port}}doWrite(t,r){const n=this.request({method:"POST",data:t});n.on("success",r),n.on("error",(o,a)=>{this.onError("xhr post error",o,a)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(r,n)=>{this.onError("xhr poll error",r,n)}),this.pollXhr=t}}let as=class td extends lr{constructor(t,r,n){super(),this.createRequest=t,Zf(this,n),this._opts=n,this._method=n.method||"GET",this._uri=r,this._data=n.data!==void 0?n.data:null,this._create()}_create(){var t;const r=Qk(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");r.xdomain=!!this._opts.xd;const n=this._xhr=this.createRequest(r);try{n.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let o in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(o)&&n.setRequestHeader(o,this._opts.extraHeaders[o])}}catch{}if(this._method==="POST")try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{n.setRequestHeader("Accept","*/*")}catch{}(t=this._opts.cookieJar)===null||t===void 0||t.addCookies(n),"withCredentials"in n&&(n.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(n.timeout=this._opts.requestTimeout),n.onreadystatechange=()=>{var o;n.readyState===3&&((o=this._opts.cookieJar)===null||o===void 0||o.parseCookies(n.getResponseHeader("set-cookie"))),n.readyState===4&&(n.status===200||n.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof n.status=="number"?n.status:0)},0))},n.send(this._data)}catch(o){this.setTimeoutFn(()=>{this._onError(o)},0);return}typeof document<"u"&&(this._index=td.requestsCount++,td.requests[this._index]=this)}_onError(t){this.emitReserved("error",t,this._xhr),this._cleanup(!0)}_cleanup(t){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=gB,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete td.requests[this._index],this._xhr=null}}_onLoad(){const t=this._xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};as.requestsCount=0;as.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Hw);else if(typeof addEventListener=="function"){const e="onpagehide"in Cn?"pagehide":"unload";addEventListener(e,Hw,!1)}}function Hw(){for(let e in as.requests)as.requests.hasOwnProperty(e)&&as.requests[e].abort()}const bB=function(){const e=Jk({xdomain:!1});return e&&e.responseType!==null}();class vB extends mB{constructor(t){super(t);const r=t&&t.forceBase64;this.supportsBinary=bB&&!r}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new as(Jk,this.uri(),t)}}function Jk(e){const t=e.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||hB))return new XMLHttpRequest}catch{}if(!t)try{return new Cn[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const eN=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class yB extends jb{get name(){return"websocket"}doOpen(){const t=this.uri(),r=this.opts.protocols,n=eN?{}:Qk(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(t,r,n)}catch(o){return this.emitReserved("error",o)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let r=0;r{try{this.doWrite(n,a)}catch{}o&&Xf(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",r=this.query||{};return this.opts.timestampRequests&&(r[this.opts.timestampParam]=Xk()),this.supportsBinary||(r.b64=1),this.createUri(t,r)}}const Ah=Cn.WebSocket||Cn.MozWebSocket;class xB extends yB{createSocket(t,r,n){return eN?new Ah(t,r,n):r?new Ah(t,r):new Ah(t)}doWrite(t,r){this.ws.send(r)}}class wB extends jb{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(t){return this.emitReserved("error",t)}this._transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(t=>{const r=rB(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=t.readable.pipeThrough(r).getReader(),o=tB();o.readable.pipeTo(t.writable),this._writer=o.writable.getWriter();const a=()=>{n.read().then(({done:c,value:f})=>{c||(this.onPacket(f),a())}).catch(c=>{})};a();const i={type:"open"};this.query.sid&&(i.data=`{"sid":"${this.query.sid}"}`),this._writer.write(i).then(()=>this.onOpen())})})}write(t){this.writable=!1;for(let r=0;r{o&&Xf(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const _B={websocket:xB,webtransport:wB,polling:vB},SB=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,CB=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function dg(e){if(e.length>8e3)throw"URI too long";const t=e,r=e.indexOf("["),n=e.indexOf("]");r!=-1&&n!=-1&&(e=e.substring(0,r)+e.substring(r,n).replace(/:/g,";")+e.substring(n,e.length));let o=SB.exec(e||""),a={},i=14;for(;i--;)a[CB[i]]=o[i]||"";return r!=-1&&n!=-1&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=TB(a,a.path),a.queryKey=OB(a,a.query),a}function TB(e,t){const r=/\/{2,9}/g,n=t.replace(r,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&n.splice(0,1),t.slice(-1)=="/"&&n.splice(n.length-1,1),n}function OB(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(n,o,a){o&&(r[o]=a)}),r}const fg=typeof addEventListener=="function"&&typeof removeEventListener=="function",rd=[];fg&&addEventListener("offline",()=>{rd.forEach(e=>e())},!1);class Sa extends lr{constructor(t,r){if(super(),this.binaryType=oB,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,t&&typeof t=="object"&&(r=t,t=null),t){const n=dg(t);r.hostname=n.host,r.secure=n.protocol==="https"||n.protocol==="wss",r.port=n.port,n.query&&(r.query=n.query)}else r.host&&(r.hostname=dg(r.host).host);Zf(this,r),this.secure=r.secure!=null?r.secure:typeof location<"u"&&location.protocol==="https:",r.hostname&&!r.port&&(r.port=this.secure?"443":"80"),this.hostname=r.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=r.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},r.transports.forEach(n=>{const o=n.prototype.name;this.transports.push(o),this._transportsByName[o]=n}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},r),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=dB(this.opts.query)),fg&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},rd.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const r=Object.assign({},this.opts.query);r.EIO=Yk,r.transport=t,this.id&&(r.sid=this.id);const n=Object.assign({},this.opts,{query:r,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new this._transportsByName[t](n)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const t=this.opts.rememberUpgrade&&Sa.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const r=this.createTransport(t);r.open(),this.setTransport(r)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",r=>this._onClose("transport close",r))}onOpen(){this.readyState="open",Sa.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const r=new Error("server error");r.code=t.data,this._onError(r);break;case"message":this.emitReserved("data",t.data),this.emitReserved("message",t.data);break}}onHandshake(t){this.emitReserved("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this._pingInterval=t.pingInterval,this._pingTimeout=t.pingTimeout,this._maxPayload=t.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const t=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+t,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},t),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this._getWritablePackets();this.transport.send(t),this._prevBufferLen=t.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let r=1;for(let n=0;n0&&r>this._maxPayload)return this.writeBuffer.slice(0,n);r+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const t=Date.now()>this._pingTimeoutTime;return t&&(this._pingTimeoutTime=0,Xf(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),t}write(t,r,n){return this._sendPacket("message",t,r,n),this}send(t,r,n){return this._sendPacket("message",t,r,n),this}_sendPacket(t,r,n,o){if(typeof r=="function"&&(o=r,r=void 0),typeof n=="function"&&(o=n,n=null),this.readyState==="closing"||this.readyState==="closed")return;n=n||{},n.compress=n.compress!==!1;const a={type:t,data:r,options:n};this.emitReserved("packetCreate",a),this.writeBuffer.push(a),o&&this.once("flush",o),this.flush()}close(){const t=()=>{this._onClose("forced close"),this.transport.close()},r=()=>{this.off("upgrade",r),this.off("upgradeError",r),t()},n=()=>{this.once("upgrade",r),this.once("upgradeError",r)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?n():t()}):this.upgrading?n():t()),this}_onError(t){if(Sa.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",t),this._onClose("transport error",t)}_onClose(t,r){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),fg&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const n=rd.indexOf(this._offlineEventListener);n!==-1&&rd.splice(n,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,r),this.writeBuffer=[],this._prevBufferLen=0}}}Sa.protocol=Yk;class PB extends Sa{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let t=0;t{n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",S=>{if(!n)if(S.type==="pong"&&S.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",r),!r)return;Sa.priorWebsocketSuccess=r.name==="websocket",this.transport.pause(()=>{n||this.readyState!=="closed"&&(b(),this.setTransport(r),r.send([{type:"upgrade"}]),this.emitReserved("upgrade",r),r=null,this.upgrading=!1,this.flush())})}else{const O=new Error("probe error");O.transport=r.name,this.emitReserved("upgradeError",O)}}))};function a(){n||(n=!0,b(),r.close(),r=null)}const i=S=>{const O=new Error("probe error: "+S);O.transport=r.name,a(),this.emitReserved("upgradeError",O)};function c(){i("transport closed")}function f(){i("socket closed")}function g(S){r&&S.name!==r.name&&a()}const b=()=>{r.removeListener("open",o),r.removeListener("error",i),r.removeListener("close",c),this.off("close",f),this.off("upgrading",g)};r.once("open",o),r.once("error",i),r.once("close",c),this.once("close",f),this.once("upgrading",g),this._upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{n||r.open()},200):r.open()}onHandshake(t){this._upgrades=this._filterUpgrades(t.upgrades),super.onHandshake(t)}_filterUpgrades(t){const r=[];for(let n=0;n_B[o]).filter(o=>!!o)),super(t,n)}};function NB(e,t="",r){let n=e;r=r||typeof location<"u"&&location,e==null&&(e=r.protocol+"//"+r.host),typeof e=="string"&&(e.charAt(0)==="/"&&(e.charAt(1)==="/"?e=r.protocol+e:e=r.host+e),/^(https?|wss?):\/\//.test(e)||(typeof r<"u"?e=r.protocol+"//"+e:e="https://"+e),n=dg(e)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";const a=n.host.indexOf(":")!==-1?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+a+":"+n.port+t,n.href=n.protocol+"://"+a+(r&&r.port===n.port?"":":"+n.port),n}const EB=typeof ArrayBuffer=="function",jB=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,tN=Object.prototype.toString,AB=typeof Blob=="function"||typeof Blob<"u"&&tN.call(Blob)==="[object BlobConstructor]",RB=typeof File=="function"||typeof File<"u"&&tN.call(File)==="[object FileConstructor]";function Ab(e){return EB&&(e instanceof ArrayBuffer||jB(e))||AB&&e instanceof Blob||RB&&e instanceof File}function nd(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let r=0,n=e.length;r=0&&e.num{delete this.acks[t];for(let c=0;c{this.io.clearTimeoutFn(a),r.apply(this,c)};i.withError=!0,this.acks[t]=i}emitWithAck(t,...r){return new Promise((n,o)=>{const a=(i,c)=>i?o(i):n(c);a.withError=!0,r.push(a),this.emit(t,...r)})}_addToQueue(t){let r;typeof t[t.length-1]=="function"&&(r=t.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((o,...a)=>n!==this._queue[0]?void 0:(o!==null?n.tryCount>this._opts.retries&&(this._queue.shift(),r&&r(o)):(this._queue.shift(),r&&r(null,...a)),n.pending=!1,this._drainQueue())),this._queue.push(n),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const r=this._queue[0];r.pending&&!t||(r.pending=!0,r.tryCount++,this.flags=r.flags,this.emit.apply(this,r.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:wt.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,r){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,r),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(t=>{if(!this.sendBuffer.some(n=>String(n.id)===t)){const n=this.acks[t];delete this.acks[t],n.withError&&n.call(this,new Error("socket has been disconnected"))}})}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case wt.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case wt.EVENT:case wt.BINARY_EVENT:this.onevent(t);break;case wt.ACK:case wt.BINARY_ACK:this.onack(t);break;case wt.DISCONNECT:this.ondisconnect();break;case wt.CONNECT_ERROR:this.destroy();const n=new Error(t.data.message);n.data=t.data.data,this.emitReserved("connect_error",n);break}}onevent(t){const r=t.data||[];t.id!=null&&r.push(this.ack(t.id)),this.connected?this.emitEvent(r):this.receiveBuffer.push(Object.freeze(r))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const r=this._anyListeners.slice();for(const n of r)n.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const r=this;let n=!1;return function(...o){n||(n=!0,r.packet({type:wt.ACK,id:t,data:o}))}}onack(t){const r=this.acks[t.id];typeof r=="function"&&(delete this.acks[t.id],r.withError&&t.data.unshift(null),r.apply(this,t.data))}onconnect(t,r){this.id=t,this.recovered=r&&this._pid===r,this._pid=r,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:wt.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const r=this._anyListeners;for(let n=0;n0&&e.jitter<=1?e.jitter:0,this.attempts=0}Fs.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+r:e-r}return Math.min(e,this.max)|0};Fs.prototype.reset=function(){this.attempts=0};Fs.prototype.setMin=function(e){this.ms=e};Fs.prototype.setMax=function(e){this.max=e};Fs.prototype.setJitter=function(e){this.jitter=e};class gg extends lr{constructor(t,r){var n;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(r=t,t=void 0),r=r||{},r.path=r.path||"/socket.io",this.opts=r,Zf(this,r),this.reconnection(r.reconnection!==!1),this.reconnectionAttempts(r.reconnectionAttempts||1/0),this.reconnectionDelay(r.reconnectionDelay||1e3),this.reconnectionDelayMax(r.reconnectionDelayMax||5e3),this.randomizationFactor((n=r.randomizationFactor)!==null&&n!==void 0?n:.5),this.backoff=new Fs({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(r.timeout==null?2e4:r.timeout),this._readyState="closed",this.uri=t;const o=r.parser||BB;this.encoder=new o.Encoder,this.decoder=new o.Decoder,this._autoConnect=r.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,t||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var r;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(r=this.backoff)===null||r===void 0||r.setMin(t),this)}randomizationFactor(t){var r;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(r=this.backoff)===null||r===void 0||r.setJitter(t),this)}reconnectionDelayMax(t){var r;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(r=this.backoff)===null||r===void 0||r.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new kB(this.uri,this.opts);const r=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const o=Wn(r,"open",function(){n.onopen(),t&&t()}),a=c=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",c),t?t(c):this.maybeReconnectOnOpen()},i=Wn(r,"error",a);if(this._timeout!==!1){const c=this._timeout,f=this.setTimeoutFn(()=>{o(),a(new Error("timeout")),r.close()},c);this.opts.autoUnref&&f.unref(),this.subs.push(()=>{this.clearTimeoutFn(f)})}return this.subs.push(o),this.subs.push(i),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(Wn(t,"ping",this.onping.bind(this)),Wn(t,"data",this.ondata.bind(this)),Wn(t,"error",this.onerror.bind(this)),Wn(t,"close",this.onclose.bind(this)),Wn(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(r){this.onclose("parse error",r)}}ondecoded(t){Xf(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,r){let n=this.nsps[t];return n?this._autoConnect&&!n.active&&n.connect():(n=new rN(this,t,r),this.nsps[t]=n),n}_destroy(t){const r=Object.keys(this.nsps);for(const n of r)if(this.nsps[n].active)return;this._close()}_packet(t){const r=this.encoder.encode(t);for(let n=0;nt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(t,r){var n;this.cleanup(),(n=this.engine)===null||n===void 0||n.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,r),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const r=this.backoff.duration();this._reconnecting=!0;const n=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(o=>{o?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",o)):t.onreconnect()}))},r);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const cl={};function od(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const r=NB(e,t.path||"/socket.io"),n=r.source,o=r.id,a=r.path,i=cl[o]&&a in cl[o].nsps,c=t.forceNew||t["force new connection"]||t.multiplex===!1||i;let f;return c?f=new gg(n,t):(cl[o]||(cl[o]=new gg(n,t)),f=cl[o]),r.query&&!t.query&&(t.query=r.queryKey),f.socket(r.path,t)}Object.assign(od,{Manager:gg,Socket:rN,io:od,connect:od});const nN=P.createContext(null),Rh={success:{container:"border-mossGreen-500/80 bg-mossGreen-900/90 text-white",accent:"bg-mossGreen-400"},warning:{container:"border-warmAmberGlow-500/80 bg-warmAmberGlow-900/90 text-white",accent:"bg-warmAmberGlow-400"},error:{container:"border-sunsetCoral-500/80 bg-sunsetCoral-900/90 text-white",accent:"bg-sunsetCoral-400"},info:{container:"border-arcticBlue-500 bg-arcticBlue-900/90 text-white",accent:"bg-arcticBlue-400"}},UB=6e3;function WB({children:e}){const[t,r]=P.useState([]),n=P.useRef(new Map),o=P.useCallback(c=>{r(g=>g.filter(b=>b.id!==c));const f=n.current.get(c);f&&typeof window<"u"&&window.clearTimeout(f),n.current.delete(c)},[]),a=P.useCallback(({id:c,title:f,description:g,variant:b="info",duration:S=UB}={})=>{const O=c??`${Date.now()}-${Math.random().toString(16).slice(2)}`,T=Rh[b]?b:"info";if(r(C=>[...C.filter(m=>m.id!==O),{id:O,title:f,description:g,variant:T}]),S!==null&&S!==1/0&&typeof window<"u"){const C=window.setTimeout(()=>{o(O)},S),x=n.current.get(O);x&&window.clearTimeout(x),n.current.set(O,C)}return O},[o]);P.useEffect(()=>()=>{typeof window>"u"||(n.current.forEach(c=>window.clearTimeout(c)),n.current.clear())},[]);const i=P.useMemo(()=>({showToast:a,dismissToast:o}),[a,o]);return y.jsxs(nN.Provider,{value:i,children:[e,y.jsx("div",{className:"pointer-events-none fixed right-4 top-4 z-50 flex w-80 max-w-full flex-col gap-3",children:t.map(c=>{const f=Rh[c.variant]??Rh.info;return y.jsx("div",{className:`pointer-events-auto overflow-hidden rounded-lg border px-4 py-3 shadow-xl backdrop-blur ${f.container}`,children:y.jsxs("div",{className:"flex items-start gap-3",children:[y.jsx("span",{className:`mt-1 h-2 flex-shrink-0 w-2 rounded-full ${f.accent}`}),y.jsxs("div",{className:"flex-1",children:[c.title&&y.jsx("p",{className:"text-sm font-semibold",children:c.title}),c.description&&y.jsx("p",{className:"mt-1 text-sm leading-snug text-white/80",children:c.description})]}),y.jsx("button",{type:"button",onClick:()=>o(c.id),className:"ml-2 rounded-md p-1 text-xs uppercase tracking-wide text-white/60 transition hover:text-white/90",children:"Schließen"})]})},c.id)})})]})}function zs(){const e=P.useContext(nN);if(!e)throw new Error("useToast must be used within a ToastProvider");return e}const oN=P.createContext(null),$B={maintenance:null,update:null,script:null,ssh:null,loading:!0,error:"",lastUpdated:null};function HB({children:e}){var k,A;const{isAuthenticated:t,hasPermission:r,user:n}=Ur(),o=!!(t&&(n!=null&&n.isSuperuser||r("maintenance-access","read"))),[a,i]=P.useState($B),c=P.useRef(null),f=P.useRef(!1),g=P.useCallback(M=>{i(D=>({...D,...M}))},[]),b=P.useCallback(async()=>{var M,D;if(!o)return g({loading:!1,error:""}),null;g({loading:!0,error:""});try{const B=(await lt.get("/api/maintenance/config")).data??{};g({maintenance:B.maintenance??null,update:B.update??null,script:B.script??null,ssh:B.ssh??null,loading:!1,error:"",lastUpdated:new Date})}catch(L){const B=((D=(M=L.response)==null?void 0:M.data)==null?void 0:D.error)||L.message||"Fehler beim Laden der Wartungsdaten";g({loading:!1,error:B})}},[g,o]),S=P.useCallback(async()=>{var M,D;if(o)try{const B=(await lt.get("/api/maintenance/update-status")).data??{};i(U=>({...U,maintenance:B.maintenance??U.maintenance,update:B.update??U.update,error:""}))}catch(L){const B=((D=(M=L.response)==null?void 0:M.data)==null?void 0:D.error)||L.message||"Fehler beim Aktualisieren des Wartungsstatus";i(U=>({...U,error:B}))}},[o]);P.useEffect(()=>{if(!o){g({loading:!1,error:""});return}b()},[g,b,o]),P.useEffect(()=>{var M;if(o){if((M=a.update)!=null&&M.running){S();const D=setInterval(()=>{S()},5e3);return c.current=D,()=>clearInterval(D)}c.current&&(clearInterval(c.current),c.current=null)}},[o,(k=a.update)==null?void 0:k.running,S]),P.useEffect(()=>{var D;const M=!!((D=a.update)!=null&&D.running);o&&!M&&f.current&&b(),f.current=M},[o,(A=a.update)==null?void 0:A.running,b]);const O=P.useCallback(async(M={})=>{await lt.post("/api/maintenance/portainer-update",M),await S()},[S]),T=P.useCallback(async M=>{await lt.put("/api/maintenance/update-script",{script:M}),await b()},[b]),C=P.useCallback(async()=>{await lt.delete("/api/maintenance/update-script"),await b()},[b]),x=P.useCallback(async M=>{await lt.put("/api/maintenance/ssh-config",M),await b()},[b]),m=P.useCallback(async()=>{await lt.delete("/api/maintenance/ssh-config"),await b()},[b]),d=P.useCallback(async({active:M,message:D}={})=>{var Y;const L={active:!!M};D!==void 0&&(L.message=D);const U=((Y=(await lt.post("/api/maintenance/mode",L)).data)==null?void 0:Y.maintenance)??null;return g({maintenance:U,error:""}),U},[g]),s=P.useCallback(async M=>(await lt.post("/api/maintenance/test-ssh",M??{})).data,[]),u=P.useCallback(async()=>{const D=(await lt.get("/api/auth/superuser/status")).data??{};return{exists:!!D.exists,user:D.user??null}},[]),l=P.useCallback(async()=>(await lt.get("/api/setup/status")).data??{},[]),h=P.useCallback(async M=>(await lt.delete(`/api/setup/servers/${M}`)).data??{success:!1},[]),v=P.useCallback(async(M,D)=>(await lt.put(`/api/setup/servers/${M}/api-key`,{apiKey:D})).data??{success:!1},[]),w=P.useCallback(async M=>(await lt.put("/api/setup/self-stack",{selfStackId:M})).data??{success:!1},[]),j=P.useCallback(async()=>(await lt.delete("/api/auth/superuser")).data??{success:!1},[]),N=P.useMemo(()=>({maintenance:a.maintenance,update:a.update,script:a.script,ssh:a.ssh,loading:a.loading,error:a.error,lastUpdated:a.lastUpdated,refreshConfig:b,refreshUpdateStatus:S,setMaintenanceMode:d,triggerUpdate:O,saveScript:T,resetScript:C,saveSshConfig:x,deleteSshConfig:m,testSshConnection:s,fetchSuperuserStatus:u,fetchSetupStatus:l,deleteSetupServer:h,updateSetupApiKey:v,updateSelfStackId:w,removeSuperuserAccount:j}),[a,b,S,d,O,T,C,x,m,s,u,l,h,v,w,j]);return y.jsx(oN.Provider,{value:N,children:e})}function Aa(){const e=P.useContext(oN);if(!e)throw new Error("useMaintenance must be used within a MaintenanceProvider");return e}const qB=[{value:"10",label:"10"},{value:"25",label:"25"},{value:"50",label:"50"},{value:"100",label:"100"},{value:"all",label:"Alle"}],Gw="50",aN=P.createContext(null),GB=(e,t)=>{const r=Number(e);if(Number.isFinite(r)&&r>0)return r;const n=Number(t);return Number.isFinite(n)&&n>0?n:1};function KB({children:e,initialPage:t=1,initialPerPage:r=Gw,perPageOptions:n=qB}){const[o,a]=P.useState(t),[i,c]=P.useState(r),[f,g]=P.useState(0),[b,S]=P.useState(0),O=P.useRef(t),T=P.useRef(r),C=P.useMemo(()=>new Set(n.map(A=>String(A.value))),[n]),x=i==="all",m=P.useCallback(()=>x?null:GB(i,r),[i,x,r]),d=P.useCallback((A,M)=>{g(Math.max(0,Number(A)||0)),S(Math.max(0,Number(M)||0))},[]),s=P.useCallback(()=>{a(O.current??1),c(T.current??Gw),g(0),S(0)},[]),u=P.useCallback((A,{resetPage:M=!0}={})=>{if(A==null)return;const D=String(A);C.has(D)&&(c(D),M&&a(1))},[C]),l=P.useCallback(A=>{var D;const M=typeof A=="string"?A:(D=A==null?void 0:A.target)==null?void 0:D.value;u(M,{resetPage:!0})},[u]),h=P.useCallback(A=>{if(x)return;const M=Number(A);if(!Number.isFinite(M)||M<1)return;const D=m();if(!D)return;const L=Math.max(1,Math.ceil((f||0)/D));M>L||a(M)},[x,m,f]),v=P.useMemo(()=>{if(x)return 1;const A=m();return A?Math.max(1,Math.ceil((f||0)/A)):1},[x,m,f]),w=P.useMemo(()=>{if(!f)return 0;if(x)return 1;const A=m();return(o-1)*A+1},[f,x,m,o]),j=P.useMemo(()=>{if(!f)return 0;if(x)return f;const A=m(),M=(o-1)*A+(b||A);return Math.min(f,M)},[f,x,m,o,b]),N=P.useMemo(()=>f?x?`Zeige alle ${f.toLocaleString()} Einträge`:`Zeige ${w.toLocaleString()} – ${j.toLocaleString()} von ${f.toLocaleString()} Einträgen`:"Keine Einträge",[f,x,w,j]),k=P.useMemo(()=>({page:o,perPage:i,perPageOptions:n,perPageIsAll:x,totalItems:f,visibleItems:b,totalPages:v,rangeStart:w,rangeEnd:j,summaryLabel:N,setPage:a,setPerPage:u,setTotals:d,setTotalItems:g,setVisibleItems:S,handlePageChange:h,handlePerPageChange:l,validPerPageValues:C,resetPagination:s}),[o,i,n,x,f,b,v,w,j,N,d,u,h,l,C,s]);return y.jsx(aN.Provider,{value:k,children:e})}function Nu(){const e=P.useContext(aN);if(!e)throw new Error("usePage must be used within a PageProvider");return e}function Jf({disabled:e=!1}){const{summaryLabel:t,perPageIsAll:r,page:n,totalPages:o,handlePageChange:a}=Nu();return y.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[y.jsx("span",{children:t}),!r&&y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx("button",{onClick:()=>a(n-1),disabled:e||n<=1,className:"rounded-md border border-slate-300 p-2.5 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-slate-800 hover:border-slate-800 focus:text-white focus:bg-slate-800 focus:border-slate-800 active:border-slate-800 active:text-white active:bg-slate-800 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none",type:"button",children:y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"h-4 w-4",children:y.jsx("path",{d:"M11.03 3.97a.75.75 0 0 1 0 1.06l-6.22 6.22H21a.75.75 0 0 1 0 1.5H4.81l6.22 6.22a.75.75 0 1 1-1.06 1.06l-7.5-7.5a.75.75 0 0 1 0-1.06l7.5-7.5a.75.75 0 0 1 1.06 0Z"})})}),y.jsxs("p",{className:"text-slate-600",children:["Seite ",y.jsx("strong",{className:"text-slate-800",children:n})," / ",y.jsx("strong",{className:"text-slate-800",children:o})]}),y.jsx("button",{onClick:()=>a(n+1),disabled:e||n>=o,className:"rounded-md border border-slate-300 p-2.5 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-slate-800 hover:border-slate-800 focus:text-white focus:bg-slate-800 focus:border-slate-800 active:border-slate-800 active:text-white active:bg-slate-800 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none",type:"button",children:y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"h-4 w-4",children:y.jsx("path",{d:"M12.97 3.97a.75.75 0 0 1 1.06 0l7.5 7.5a.75.75 0 0 1 0 1.06l-7.5 7.5a.75.75 0 1 1-1.06-1.06l6.22-6.22H3a.75.75 0 0 1 0-1.5h16.19l-6.22-6.22a.75.75 0 0 1 0-1.06Z"})})})]})]})}const Tc="stackSelectionPreference",YB=30*1e3,QB=30*1e3;let Qa={data:null,timestamp:0},Oc=null;const St={QUEUED:"queued",STARTED:"started",SUCCESS:"success",ERROR:"error",INFO:"info"},XB={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},ZB=()=>!!Qa.data&&Date.now()-Qa.timestamp{Qa={data:e,timestamp:Date.now()}},JB=e=>Array.isArray(e)?[...e].sort((t,r)=>((t==null?void 0:t.Name)||"").localeCompare((r==null?void 0:r.Name)||"")):[];function eV(){const[e,t]=P.useState(()=>JB(Qa.data)),[r,n]=P.useState(()=>!Qa.data),[o,a]=P.useState(""),[i,c]=P.useState([]),[f,g]=P.useState("all"),[b,S]=P.useState(""),[O,T]=P.useState(!1),[C,x]=P.useState(!1),[m,d]=P.useState(!1),{showToast:s}=zs(),{maintenance:u,update:l,script:h,ssh:v}=Aa(),{hasPermission:w}=Ur(),j=w("stacks-redeploy-single","full"),N=w("stacks-redeploy-selection","full"),k=w("stacks-redeploy-all","full"),A=!!(u!=null&&u.active),M=u==null?void 0:u.message,D=!!(l!=null&&l.running),L=A||D,B=l!=null&&l.stage?XB[l.stage]??l.stage:"–",{page:U,perPage:Y,perPageOptions:q,setPage:z,setTotals:$,handlePerPageChange:K,resetPagination:X}=Nu(),te=P.useCallback(()=>{},[]);P.useEffect(()=>()=>X(),[X]),P.useEffect(()=>{L&&(n(!1),t([]),c([]))},[L]);const me=P.useRef(new Map),de=P.useCallback((ae,ge)=>{const oe=new Map(ae.map(se=>[se.Id,se]));return[...ge].sort((se,ie)=>se.Name.localeCompare(ie.Name)).map(se=>{const ie=oe.get(se.Id);if(ie&&ie.updateStatus==="✅"&&se.updateStatus==="⚠️"){const Fe=se.Name?`${se.Name} (ID: ${se.Id})`:`Stack ${se.Id}`;s({variant:"warning",title:"Aktualisierung gefunden",description:Fe})}let he=se.redeployPhase??(ie==null?void 0:ie.redeployPhase)??null;!he&&(se.redeploying||ie!=null&&ie.redeploying)&&(he=St.STARTED);const Oe=he===St.QUEUED,Ce=he===St.STARTED;return{...se,redeployPhase:he,redeployQueued:Oe,redeploying:Oe||Ce,redeployDisabled:se.redeployDisabled??(ie==null?void 0:ie.redeployDisabled)??!1,duplicateName:se.duplicateName??(ie==null?void 0:ie.duplicateName)??!1}})},[s]);P.useEffect(()=>{const ae=od("/",{path:"/socket.io",transports:["websocket"]});return console.log("🔌 Socket connected"),ae.on("redeployStatus",async(ge={})=>{const{stackId:oe}=ge;if(!oe)return;let ve=oe;if(typeof oe=="string"){const Fe=Number(oe);Number.isNaN(Fe)||(ve=Fe)}const se=ge.redeployPhase??ge.phase;let ie=se;ie?se==="started"||se==="running"?ie=St.STARTED:se==="queued"?ie=St.QUEUED:se==="success"?ie=St.SUCCESS:se==="error"?ie=St.ERROR:se==="info"&&(ie=St.INFO):ge.isRedeploying===!0?ie=St.STARTED:ge.isRedeploying===!1&&(ie=St.SUCCESS);const he=me.current.get(ve)??me.current.get(String(ve)),Oe=ge.stackName??(he==null?void 0:he.Name),Ce=Oe?`${Oe} (ID: ${ve})`:`Stack ${ve}`;if(console.log(`🔄 Stack ${ve} Redeploy Update: ${ie??"unbekannt"}`),ie===St.STARTED)s({variant:"info",title:"Redeploy gestartet",description:Ce});else if(ie===St.SUCCESS)s({variant:"success",title:"Redeploy abgeschlossen",description:Ce});else if(ie===St.ERROR){const Fe=ge.message?` – ${ge.message}`:"";s({variant:"error",title:"Redeploy fehlgeschlagen",description:`${Ce}${Fe}`})}if(t(Fe=>Fe.map(Ie=>{if(String(Ie.Id)!==String(ve))return Ie;const Ee=ie??Ie.redeployPhase??null,dt=Ee===St.QUEUED,ft=Ee===St.STARTED,Ft=Ee===St.SUCCESS,Kt=Ee===St.ERROR,Pt=dt||ft,Rt={...Ie,redeployPhase:Ee,redeployQueued:dt,redeploying:Pt};return Ft&&(Rt.updateStatus="✅",Rt.redeploying=!1,Rt.redeployQueued=!1),Kt&&(Rt.redeploying=!1,Rt.redeployQueued=!1),!Pt&&!Ft&&!Kt&&ie===void 0&&(Rt.redeploying=!1,Rt.redeployQueued=!1,Rt.redeployPhase=Ie.redeployPhase??null),Rt})),ie===St.SUCCESS||ie===St.ERROR||ge.isRedeploying===!1&&!ie)try{const Fe=await lt.get("/api/stacks");Kw(Fe.data),t(Ie=>de(Ie,Fe.data))}catch(Fe){console.error("Fehler beim Aktualisieren nach Redeploy:",Fe)}}),()=>ae.disconnect()},[]);const ee=P.useCallback(async({force:ae=!1,silent:ge=!1}={})=>{if(A||D){ge||n(!1);return}const oe=!!Qa.data;if(!ae&&oe&&(t(se=>de(se,Qa.data)),!ge&&(n(!1),ZB())))return;const ve=!ge&&(!oe||ae);ve&&n(!0);try{(ae||!Oc)&&(Oc=lt.get("/api/stacks").then(ie=>(Kw(ie.data),ie.data)).finally(()=>{Oc=null}));const se=await Oc;t(ie=>de(ie,se)),a("")}catch(se){console.error("❌ Fehler beim Abrufen der Stacks:",se),!oe&&!ge&&a("Fehler beim Laden der Stacks")}finally{ve&&n(!1)}},[A,D,de]);P.useEffect(()=>{ee()},[ee]),P.useEffect(()=>{if(typeof document>"u"||A||D)return;const ae=setInterval(()=>{document.hidden||ee({force:!0,silent:!0})},QB);return()=>clearInterval(ae)},[ee,A,D]),P.useEffect(()=>{if(typeof document>"u"||A||D)return;const ae=()=>{document.hidden||ee({force:!0,silent:!0})};return document.addEventListener("visibilitychange",ae),()=>{document.removeEventListener("visibilitychange",ae)}},[ee,A,D]),P.useEffect(()=>{c(ae=>{const ge=ae.filter(oe=>{const ve=e.find(ie=>ie.Id===oe);if(!ve||ve.updateStatus==="✅"||ve.redeployDisabled)return!1;const se=ve.redeployPhase;return!(se===St.STARTED||se===St.QUEUED)});return ge.length===ae.length?ae:ge})},[e]),P.useEffect(()=>{const ae=new Map;e.forEach(ge=>{ae.set(ge.Id,ge),ae.set(String(ge.Id),ge)}),me.current=ae},[e]);const Se=b.trim().toLowerCase(),pe=P.useMemo(()=>e.filter(ae=>!(f==="current"&&ae.updateStatus!=="✅"||f==="outdated"&&ae.updateStatus==="✅"||Se&&!`${ae.Name??""} ${ae.Id??""}`.toLowerCase().includes(Se))),[e,f,Se]),fe=P.useMemo(()=>pe.filter(ae=>{if(ae.updateStatus==="✅"||ae.redeployDisabled)return!1;const ge=ae.redeployPhase;return!(ge===St.STARTED||ge===St.QUEUED)}),[pe]),be=P.useMemo(()=>{const ae=new Map;return e.forEach(ge=>{ae.set(ge.Id,ge)}),ae},[e]);P.useMemo(()=>new Set(pe.map(ae=>ae.Id)),[pe]);const ye=P.useMemo(()=>{if(Y==="all")return pe;const ae=Number(Y),ge=(U-1)*ae;return pe.slice(ge,ge+ae)},[pe,Y,U]);P.useEffect(()=>{$(pe.length,ye.length)},[pe.length,ye.length,$]);const Pe=P.useRef({action:"keep",remember:!1}),Me=P.useRef({status:f,search:Se}),ke=P.useRef(!1);P.useEffect(()=>{if(!(typeof window>"u"))try{const ae=window.sessionStorage.getItem(Tc);if(!ae)return;const ge=JSON.parse(ae);ge&&(ge.action==="keep"||ge.action==="clear")&&(Pe.current={action:ge.action,remember:!0},d(!0))}catch(ae){console.error("⚠️ Konnte gespeicherte Auswahl-Einstellung nicht laden:",ae),Pe.current={action:"keep",remember:!1}}},[]),P.useEffect(()=>{const ae=Se;if(!ke.current){ke.current=!0,Me.current={status:f,search:ae};return}const ge=Me.current;if(!(ge.status!==f||ge.search!==ae)){f==="all"&&ae.length===0&&O&&T(!1);return}if(Me.current={status:f,search:ae},i.length===0){T(!1);return}if(!(f!=="all"||ae.length>0)){T(!1);return}const se=Pe.current;if(se!=null&&se.remember){se.action==="clear"&&c([]),T(!1);return}x(!!(se!=null&&se.remember)),T(!0)},[f,Se,i.length,O]),P.useEffect(()=>{i.length===0&&O&&T(!1)},[i.length,O]);const ce=f!=="all"||Se.length>0;P.useEffect(()=>{z(1)},[f,Se,z]),P.useEffect(()=>{if(Y==="all"){U!==1&&z(1);return}const ae=Number(Y)||1,ge=Math.max(1,Math.ceil(pe.length/ae));U>ge&&z(ge)},[pe.length,Y,U,z]);const je=(ae,ge)=>{N&&(ge||c(oe=>oe.includes(ae)?oe.filter(ve=>ve!==ae):[...oe,ae]))};P.useEffect(()=>{N||(i.length&&c([]),O&&T(!1))},[N,i.length,O]);const He=ae=>{if(!N)return;const ge=C;if(typeof window<"u")try{if(ge){const oe={action:ae,remember:!0};window.sessionStorage.setItem(Tc,JSON.stringify(oe)),Pe.current=oe}else window.sessionStorage.removeItem(Tc),Pe.current={action:ae,remember:!1}}catch(oe){console.error("⚠️ Konnte Auswahl-Einstellung nicht speichern:",oe),Pe.current={action:ae,remember:!1}}else Pe.current={action:ae,remember:!1};d(ge),x(ge),ae==="clear"&&c([]),T(!1)},qe=()=>{if(N){if(typeof window<"u")try{window.sessionStorage.removeItem(Tc)}catch(ae){console.error("⚠️ Konnte gespeicherte Auswahl-Einstellung nicht löschen:",ae)}Pe.current={action:"keep",remember:!1},d(!1),x(!1),ce&&i.length>0&&T(!0)}},Je=()=>{N&&(c([]),T(!1))},Qe=ae=>{N&&c(ge=>ge.filter(oe=>oe!==ae))},Ge=async ae=>{if(!j)return;const ge=me.current.get(ae),oe=ge==null?void 0:ge.redeployPhase;if(!(oe===St.STARTED||oe===St.QUEUED)){c(ve=>ve.filter(se=>se!==ae)),t(ve=>ve.map(se=>se.Id===ae?{...se,redeployPhase:St.STARTED,redeploying:!0,redeployQueued:!1}:se));try{await lt.put(`/api/stacks/${ae}/redeploy`)}catch(ve){if(console.error("❌ Fehler beim Redeploy:",ve),t(se=>se.map(ie=>ie.Id===ae?{...ie,redeployPhase:null,redeploying:!1,redeployQueued:!1}:ie)),!ve.response){const se=me.current.get(ae),ie=se!=null&&se.Name?`${se.Name} (ID: ${ae})`:`Stack ${ae}`,he=ve.message||"Unbekannter Fehler";s({variant:"error",title:"Redeploy fehlgeschlagen",description:`${ie} – ${he}`})}}}},Xe=async()=>{var oe,ve;if(!k||!fe.length)return;const ae=fe.map(se=>se.Id),ge=new Set(ae.map(se=>String(se)));t(se=>se.map(ie=>{const he=String(ie.Id);return ge.has(he)?{...ie,redeployPhase:St.QUEUED,redeploying:!0,redeployQueued:!0}:ie}));try{ce?await lt.put("/api/stacks/redeploy-selection",{stackIds:ae}):await lt.put("/api/stacks/redeploy-all"),c(se=>se.filter(ie=>!ge.has(String(ie))))}catch(se){console.error("❌ Fehler beim Redeploy ALL:",se),t(he=>he.map(Oe=>{const Ce=String(Oe.Id);return ge.has(Ce)?{...Oe,redeployPhase:null,redeploying:!1,redeployQueued:!1}:Oe}));const ie=((ve=(oe=se.response)==null?void 0:oe.data)==null?void 0:ve.error)||se.message||"Unbekannter Fehler";s({variant:"error",title:"Redeploy ALL fehlgeschlagen",description:ie})}},ht=async()=>{var oe,ve;if(!N||!i.length)return;const ae=i.filter(se=>{const ie=e.find(Oe=>Oe.Id===se);if(!ie||ie.updateStatus==="✅"||ie.redeployDisabled)return!1;const he=ie.redeployPhase;return!(he===St.STARTED||he===St.QUEUED)});if(!ae.length){c([]);return}const ge=new Set(ae);t(se=>se.map(ie=>ge.has(ie.Id)?{...ie,redeployPhase:St.QUEUED,redeploying:!0,redeployQueued:!0}:ie));try{await lt.put("/api/stacks/redeploy-selection",{stackIds:ae}),c(se=>se.filter(ie=>!ge.has(ie)))}catch(se){console.error("❌ Fehler beim Redeploy Auswahl:",se),t(he=>he.map(Oe=>ge.has(Oe.Id)?{...Oe,redeployPhase:null,redeploying:!1,redeployQueued:!1}:Oe));const ie=((ve=(oe=se.response)==null?void 0:oe.data)==null?void 0:ve.error)||se.message||"Unbekannter Fehler";s({variant:"error",title:"Redeploy Auswahl fehlgeschlagen",description:ie})}},Ve=N&&i.length>0,ot=fe.length>0,_t=N&&Ve||k,Ne=N&&Ve?`Redeploy Auswahl (${i.length})`:"Redeploy Alle",at=L||(N&&Ve?O||i.every(ae=>{const ge=e.find(ve=>ve.Id===ae);if(!ge||ge.updateStatus==="✅"||ge.redeployDisabled)return!0;const oe=ge.redeployPhase;return oe===St.STARTED||oe===St.QUEUED}):!k||!ot),Te=()=>{if(L){s({variant:"warning",title:"Wartungsmodus aktiv",description:"Redeploy-Aktionen sind während des Wartungsmodus deaktiviert."});return}N&&Ve?ht():k&&Xe()};return y.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(A||D)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",M?` – ${M}`:D?" – Portainer-Update läuft":"","."]}),D&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",B]})]})}),y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"p-4 pt-2 pb-2",children:!r&&!o?y.jsx(H.Typography,{variant:"h6",color:"white",children:y.jsx("span",{className:"flex items-center gap-2",children:y.jsx("span",{children:"Filter und Optionen"})})}):y.jsx(H.Typography,{variant:"h6",color:"white",children:y.jsx("span",{className:"flex items-center gap-2",children:y.jsx("span",{children:"Lade Stacks"})})})}),y.jsxs(H.CardBody,{children:[r?y.jsxs("p",{className:"flex py-6 text-center text-sm font-medium text-gray-400",children:[y.jsx(H.Spinner,{className:"mr-2 h-4 w-4 flex"}),"Lade Stacks..."]}):o?y.jsx("p",{className:"py-6 text-sm font-medium text-red-400",children:o}):y.jsxs("div",{className:"gap-4",children:[y.jsx("div",{className:"w-full",children:y.jsxs(H.ButtonGroup,{fullWidth:!0,children:[y.jsx(H.Button,{onClick:()=>g("all"),children:"Alle"}),y.jsx(H.Button,{onClick:()=>g("current"),children:"Aktuell"}),y.jsx(H.Button,{onClick:()=>g("outdated"),children:"Veraltet"})]})}),y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mt-8",children:[y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{value:b,onChange:ae=>S(ae.target.value),variant:"static",placeholder:"Name oder ID"})}),y.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:y.jsx(H.Select,{variant:"static",label:"Einträge pro Seite",onChange:te,value:Y,children:q.map(({value:ae,label:ge})=>y.jsx(H.Option,{value:ae,onClick:()=>K(ae),children:ge},ae))})})]}),y.jsx("div",{className:"flex items-center justify-end gap-3 mt-5",children:N&&m&&y.jsx("button",{onClick:qe,className:"block antialiased font-sans text-sm leading-normal text-inherit text-xs font-medium text-warmAmberGlow-500 underline underline-offset-2 transition hover:text-warmAmberGlow-600",children:"Gespeicherte Entscheidung löschen"})})]}),N&&O&&y.jsx("div",{className:"flex flex-col mt-5",children:y.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-arcticBlue-800 bg-arcticBlue-900/90 px-4 py-3 text-arcticBlue-100 md:flex-row md:items-center md:justify-between",children:[y.jsxs("div",{className:"space-y-2 block antialiased font-sans text-sm font-light leading-normal text-inherit",children:[y.jsxs("p",{children:[i.length===1?"1 Stack ist weiterhin ausgewählt.":`${i.length} Stacks sind weiterhin ausgewählt.`," ","Soll die Auswahl entfernt werden?"]}),y.jsxs("label",{className:"flex items-center gap-2",children:[y.jsx("input",{type:"checkbox",checked:C,onChange:ae=>x(ae.target.checked),className:"h-4 w-4 rounded border border-arcticBlue-400 bg-arcticBlue-900 text-arcticBlue-400 focus:ring-arcticBlue-300"}),y.jsx("span",{className:"text-xs",children:"Einstellung merken (bis Browser geschlossen wird)"})]})]}),y.jsxs("div",{className:"flex gap-2",children:[y.jsx(H.Button,{onClick:()=>He("keep"),className:"rounded-md border border-arcticBlue-600 bg-arcticBlue-700 px-4 py-2 font-sans font-bold text-center uppercase transition-all hover:bg-arcticBlue-800",children:"Auswahl behalten"}),y.jsx(H.Button,{onClick:()=>He("clear"),className:"rounded-md border border-sunsetCoral-500 bg-sunsetCoral-600 px-4 py-2 font-sans font-bold text-center uppercase transition-all hover:bg-sunsetCoral-600",children:"Auswahl entfernen"})]})]})}),_t&&y.jsxs("div",{id:"collect",className:"mt-8 flex flex-col gap-4 md:flex-row md:items-start md:gap-6",children:[N&&i.length>0&&y.jsx("div",{className:"w-full md:order-first order-last md:w-3/4",children:y.jsxs("div",{className:"flex flex-col gap-3 text-sm text-gray-300",children:[y.jsx("div",{className:"flex flex-wrap items-center gap-2",children:i.map(ae=>{const ge=be.get(ae),oe=(ge==null?void 0:ge.Name)||`Stack ${ae}`;return y.jsxs("button",{type:"button",onClick:()=>Qe(ae),className:"inline-flex items-center gap-2 rounded-full bg-lavenderSmoke-600/80 px-2 py-0.5 text-white transition hover:bg-lavenderSmoke-600/90 focus:outline-none focus:ring-2 focus:ring-lavenderSmoke-400 cursor-pointer",children:[y.jsx("span",{children:oe}),y.jsx("span",{className:"text-xs font-semibold text-lavenderSmoke-200",children:"x"})]},ae)})}),y.jsx("button",{type:"button",onClick:Je,className:"md:order-last self-start mt-1 text-xs font-medium text-gray-400 underline underline-offset-2 transition hover:text-gray-200",children:"Auswahl aufheben"})]})}),y.jsx("div",{className:"w-full md:w-1/4 md:ml-auto",children:y.jsx(H.Button,{className:"w-full bg-arcticBlue-500 hover:bg-arcticBlue-600",onClick:Te,disabled:at,children:Ne})})]})]})]}),y.jsx("div",{className:"grid grid-cols-1 gap-6 md:grid-cols-2",children:ye.map(ae=>{const ge=ae.redeployPhase,oe=ge===St.QUEUED,ve=ge===St.STARTED,se=oe||ve,ie=i.includes(ae.Id),he=ae.updateStatus==="✅",Oe=!!ae.redeployDisabled,Ce=!se&&!he&&!Oe,Ue=N&&Ce;return y.jsx(H.Card,{children:y.jsxs(H.CardBody,{className:`flex w-full text-stormGrey-500 items-center justify-between gap-4 rounded-xl shadow-lg transition border + ${ie?"border-purple-500 ring-1 ring-purple-500/40":"border-transparent"} + ${!Ce||se?"opacity-75 bg-stormGrey-200/20":""}`,children:[y.jsxs("div",{className:"flex items-center space-x-4",id:"left",children:[N&&y.jsx("input",{type:"checkbox",checked:ie,onChange:()=>je(ae.Id,!Ue),className:`h-5 w-5 text-purple-500 focus:ring-purple-400 border-gray-600 bg-gray-900 rounded ${Ue?"":"opacity-40 cursor-not-allowed"}`,disabled:!Ue}),y.jsx("div",{className:`w-12 h-12 flex items-center justify-center rounded-full + ${ae.updateStatus==="✅"?"bg-mossGreen-600":ae.updateStatus==="⚠️"?"bg-warmAmberGlow-400":"bg-sunsetCoral-500"}`}),y.jsxs("div",{children:[y.jsx("p",{className:"text-lg antialiased font-sans font-semibold leading-normal text-inherit",children:ae.Name}),y.jsxs("p",{className:"text-sm antialiased font-sans font-light leading-normal text-inherit",children:["ID: ",ae.Id]}),ae.duplicateName&&y.jsx("p",{className:"text-xs text-amber-700",children:"⚠️ Doppelter Name erkannt"})]})]}),y.jsx("div",{className:"ml-auto flex flex-col items-end gap-1 text-sm",id:"right",children:ve?y.jsxs(y.Fragment,{children:[y.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-warmAmberGlow-600",children:"Redeploy"}),y.jsx("span",{className:"text-warmAmberGlow-500",children:"läuft…"})]}):oe?y.jsxs(y.Fragment,{children:[y.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-warmAmberGlow-600",children:"Redeploy"}),y.jsx("span",{className:"text-warmAmberGlow-500",children:"in Warteliste…"})]}):Oe?y.jsxs(y.Fragment,{children:[y.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-stormGrey-500",children:"System"}),y.jsx("span",{className:"text-gray-300",children:"Redeploy deaktiviert"})]}):he?y.jsxs(y.Fragment,{children:[y.jsx("span",{className:"antialiased font-sans font-light leading-normal text-xs uppercase tracking-wide text-stormGrey-500",children:"Status"}),y.jsx("span",{className:"text-mossGreen-600",children:"Aktuell"})]}):j?y.jsx(H.Button,{onClick:()=>Ge(ae.Id),disabled:L||se,className:"disabled:opacity-50 disabled:cursor-not-allowed",children:"Redeploy"}):null})]})},ae.Id)})}),y.jsx(Jf,{disabled:r||!!o})]})}const tV={idle:"Bereit",running:"Läuft",success:"Erfolgreich",error:"Fehlgeschlagen"},dl={idle:"bg-stormGrey-700 text-gray-200",running:"bg-arcticBlue-600 text-white",success:"bg-mossGreen-600 text-white",error:"bg-sunsetCoral-600 text-white"},rV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},nV={info:"text-arcticBlue-700",success:"text-mossGreen-700",warning:"text-warmAmberGlow-700",error:"text-sunsetCoral-700",stdout:"text-stormGrey-700",stderr:"text-warmAmberGlow-700",debug:"text-lavenderSmoke-700"},oV=e=>{if(!e)return"-";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})},Ua=e=>{if(!e&&e!==0)return"-";const r=(n=>{if(n instanceof Date)return n;if(typeof n=="number"){const o=n>1e12?n:n*1e3;return new Date(o)}if(typeof n=="string"){const o=Number(n);if(!Number.isNaN(o)){const a=o>1e12?o:o*1e3;return new Date(a)}return new Date(n)}return null})(e);return!r||Number.isNaN(r.getTime())?String(e):r.toLocaleString("de-DE",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})},Yw=e=>e===1?"Git":e===2?"Compose":e??"-",Mh=()=>({host:"",port:"22",username:"",password:"",extraSshArgs:""});function aV(){var Ws,Vu,Uu,$s;const{hasPermission:e,user:t}=Ur(),r=P.useCallback(()=>{},[]),{maintenance:n,update:o,script:a,ssh:i,loading:c,error:f,setMaintenanceMode:g,triggerUpdate:b,saveScript:S,resetScript:O,saveSshConfig:T,deleteSshConfig:C,testSshConnection:x,fetchSuperuserStatus:m,fetchSetupStatus:d,deleteSetupServer:s,updateSetupApiKey:u,updateSelfStackId:l,removeSuperuserAccount:h}=Aa(),v=!!(t!=null&&t.isSuperuser),w=!!(v||e("maintenance-access","read")),j=!!(v||e("maintenance-access","full")),N=!!(v||e("maintenance-server-manage","read")),k=!!(v||e("maintenance-server-manage","full")),A=!!(v||e("maintenance-server-delete","full")),M=!!(v||e("maintenance-superuser-delete","full")),D=!!(v||e("maintenance-portainer","read")),L=!!(v||e("maintenance-update","full")),B=!!(v||e("maintenance-ssh-update","read")),U=!!(v||e("maintenance-ssh-update","full")),Y=!!(v||e("maintenance-duplicates","read")),q=!!(v||e("maintenance-duplicates","full")),z=!!(n!=null&&n.active),$=n==null?void 0:n.message,K=(Ws=n==null?void 0:n.extra)==null?void 0:Ws.type,X=!!(o!=null&&o.running),te=z||X,[me,de]=P.useState(""),[ee,Se]=P.useState(!1),[pe,fe]=P.useState(!1),[be,ye]=P.useState(""),[Pe,Me]=P.useState(!1),[ke,ce]=P.useState(()=>Mh()),[je,He]=P.useState(!1),[qe,Je]=P.useState(!1),[Qe,Ge]=P.useState(!1),[Xe,ht]=P.useState(!1),[Ve,ot]=P.useState(!1),[_t,Ne]=P.useState(null);P.useEffect(()=>{if(!a)return;const xe=a.custom??a.default??a.effective??"";de(xe)},[a]),P.useEffect(()=>{if(!i){ce(Mh()),He(!1),Je(!1),Ne(null);return}ce({host:i.host??"",port:String(i.port??"22"),username:i.username??"",password:"",extraSshArgs:Array.isArray(i.extraSshArgs)?i.extraSshArgs.join(` +`):""}),He(!!i.passwordStored),Je(!1),Ne(null)},[i]);const at=P.useMemo(()=>a?a.source==="custom"&&typeof a.custom=="string"?a.custom:a.default??a.effective??"":"",[a]),Te=a?me!==at:!1,ae=(a==null?void 0:a.source)==="custom"?"Benutzerdefiniert":"Standard",[ge,oe]=P.useState(!0),[ve,se]=P.useState(!1),[ie,he]=P.useState(null),[Oe,Ce]=P.useState(""),[Ue,Fe]=P.useState(!1),[Ie,Ee]=P.useState(null),[dt,ft]=P.useState(!0),[Ft,Kt]=P.useState(""),[Pt,Rt]=P.useState({}),[hr,ir]=P.useState(null),[Jr,jn]=P.useState(null),[Mr,en]=P.useState(""),[wr,no]=P.useState(!1),[An,J]=P.useState(""),[Ae,Be]=P.useState([]),[Mt,yt]=P.useState(!0),[Et,It]=P.useState(""),[or,kt]=P.useState(!1),[Rn,Ir]=P.useState(null),[gr,Mn]=P.useState(null),oo=P.useRef(null),[Ct,Ra]=P.useState(null),[To,ao]=P.useState(!0),[io,Oo]=P.useState(""),[Ma,xi]=P.useState(!1),[wi,Ia]=P.useState(null),mn=P.useRef(null),jt=P.useCallback(async({silent:xe=!1}={})=>{var Le,ze;oe(!0),Ce("");try{const We=await m(),it=!!(We!=null&&We.exists);se(it),he(it?We.user??null:null)}catch(We){const it=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Superuser-Status konnte nicht geladen werden";se(!1),he(null),Ce(it),xe||r({variant:"error",title:"Statusabfrage fehlgeschlagen",description:it})}finally{oe(!1)}},[m,r]),Nt=P.useCallback(async({silent:xe=!1}={})=>{var Le,ze;xe||ft(!0),Kt("");try{const We=await d();Ee(We),Rt({})}catch(We){const it=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Setup-Daten konnten nicht geladen werden";Kt(it),xe||r({variant:"error",title:"Setup-Daten",description:it})}finally{ft(!1)}},[d,r]),zt=P.useCallback(async({silent:xe=!1}={})=>{if(mn.current)return mn.current;const Le=(async()=>{var ze,We;xe?xi(!0):ao(!0),Oo("");try{const Wt=(await lt.get("/api/maintenance/portainer-status")).data??{};Ra(Wt),Ia(new Date)}catch(it){const Wt=((We=(ze=it.response)==null?void 0:ze.data)==null?void 0:We.error)||it.message||"Fehler beim Prüfen des Portainer-Status";Oo(Wt),r({variant:"error",title:"Statusaktualisierung fehlgeschlagen",description:Wt})}finally{xe?xi(!1):ao(!1),mn.current=null}})();return mn.current=Le,Le},[r]),Or=P.useCallback(async({silent:xe=!1}={})=>{if(z||X){Be([]),It("Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert."),yt(!1),kt(!1);return}if(oo.current)return oo.current;const Le=(async()=>{var ze,We,it;xe?kt(!0):yt(!0),It("");try{const Vt=(await lt.get("/api/maintenance/duplicates")).data,rn=Array.isArray(Vt)?Vt:(Vt==null?void 0:Vt.items)??[];Be(rn),Mn(new Date)}catch(Wt){if(((ze=Wt.response)==null?void 0:ze.status)===423){const Vt="Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.";Be([]),It(Vt),r({variant:"warning",title:"Duplikat-Verwaltung gesperrt",description:Vt})}else{const Vt=((it=(We=Wt.response)==null?void 0:We.data)==null?void 0:it.error)||Wt.message||"Fehler beim Laden der Wartungsdaten";It(Vt),r({variant:"error",title:"Duplikate konnten nicht geladen werden",description:Vt})}}finally{xe?kt(!1):yt(!1),oo.current=null}})();return oo.current=Le,Le},[z,X,r]);P.useEffect(()=>{jt({silent:!0})},[jt]),P.useEffect(()=>{Nt()},[Nt]),P.useEffect(()=>{zt()},[zt]),P.useEffect(()=>{Or()},[Or]);const tn=P.useMemo(()=>{var xe;return((xe=Ie==null?void 0:Ie.servers)==null?void 0:xe.items)??[]},[Ie]),so=P.useMemo(()=>{var Le;const xe=((Le=Ie==null?void 0:Ie.apiKeys)==null?void 0:Le.items)??[];return new Map(xe.map(ze=>[ze.serverId,ze]))},[Ie]),Da=P.useMemo(()=>!!(Ie!=null&&Ie.setupComplete),[Ie]),In=(Ie==null?void 0:Ie.selfStack)??null,Dn=(In==null?void 0:In.current)??"",_i=((Vu=Ie==null?void 0:Ie.envDefaults)==null?void 0:Vu.selfStackId)??"";P.useEffect(()=>{en(Dn||""),J("")},[Dn]);const Bs=Mr!==Dn,Si=P.useMemo(()=>{const xe=Array.isArray(Ae)?Ae.length:0,Le=Array.isArray(Ae)?Ae.reduce((ze,We)=>{var it;return ze+(((it=We==null?void 0:We.duplicates)==null?void 0:it.length)||0)},0):0;return{groups:xe,duplicateCount:Le}},[Ae]),La=P.useCallback((xe,Le)=>{U&&(ce(ze=>({...ze,[xe]:Le})),xe==="password"&&He(!1))},[U]),Ci=P.useMemo(()=>{const xe={host:ke.host.trim(),port:Number.parseInt(ke.port,10)||22,username:ke.username.trim(),extraSshArgs:(ke.extraSshArgs||"").split(/\r?\n/).map(ze=>ze.trim()).filter(Boolean)},Le=ke.password??"";return Le?xe.password=Le:je||(xe.password=""),xe},[ke,je]),ep=P.useCallback(async()=>{var xe,Le;if(U&&a)try{Se(!0),await S(me),r({variant:"success",title:"Skript gespeichert",description:"Das benutzerdefinierte Portainer-Update-Skript wurde aktualisiert."})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"Skript konnte nicht gespeichert werden";r({variant:"error",title:"Speichern fehlgeschlagen",description:We})}finally{Se(!1)}},[U,S,me,a,r]),Eu=P.useCallback(async()=>{var xe,Le;if(U)try{Se(!0),await O(),r({variant:"info",title:"Standardskript wiederhergestellt",description:"Es wird wieder das Standard-Update-Skript verwendet."})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"Standardskript konnte nicht wiederhergestellt werden";r({variant:"error",title:"Zurücksetzen fehlgeschlagen",description:We})}finally{Se(!1)}},[U,O,r]),Po=P.useCallback(async()=>{var xe,Le;if(U)try{Ge(!0),await T(Ci),Ne(null),Je(!1),r({variant:"success",title:"SSH-Konfiguration gespeichert",description:"Verbindungseinstellungen wurden aktualisiert."})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"SSH-Konfiguration konnte nicht gespeichert werden";r({variant:"error",title:"Speichern fehlgeschlagen",description:We})}finally{Ge(!1)}},[U,Ci,T,r]),Ti=P.useCallback(async()=>{var xe,Le;if(U)try{ht(!0);const ze=await x(Ci);Ne({success:!0,timestamp:new Date,details:ze==null?void 0:ze.result}),r({variant:"success",title:"SSH-Verbindung erfolgreich",description:"Verbindung zum Portainer-Host wurde hergestellt."})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"SSH-Verbindung fehlgeschlagen";Ne({success:!1,timestamp:new Date,error:We}),r({variant:"error",title:"SSH-Test fehlgeschlagen",description:We})}finally{ht(!1)}},[U,Ci,x,r]),ju=P.useCallback(async()=>{var xe,Le;if(U)try{ot(!0),await C(),ce(Mh()),He(!1),Je(!1),Ne(null),r({variant:"info",title:"SSH-Konfiguration gelöscht",description:"Die Verbindungseinstellungen wurden zurückgesetzt."})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"SSH-Konfiguration konnte nicht gelöscht werden";r({variant:"error",title:"Löschen fehlgeschlagen",description:We})}finally{ot(!1)}},[U,C,r]),Au=P.useCallback(async()=>{var xe,Le,ze;if(!(!M||Ue||ge||!ve)&&!(typeof window<"u"&&!window.confirm(`Superuser und zugehörige Gruppe wirklich löschen? +Dies setzt die Superuser-Einrichtung zurück.`)))try{Fe(!0);const We=await h(),it=Number((We==null?void 0:We.usersRemoved)??0);r({variant:"success",title:"Superuser gelöscht",description:it>1?`${it} Konten aus der Superuser-Gruppe wurden entfernt.`:"Superuser-Konto wurde entfernt."}),await jt({silent:!0})}catch(We){if(((xe=We.response)==null?void 0:xe.status)===404)await jt({silent:!0}),r({variant:"info",title:"Kein Superuser vorhanden",description:"Es ist kein Superuser mehr vorhanden."});else{const Wt=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Superuser konnte nicht gelöscht werden";r({variant:"error",title:"Löschen fehlgeschlagen",description:Wt})}}finally{Fe(!1)}},[M,Ue,ge,ve,h,jt,r]),Ru=P.useCallback(async xe=>{var it,Wt;if(!A||Jr===xe)return;const Le=tn.find(Vt=>Vt.id===xe);if(!Le)return;const ze=Le.name||Le.url||`Server ${xe}`,We=[`Server "${ze}" wirklich löschen?`,"Das System benötigt anschließend erneut einen gültigen Server im Setup."].filter(Boolean).join(` +`);if(!(typeof window<"u"&&!window.confirm(We))){jn(xe);try{await s(xe),r({variant:"success",title:"Server gelöscht",description:`Server "${ze}" wurde entfernt.`}),await Nt({silent:!0})}catch(Vt){const rn=((Wt=(it=Vt.response)==null?void 0:it.data)==null?void 0:Wt.error)||Vt.message||"Server konnte nicht gelöscht werden.";r({variant:"error",title:"Server löschen fehlgeschlagen",description:rn})}finally{jn(null)}}},[A,s,Nt,Jr,tn,r]),Mu=P.useCallback((xe,Le)=>{k&&Rt(ze=>({...ze,[xe]:Le}))},[k]),Vs=P.useCallback(async xe=>{var ze,We;if(!k)return;const Le=(Pt[xe]??"").trim();if(!Le){r({variant:"warning",title:"API-Key fehlt",description:"Bitte gib einen API-Key ein."});return}if(hr!==xe){ir(xe);try{await u(xe,Le),r({variant:"success",title:"API-Key aktualisiert",description:"Der API-Key wurde gespeichert."}),Rt(it=>({...it,[xe]:""})),await Nt({silent:!0})}catch(it){const Wt=((We=(ze=it.response)==null?void 0:ze.data)==null?void 0:We.error)||it.message||"API-Key konnte nicht aktualisiert werden.";r({variant:"error",title:"Aktualisierung fehlgeschlagen",description:Wt})}finally{ir(null)}}},[Pt,hr,k,Nt,r,u]),Iu=P.useCallback(xe=>{k&&(en(xe),J(""))},[k]),tp=P.useCallback(async()=>{var Le,ze;if(!k||!Bs)return;no(!0),J("");const xe=typeof Mr=="string"?Mr.trim():"";try{await l(xe),r({variant:"success",title:"Self-Stack-ID gespeichert",description:xe?`Self-Stack-ID wurde auf "${xe}" gesetzt.`:"Self-Stack-ID wurde entfernt."}),await Nt({silent:!0})}catch(We){const it=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Self-Stack-ID konnte nicht aktualisiert werden.";J(it),r({variant:"error",title:"Self-Stack-ID",description:it})}finally{no(!1)}},[k,Nt,Bs,Mr,r,l]),Du=P.useCallback(async()=>{var xe,Le;if(k&&!(!Mr&&!Dn)&&!(typeof window<"u"&&!window.confirm("Self-Stack-ID wirklich entfernen?"))){no(!0),J("");try{await l(""),en(""),r({variant:"success",title:"Self-Stack-ID entfernt",description:"Die Self-Stack-ID wurde gelöscht."}),await Nt({silent:!0})}catch(ze){const We=((Le=(xe=ze.response)==null?void 0:xe.data)==null?void 0:Le.error)||ze.message||"Self-Stack-ID konnte nicht entfernt werden.";J(We),r({variant:"error",title:"Self-Stack-ID",description:We})}finally{no(!1)}}},[k,Dn,Nt,Mr,r,l]),Oi=P.useCallback(async xe=>{var Le,ze;if(j&&!(c||Pe)&&xe!==z){if(X){r({variant:"warning",title:"Aktion nicht möglich",description:"Während eines laufenden Updates kann der Wartungsmodus nicht geändert werden."});return}Me(!0);try{const We=xe&&!!K,it={active:xe};We&&$?it.message=$:it.message=null,await g(it),r({variant:xe?"info":"success",title:xe?"Wartungsmodus aktiviert":"Wartungsmodus deaktiviert",description:xe?"Benutzer sehen jetzt die Wartungsseite.":"StackPulse steht wieder zur Verfügung."})}catch(We){const it=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Wartungsmodus konnte nicht geändert werden";r({variant:"error",title:"Änderung fehlgeschlagen",description:it})}finally{Me(!1)}}},[j,c,Pe,z,X,g,$,K,r]),rp=P.useCallback(async()=>{var Le,ze;if(!L)return;if(z||X){r({variant:"warning",title:"Update nicht möglich",description:"Während eines aktiven Wartungsmodus kann kein weiteres Update gestartet werden."});return}const xe=(Ct==null?void 0:Ct.latestVersion)??(Ct==null?void 0:Ct.currentVersion)??"unbekannt";if(!(typeof window<"u"&&!window.confirm(`Portainer-Update starten? +Zielversion: ${xe}. +Während des Updates befindet sich StackPulse im Wartungsmodus. +Fortfahren?`)))try{ye(""),fe(!0),await b(),r({variant:"info",title:"Update gestartet",description:"Das Portainer-Update wurde gestartet."})}catch(We){const it=((ze=(Le=We.response)==null?void 0:Le.data)==null?void 0:ze.error)||We.message||"Portainer-Update konnte nicht gestartet werden";ye(it),r({variant:"error",title:"Update fehlgeschlagen",description:it})}finally{fe(!1)}},[L,z,X,Ct,b,r]),Lu=P.useCallback(async xe=>{var it,Wt,Vt,rn;if(!q||!xe)return;if(z||X){r({variant:"warning",title:"Aktion nicht möglich",description:"Während des Wartungsmodus sind Bereinigungen deaktiviert."});return}const Le=(it=xe.canonical)==null?void 0:it.Id;if(!Le)return;const ze=(xe.duplicates||[]).map(ko=>ko.Id).filter(Boolean);if(!ze.length)return;const We=((Wt=xe.canonical)==null?void 0:Wt.Name)||xe.name||`Stack ${Le}`;if(!(typeof window<"u"&&!window.confirm(`Bereinigung für "${We}" starten? +Es werden ${ze.length} Duplikate entfernt: ${ze.join(", ")}`))){Ir(String(Le));try{const Wr=(await lt.post("/api/maintenance/duplicates/cleanup",{canonicalId:Le,duplicateIds:ze})).data??{};if(Wr.success===!1)throw new Error(Wr.error||"Bereinigung fehlgeschlagen");const Pi=Array.isArray(Wr.results)?Wr.results.filter(za=>za.status==="deleted").map(za=>za.id):ze;r({variant:"success",title:"Bereinigung abgeschlossen",description:`${We} – entfernte IDs: ${Pi.join(", ")}`}),await Or({silent:!0})}catch(ko){const Wr=((rn=(Vt=ko.response)==null?void 0:Vt.data)==null?void 0:rn.error)||ko.message||"Bereinigung fehlgeschlagen";r({variant:"error",title:"Bereinigung fehlgeschlagen",description:Wr})}finally{Ir(null)}}},[q,Or,z,r,X]);n!=null&&n.activatedAt&&Ua(n.activatedAt),n!=null&&n.updatedAt&&Ua(n.updatedAt);const Ln=z||X,Fa=(o==null?void 0:o.status)??(X?"running":"idle"),Us=tV[Fa]??Fa,np=dl[Fa]??dl.idle,Fu=o!=null&&o.stage?rV[o.stage]??o.stage:"–",zu=(o==null?void 0:o.logs)??[],op=(o==null?void 0:o.targetVersion)??"-",ap=(o==null?void 0:o.resultVersion)??"-",ip=o!=null&&o.startedAt?Ua(o.startedAt):"-",sp=o!=null&&o.finishedAt?Ua(o.finishedAt):"-",Bu=(o==null?void 0:o.message)??(X?"Update läuft…":""),lo=X||ee||c;return w?y.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(z||X)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",$?` – ${$}`:X?" – Portainer-Update läuft":"","."]}),X&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",Fu]})]})}),w&&y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:y.jsx("span",{children:"Wartungsmodus"})})}),y.jsxs(H.CardBody,{className:"flex flex-col gap-4 p-4",children:[y.jsxs("div",{className:"flex items-start justify-between gap-4",children:[y.jsx("div",{className:"space-y-1",children:y.jsx("p",{className:"text-sm antialiased font-sans text-sm font-light leading-normal text-inherit",children:"Schaltet StackPulse für Benutzer in den Wartungsmodus."})}),y.jsx(H.Switch,{checked:z,disabled:!j||Pe||c||X,onChange:xe=>Oi(xe.target.checked),ripple:!1,color:"amber"})]}),Pe&&y.jsx("p",{className:"text-xs text-stormGrey-500",children:"Wartungsmodus wird aktualisiert…"})]})]}),N&&y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:y.jsx("span",{children:"Server & API-Keys"})})}),y.jsxs(H.CardBody,{className:"flex flex-col gap-4 p-4",children:[dt&&y.jsx("p",{className:"text-sm text-stormGrey-500",children:"Daten werden geladen…"}),!dt&&Ft&&y.jsx(H.Alert,{color:"red",className:"border border-red-200 bg-red-50 text-red-700",children:Ft}),!dt&&!Ft&&y.jsxs("div",{className:"flex flex-col gap-6",children:[y.jsxs("div",{className:"flex flex-col gap-3",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx(H.Typography,{variant:"small",color:"blue-gray",className:"font-semibold uppercase",children:"Server"}),y.jsxs(H.Typography,{variant:"small",color:"blue-gray",children:[tn.length," vorhanden"]})]}),tn.length===0?y.jsx("p",{className:"text-sm text-stormGrey-500",children:"Es sind derzeit keine Server hinterlegt."}):y.jsx("div",{className:"flex flex-col gap-3",children:tn.map(xe=>{const Le=so.get(xe.id)||null,ze=!!(Le!=null&&Le.hasKey),We=Le!=null&&Le.updatedAt?new Date(Le.updatedAt).toLocaleString("de-DE",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):null;return y.jsxs("div",{className:"flex flex-col gap-3 rounded-md border border-blue-gray-100 p-3 md:flex-row md:items-start md:justify-between",children:[y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsx("p",{className:"text-sm font-medium text-stormGrey-900",children:xe.name||"Ohne Namen"}),y.jsx("p",{className:"text-xs text-stormGrey-500 break-all",children:xe.url}),y.jsxs("p",{className:"text-xs text-stormGrey-500",children:["API-Key: ",ze?"vorhanden":"nicht hinterlegt",We?` (aktualisiert am ${We})`:""]})]}),y.jsxs("div",{className:"flex w-full flex-col gap-2 md:max-w-xs",children:[y.jsx(H.Input,{type:"password",label:"Neuer API-Key",value:Pt[xe.id]??"",onChange:it=>Mu(xe.id,it.target.value),disabled:!k||dt||hr===xe.id}),y.jsxs("div",{className:"flex items-center gap-2 justify-end",children:[y.jsx(H.Button,{variant:"text",color:"red",size:"sm",onClick:()=>Ru(xe.id),disabled:te||!A||dt||Jr===xe.id||hr===xe.id,children:Jr===xe.id?"Lösche…":"Löschen"}),y.jsx(H.Button,{color:"blue",size:"sm",onClick:()=>Vs(xe.id),disabled:te||!k||dt||hr===xe.id,children:hr===xe.id?"Speichere…":"API-Key speichern"})]})]})]},xe.id)})})]}),y.jsxs("div",{className:"flex flex-col gap-3 border-t border-blue-gray-50 pt-4",children:[y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsx(H.Typography,{variant:"small",color:"blue-gray",className:"font-semibold uppercase",children:"Self-Stack-ID"}),y.jsx("p",{className:"text-xs text-stormGrey-500",children:"Optional – lass das Feld leer, wenn keine Self-Stack-ID benötigt wird."})]}),(In==null?void 0:In.envProvided)&&y.jsx("p",{className:"text-xs text-stormGrey-500",children:"Hinweis: Eine Umgebungsvariable liefert bereits einen Standardwert."}),y.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:items-end",children:[y.jsx("div",{className:"flex-1",children:y.jsx(H.Input,{label:"Self-Stack-ID",value:Mr,onChange:xe=>Iu(xe.target.value),disabled:!k||dt||wr})}),k&&y.jsxs("div",{className:"flex items-center justify-end gap-2",children:[y.jsx(H.Button,{variant:"text",color:"red",size:"sm",onClick:Du,disabled:te||wr||!Dn&&!Mr,children:"Entfernen"}),y.jsx(H.Button,{color:"blue",size:"sm",onClick:tp,disabled:te||wr||dt||!Bs,children:wr?"Speichere…":"Self-Stack-ID speichern"})]})]}),!k&&y.jsx("p",{className:"text-xs text-stormGrey-500",children:"Bearbeitung benötigt das Gruppenrecht „Server-Sektion“."}),y.jsxs("p",{className:"text-xs text-stormGrey-500",children:["Aktuell gespeichert: ",Dn||"nicht gesetzt"]}),_i&&y.jsxs("p",{className:"text-xs text-stormGrey-500",children:["Vorgabe aus Umgebung: ",_i]}),An&&y.jsx(H.Alert,{color:"red",className:"border border-red-200 bg-red-50 text-red-700",children:An})]}),!Da&&y.jsx(H.Alert,{color:"amber",className:"border border-amber-200 bg-amber-50 text-amber-800",children:"Das Setup ist aktuell unvollständig. Bitte öffne den Setup-Bereich, um Server und API-Key erneut festzulegen."}),y.jsx("div",{className:"flex items-center justify-end",children:y.jsx(H.Button,{variant:"outlined",color:"gray",size:"sm",onClick:()=>Nt(),disabled:te||dt,children:"Aktualisieren"})})]})]})]}),N&&y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:y.jsx("span",{children:"Superuser"})})}),y.jsxs(H.CardBody,{className:"flex flex-col gap-4 p-4",children:[y.jsxs("div",{className:"space-y-2",children:[ge&&y.jsx("p",{className:"text-sm text-stormGrey-500",children:"Status wird geladen…"}),!ge&&Oe&&y.jsx("p",{className:"text-sm text-sunsetCoral-600",children:Oe}),!ge&&!Oe&&ve&&y.jsxs("div",{className:"space-y-1",children:[y.jsx("p",{className:"text-sm",children:"Superuser ist angelegt."}),y.jsxs("p",{className:"text-xs text-stormGrey-500",children:["Benutzername: ",y.jsx("span",{className:"font-medium text-stormGrey-900",children:(ie==null?void 0:ie.username)??"unbekannt"}),ie!=null&&ie.email?` - ${ie.email}`:""]})]}),!ge&&!Oe&&!ve&&y.jsx("p",{className:"text-sm",children:"Es ist kein Superuser vorhanden."})]}),y.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Button,{variant:"outlined",color:"gray",onClick:()=>jt(),disabled:te||ge||Ue,className:"w-full sm:w-auto",children:"Status aktualisieren"}),y.jsx(H.Button,{color:"red",onClick:Au,disabled:te||!M||ge||Ue||!ve,className:"w-full sm:w-auto",children:Ue?"Wird gelöscht…":"Superuser löschen"})]}),y.jsx("p",{className:"text-xs text-stormGrey-500",children:"Entfernt das Superuser-Konto samt zugehöriger Gruppe. Danach kann der Erstbenutzer bei Bedarf erneut angelegt werden."})]})]}),D&&y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:y.jsx("span",{children:"Portainer"})})}),y.jsxs(H.CardBody,{className:"flex flex-col gap-4 p-4 pt-0",children:[y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[y.jsxs("div",{children:[y.jsx("h2",{className:"block antialiased font-sans text-lg font-semibold",children:"Portainer Status"}),y.jsx("p",{className:"block antialiased font-sans text-sm font-light leading-normal text-inherit",children:To?"Status wird geprüft…":io||(X?"Portainer wird aktuell aktualisiert.":(Ct==null?void 0:Ct.updateAvailable)===!0?"Es ist ein Update für Portainer verfügbar.":"Portainer ist auf dem aktuellen Stand.")}),wi&&!To&&y.jsxs("p",{className:"mt-1 text-xs text-stormGrey-500 block antialiased font-sans",children:["Stand: ",wi.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})]})]}),y.jsx("div",{className:"flex items-center gap-3",children:y.jsx(H.Button,{onClick:()=>zt({silent:!1}),disabled:te||To||Ma,className:"w-full",children:"Status aktualisieren"})})]}),y.jsx("div",{className:"flex flex-col gap-4 mt-5 space-y-4 block antialiased font-sans text-sm font-light leading-normal text-inherit",children:!To&&!io&&Ct&&y.jsxs("div",{className:"",children:[y.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[y.jsx("span",{children:"Installierte Version"}),y.jsx("span",{className:"font-medium",children:Ct.currentVersion??"Unbekannt"})]}),y.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[y.jsx("span",{children:"Neueste Version"}),y.jsx("span",{className:"font-medium",children:Ct.latestVersion??"Unbekannt"})]}),y.jsxs("div",{className:"flex items-center justify-between space-y-2",children:[y.jsx("span",{children:"Status"}),y.jsx("span",{className:`rounded-full px-3 py-0.5 text-xs font-semibold ${Ct.updateAvailable===!0?dl.error:Ct.updateAvailable===!1?dl.success:dl.idle}`,children:Ct.updateAvailable===!0?"Update verfügbar":Ct.updateAvailable===!1?"Aktuell":"Unbekannt"})]}),Ct.edition&&y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{className:"text-stormGrey-400",children:"Edition"}),y.jsx("span",{className:"font-medium",children:Ct.edition})]}),Ct.build&&y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{className:"text-stormGrey-400",children:"Build"}),y.jsx("span",{className:"font-medium",children:Ct.build})]}),((Uu=Ct.errors)==null?void 0:Uu.latestVersion)&&y.jsxs("div",{className:"rounded-md mt-8 border bg-sunsetCoral-600 text-white px-3 py-2 text-xs",children:["Neueste Version konnte nicht ermittelt werden: ",Ct.errors.latestVersion]}),(($s=Ct.errors)==null?void 0:$s.container)&&y.jsxs("div",{className:"rounded-md mt-8 border bg-sunsetCoral-600 text-white px-3 py-2 text-xs",children:["Container-Details konnten nicht ermittelt werden: ",Ct.errors.container]})]})}),y.jsxs("div",{className:"mt-6 grid gap-6 lg:grid-cols-2 xl:grid-cols-3",children:[B&&y.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[y.jsx("div",{className:"flex items-center justify-between",children:y.jsx("h3",{className:"text-sm font-semibold",children:"SSH-Verbindung"})}),y.jsxs("div",{className:"mt-3 grid gap-3 text-sm",children:[y.jsxs("label",{className:"grid gap-1",children:[y.jsx("span",{className:"text-xs uppercase tracking-wide",children:"Host"}),y.jsx("input",{type:"text",value:ke.host,onChange:xe=>La("host",xe.target.value),disabled:!U||Qe||Xe||Ve||X,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]}),y.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[y.jsxs("label",{className:"grid gap-1",children:[y.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Port"}),y.jsx("input",{type:"number",min:"1",value:ke.port,onChange:xe=>La("port",xe.target.value),disabled:!U||Qe||Xe||Ve||X,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]}),y.jsxs("label",{className:"grid gap-1",children:[y.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Benutzer"}),y.jsx("input",{type:"text",value:ke.username,onChange:xe=>La("username",xe.target.value),disabled:!U||Qe||Xe||Ve||X,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none"})]})]}),y.jsxs("div",{className:"grid gap-1",children:[y.jsxs("div",{className:"flex items-center justify-between text-xs uppercase tracking-wide ",children:[y.jsx("label",{htmlFor:"maintenance-ssh-password",className:"cursor-pointer",children:"Passwort"}),y.jsx("button",{type:"button",onClick:()=>Je(xe=>!xe),disabled:!U||Qe||Xe||Ve||X,className:"text-[11px] font-medium text-blue-500 transition hover:text-blue-800 disabled:opacity-50",children:qe?"Verbergen":"Anzeigen"})]}),y.jsx("input",{id:"maintenance-ssh-password",type:qe?"text":"password",value:ke.password,onChange:xe=>La("password",xe.target.value),disabled:!U||Qe||Xe||Ve||X,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none",placeholder:"Passwort für den SSH-Benutzer",autoComplete:"off",spellCheck:!1}),je&&!ke.password&&y.jsx("span",{className:"text-[11px] ",children:"Ein Passwort ist gespeichert. Neuer Inhalt ersetzt es oder lösche die Konfiguration unten."})]}),y.jsxs("label",{className:"grid gap-1",children:[y.jsx("span",{className:"text-xs uppercase tracking-wide ",children:"Weitere SSH-Argumente"}),y.jsx("textarea",{rows:3,value:ke.extraSshArgs,onChange:xe=>La("extraSshArgs",xe.target.value),disabled:!U||Qe||Xe||Ve||X,className:"w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 font-mono text-[11px] focus:border-purple-500 focus:outline-none",placeholder:"je Zeile ein Argument (optional)"})]})]}),y.jsxs("div",{className:"mt-4 grid gap-2",children:[y.jsx(H.Button,{onClick:Po,disabled:!U||Qe||Xe||Ve||te,className:"mt-3 w-full",children:Qe?"Speichern…":"SSH-Konfiguration speichern"}),y.jsx(H.Button,{onClick:Ti,disabled:!U||Qe||Xe||Ve||te,className:"w-full bg-arcticBlue-500 hover:bg-arcticBlue-600",children:Xe?"Test läuft…":"Verbindung testen"}),y.jsx(H.Button,{onClick:ju,disabled:!U||Qe||Xe||Ve||te,className:"w-full hover:bg-sunsetCoral-600 bg-sunsetCoral-500",children:Ve?"Löschen…":"SSH-Einstellungen löschen"})]}),_t&&y.jsx("p",{className:`mt-3 text-xs ${_t.success?"text-mossGreen-600":"text-sunsetCoral-500"}`,children:_t.success?"SSH-Verbindung erfolgreich.":`SSH-Verbindung fehlgeschlagen: ${_t.error}`})]}),B&&y.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("h3",{className:"text-sm font-semibold",children:"Update-Skript"}),y.jsxs("span",{className:"text-xs",children:["Quelle: ",ae]})]}),y.jsx("textarea",{value:me,onChange:xe=>de(xe.target.value),rows:10,disabled:!U||ee||X,className:"mt-3 w-full rounded-md border border-gray-700/20 px-3 py-2 font-mono text-xs focus:border-purple-500 focus:outline-none"}),y.jsxs("div",{className:"mt-3 grid gap-2",children:[y.jsx(H.Button,{onClick:ep,disabled:!U||!Te||ee||te,className:"mt-3 w-full",children:"Speichern"}),y.jsx(H.Button,{color:"purple",onClick:Eu,disabled:!U||!a||a.source!=="custom"||ee||te,className:"w-full hover:bg-sunsetCoral-600 bg-sunsetCoral-500",children:"Standard wiederherstellen"})]}),(a==null?void 0:a.customUpdatedAt)&&y.jsxs("p",{className:"mt-2 text-xs text-stormGrey-500",children:["Zuletzt geändert: ",Ua(a.customUpdatedAt)]})]}),B&&y.jsxs("div",{className:"rounded-md border border-gray-700/20 p-4",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("h3",{className:"text-sm font-semibold",children:"Update-Status"}),y.jsx("span",{className:`rounded-full px-3 py-0.5 text-xs font-semibold ${np}`,children:Us})]}),y.jsxs("div",{className:"mt-3 grid gap-2 text-xs",children:[y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{children:"Phase"}),y.jsx("span",{className:"font-medium",children:Fu})]}),y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{children:"Ziel-Version"}),y.jsx("span",{className:"font-medium",children:op})]}),y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{children:"Installierte Version"}),y.jsx("span",{className:"font-medium",children:ap})]}),y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{children:"Gestartet"}),y.jsx("span",{children:ip})]}),y.jsxs("div",{className:"flex items-center justify-between",children:[y.jsx("span",{children:"Beendet"}),y.jsx("span",{children:sp})]}),Bu&&y.jsx("div",{className:"rounded-md border border-mossGreen-700 bg-mossGreen-800 px-3 py-2 text-xs text-white",children:Bu}),(o==null?void 0:o.error)&&y.jsx("div",{className:"rounded-md border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-3 py-2 text-xs text-white",children:o.error}),be&&y.jsx("div",{className:"rounded-md border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-3 py-2 text-xs text-white",children:be})]}),y.jsx("div",{className:"mt-3 h-40 overflow-y-auto rounded-md border border-gray-700/20 bg-gray-950/70 p-3 font-mono text-[11px] leading-relaxed",children:zu.length===0?y.jsx("p",{className:"text-stormGrey-500",children:"Noch keine Protokolle vorhanden."}):zu.map((xe,Le)=>y.jsxs("div",{className:"mb-2 last:mb-0",children:[y.jsxs("span",{className:"text-gray-500",children:["[",oV(xe.timestamp),"]"]})," ",y.jsx("span",{className:(nV[xe.level]??"text-stormGrey-300")+" whitespace-normal break-words",style:{overflowWrap:"anywhere",wordBreak:"normal"},children:xe.message})]},`${xe.timestamp}-${Le}`))}),y.jsx(H.Button,{onClick:rp,disabled:te||!L||lo||pe,className:"mt-3 w-full",children:pe?"Update wird gestartet…":"Portainer aktualisieren"})]})]})]})]}),Y&&y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",className:"flex items-center justify-between",children:y.jsx("span",{children:"Doppelte Stacks"})})}),y.jsxs(H.CardBody,{className:"flex flex-col gap-4 p-4",children:[y.jsx("div",{className:"rounded-lg border border-warmAmberGlow-600 bg-warmAmberGlow-700 px-4 py-3 text-sm text-white",children:"Das Entfernen von doppelten Stacks ist noch nicht getestet. Bitte nicht in Produktivumgebungen einsetzen."}),y.jsxs("div",{className:"flex items-start justify-between gap-4",children:[y.jsxs("div",{className:"space-y-1",children:[y.jsx("p",{className:"text-sm antialiased font-sans text-sm font-light leading-normal text-inherit",children:Ln?"Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.":Mt?"Analyse läuft…":Si.groups===0?"Keine Duplikate gefunden":`${Si.groups} Stack-Namen mit insgesamt ${Si.duplicateCount} Duplikaten gefunden`}),gr&&!Mt&&!Ln&&y.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:["Stand: ",gr.toLocaleString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})]})]}),y.jsx(H.Button,{onClick:()=>Or({silent:!1}),disabled:Ln||Mt||or||Rn!==null,className:"",children:"Aktualisieren"}),Et&&!Ln&&y.jsx("div",{className:"rounded-lg border border-sunsetCoral-500/60 bg-sunsetCoral-900/40 px-4 py-3 text-sm text-white",children:Et})]}),Mt?y.jsx("div",{className:"flex flex-col gap-4 p-4",children:"Daten werden geladen…"}):Si.groups===0||Ln?y.jsx("div",{className:"rounded-xl border-mossGreen-500/80 bg-mossGreen-900/90 text-mossGreen-100 p-8 text-center text-sm text-white",children:Ln?"Wartungsmodus aktiv – Duplikat-Verwaltung ist vorübergehend deaktiviert.":"Es wurden keine doppelten Stacks gefunden."}):y.jsx("div",{className:"space-y-5",children:Ae.map(xe=>{var it,Wt,Vt;const Le=(it=xe==null?void 0:xe.canonical)==null?void 0:it.Id,ze=(xe==null?void 0:xe.duplicates)||[],We=Rn===String(Le);return y.jsxs("div",{className:"rounded-xl border border-gray-700 bg-gray-800/70 p-6 shadow",children:[y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[y.jsxs("div",{className:"space-y-1",children:[y.jsxs("div",{className:"flex items-center gap-2",children:[y.jsx("h3",{className:"text-lg font-semibold text-white",children:xe.name}),y.jsxs("span",{className:"rounded-full bg-amber-500/20 px-3 py-0.5 text-xs font-medium text-amber-200",children:[ze.length," Duplikat",ze.length===1?"":"e"]})]}),y.jsxs("p",{className:"text-sm text-gray-300",children:["Behaltener Stack: ID ",Le]}),y.jsxs("p",{className:"text-xs text-gray-500",children:["Typ: ",Yw((Wt=xe==null?void 0:xe.canonical)==null?void 0:Wt.Type)," • Erstellt: ",Ua((Vt=xe==null?void 0:xe.canonical)==null?void 0:Vt.Created)]})]}),y.jsx("button",{type:"button",onClick:()=>Lu(xe),disabled:!q||Ln||We||or||Mt,className:"self-start rounded-lg bg-sunsetCoral-500 px-4 py-2 text-sm font-semibold text-white transition hover:bg-sunsetCoral-600 disabled:opacity-50",children:We?"Bereinigung läuft…":`Bereinigen (${ze.length})`})]}),y.jsx("div",{className:"mt-5 grid gap-3",children:ze.map(rn=>y.jsx("div",{className:"rounded-lg border border-sunsetCoral-500/40 bg-sunsetCoral-900/20 p-4 text-sm text-white",children:y.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[y.jsxs("span",{className:"font-semibold text-white",children:["ID: ",rn.Id]}),y.jsxs("span",{children:["Typ: ",Yw(rn.Type)]}),y.jsxs("span",{children:["Erstellt: ",Ua(rn.Created)]})]})},rn.Id))})]},Le||xe.name)})})]})]})]}):null}const iV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},Ha=xo.forwardRef(({value:e,onClick:t,onKeyDown:r,...n},o)=>{const{setOpen:a}=H.useSelect(),i=P.useCallback(()=>{(typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame:b=>setTimeout(b,0))(()=>{a(!0)})},[a]),c=P.useCallback(g=>{typeof t=="function"&&t(g),i()},[t,i]),f=P.useCallback(g=>{typeof r=="function"&&r(g),(g.key==="Enter"||g.key===" ")&&i()},[r,i]);return y.jsx(H.Option,{...n,value:e,ref:o,onClick:c,onKeyDown:f})});Ha.displayName="StickyOption";const sV={success:"text-mossGreen-500",warning:"text-warmAmberGlow-500",error:"text-sunsetCoral-500",started:"text-arcticBlue-500",running:"text-arcticBlue-500",info:"text-arcticBlue-500",queued:"text-indigo-500"},lV=e=>{if(!e)return"-";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("de-DE",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})},Qw=e=>{if(e)return e.replace("T"," ")},Xw="eventLogFilters",po="__all__",uV="- Alle -",cV=e=>!!(e.categories&&e.categories.length||e.eventTypes&&e.eventTypes.length||e.actions&&e.actions.length||e.statuses&&e.statuses.length||e.entityTypes&&e.entityTypes.length||e.contextTypes&&e.contextTypes.length||e.entityId&&e.entityId.trim()||e.contextId&&e.contextId.trim()||e.search&&e.search.trim()||e.from&&e.from.trim()||e.to&&e.to.trim()),dV=e=>{if(e==null)return"-";if(typeof e=="object")try{return JSON.stringify(e)}catch{return"[Objekt]"}return String(e)},fV=e=>{if(!e||typeof e!="object")return"";const t=Object.entries(e);return t.length?t.map(([r,n])=>`${r}: ${dV(n)}`).join(" • "):""};function pV(){const[e,t]=P.useState([]),[r,n]=P.useState(!0),[o,a]=P.useState(""),[i,c]=P.useState(!1),[f,g]=P.useState([]),[b,S]=P.useState([]),[O,T]=P.useState([]),[C,x]=P.useState([]),[m,d]=P.useState([]),[s,u]=P.useState([]),[l,h]=P.useState([]),[v,w]=P.useState([]),[j,N]=P.useState([]),[k,A]=P.useState([]),[M,D]=P.useState([]),[L,B]=P.useState([]),[U,Y]=P.useState(""),[q,z]=P.useState(""),[$,K]=P.useState(""),[X,te]=P.useState(""),[me,de]=P.useState(""),[ee,Se]=P.useState(!1),[pe,fe]=P.useState(!1),[be,ye]=P.useState(!1),[Pe,Me]=P.useState(0),{maintenance:ke,update:ce}=Aa(),je=!!(ke!=null&&ke.active),He=ke==null?void 0:ke.message,qe=!!(ce!=null&&ce.running),Je=je||qe,Qe=ce!=null&&ce.stage?iV[ce.stage]??ce.stage:"–",{hasPermission:Ge}=Ur(),Xe=Ge("logs-delete","full"),ht=Ge("logs-export","full"),{page:Ve,perPage:ot,perPageOptions:_t,setPage:Ne,setPerPage:at,setTotals:Te,handlePerPageChange:ae,validPerPageValues:ge,resetPagination:oe}=Nu(),ve=P.useCallback(()=>{},[]);P.useEffect(()=>()=>oe(),[oe]);const se=P.useCallback(J=>{const Ae=Array.isArray(J)?J:(J==null?void 0:J.items)??[],Be=new Set,Mt=new Set,yt=new Set,Et=new Set,It=new Set,or=new Set;Ae.forEach(kt=>{kt.category&&Be.add(kt.category),kt.eventType&&Mt.add(kt.eventType),kt.action&&yt.add(kt.action),kt.status&&Et.add(kt.status),kt.entityType&&It.add(kt.entityType),kt.contextType&&or.add(kt.contextType)}),g(Array.from(Be).sort()),S(Array.from(Mt).sort()),T(Array.from(yt).sort()),x(Array.from(Et).sort()),d(Array.from(It).sort()),u(Array.from(or).sort()),ye(!0)},[]);P.useEffect(()=>{be&&h(J=>{const Ae=J.filter(Be=>f.includes(Be));return Ae.length===J.length?J:Ae})},[be,f]),P.useEffect(()=>{be&&w(J=>{const Ae=J.filter(Be=>b.includes(Be));return Ae.length===J.length?J:Ae})},[be,b]),P.useEffect(()=>{be&&N(J=>{const Ae=J.filter(Be=>O.includes(Be));return Ae.length===J.length?J:Ae})},[be,O]),P.useEffect(()=>{be&&A(J=>{const Ae=J.filter(Be=>C.includes(Be));return Ae.length===J.length?J:Ae})},[be,C]),P.useEffect(()=>{be&&D(J=>{const Ae=J.filter(Be=>m.includes(Be));return Ae.length===J.length?J:Ae})},[be,m]),P.useEffect(()=>{be&&B(J=>{const Ae=J.filter(Be=>s.includes(Be));return Ae.length===J.length?J:Ae})},[be,s]),P.useEffect(()=>{if(typeof window>"u"){fe(!0);return}try{const J=window.localStorage.getItem(Xw);if(J){const Ae=JSON.parse(J),Be=(Ae==null?void 0:Ae.filters)??Ae??{},Mt=(Ae==null?void 0:Ae.pagination)??{};h(Be.categories||[]),w(Be.eventTypes||[]),N(Be.actions||[]),A(Be.statuses||[]),D(Be.entityTypes||[]),B(Be.contextTypes||[]),Y(Be.entityId||""),z(Be.contextId||""),K(Be.search||""),te(Be.from||""),de(Be.to||""),Se(cV(Be));const yt=Mt.perPage;if(yt!==void 0){const It=String(yt);ge.has(It)&&at(It,{resetPage:!1})}const Et=Mt.page;typeof Et=="number"&&Et>0&&Ne(Et)}}catch(J){console.error("❌ Fehler beim Laden der gespeicherten Log-Filter:",J)}finally{fe(!0)}},[Ne,at,ge]);const ie=P.useCallback(()=>{const J={};l.length&&(J.categories=l.join(",")),v.length&&(J.eventTypes=v.join(",")),j.length&&(J.actions=j.join(",")),k.length&&(J.statuses=k.join(",")),M.length&&(J.entityTypes=M.join(",")),L.length&&(J.contextTypes=L.join(",")),U.trim()&&(J.entityId=U.trim()),q.trim()&&(J.contextId=q.trim()),$.trim()&&(J.search=$.trim());const Ae=Qw(X);Ae&&(J.from=Ae);const Be=Qw(me);return Be&&(J.to=Be),J},[l,v,j,k,M,L,U,q,$,X,me]);P.useEffect(()=>{if(!pe)return;let J=!1;return lt.get("/api/logs",{params:{perPage:"all",page:1}}).then(Ae=>{J||se(Ae.data)}).catch(Ae=>{J||console.error("⚠️ Konnte Filteroptionen nicht aktualisieren:",Ae)}),()=>{J=!0}},[pe,se,Pe]);const he=P.useMemo(()=>({categories:l,eventTypes:v,actions:j,statuses:k,entityTypes:M,contextTypes:L,entityId:U,contextId:q,search:$,from:X,to:me}),[l,v,j,k,M,L,U,q,$,X,me]);P.useEffect(()=>{if(!pe)return;const J={...ie()};ot==="all"?(J.perPage="all",J.page=1):(J.perPage=ot,J.page=Ve);let Ae=!1;return n(!0),a(""),lt.get("/api/logs",{params:J}).then(Be=>{if(Ae)return;const Mt=Be.data||{},yt=Array.isArray(Mt)?Mt:Mt.items??[],Et=Array.isArray(Mt)?yt.length:Mt.total??yt.length;if(t(yt),Te(Et,yt.length),ot==="all")Ve!==1&&Ne(1);else{const It=Math.max(1,Math.ceil((Et||0)/Number(ot))),or=Math.min(Math.max(Ve,1),It);or!==Ve&&Ne(or)}}).catch(Be=>{Ae||(console.error("❌ Fehler beim Laden der Logs:",Be),a("Fehler beim Laden der Logs"))}).finally(()=>{Ae||n(!1)}),()=>{Ae=!0}},[pe,ie,se,Pe,ot,Ve,Te]),P.useEffect(()=>{if(pe&&!(typeof window>"u"))try{window.localStorage.setItem(Xw,JSON.stringify({filters:he,pagination:{perPage:ot,page:Ve}}))}catch(J){console.error("⚠️ Konnte Filter nicht speichern:",J)}},[pe,he,ot,Ve]);const Oe=P.useCallback(J=>Ae=>{var yt;if(typeof Ae=="string"){const Et=Ae;if(Et==="")return;J(It=>Et===po?[]:It.includes(Et)?It.filter(or=>or!==Et):[...It,Et]),Ne(1);return}const Be=(yt=Ae==null?void 0:Ae.target)==null?void 0:yt.selectedOptions;if(!Be)return;const Mt=Array.from(Be).map(Et=>Et.value);Mt.includes(po)?J([]):J(Mt),Ne(1)},[Ne]),Ce=P.useMemo(()=>Oe(h),[Oe]),Ue=P.useMemo(()=>Oe(w),[Oe]),Fe=P.useMemo(()=>Oe(N),[Oe]),Ie=P.useMemo(()=>Oe(A),[Oe]),Ee=P.useMemo(()=>Oe(D),[Oe]),dt=P.useMemo(()=>Oe(B),[Oe]),ft=(J,Ae)=>{J(Be=>Be.filter(Mt=>Mt!==Ae)),Ne(1)},Ft=()=>{h([]),w([]),N([]),A([]),D([]),B([]),Y(""),z(""),K(""),te(""),de(""),Se(!1),Ne(1)},Kt=()=>{Se(J=>!J)},Pt=P.useCallback(J=>[{value:po,label:uV},...J.filter(Ae=>Ae!==po).map(Ae=>({value:Ae,label:Ae}))],[]),Rt=P.useMemo(()=>Pt(f),[Pt,f]),hr=P.useMemo(()=>Pt(b),[Pt,b]),ir=P.useMemo(()=>Pt(O),[Pt,O]),Jr=P.useMemo(()=>Pt(C),[Pt,C]),jn=P.useMemo(()=>Pt(m),[Pt,m]),Mr=P.useMemo(()=>Pt(s),[Pt,s]),en=P.useMemo(()=>{let J=0;return l.length&&(J+=l.length),v.length&&(J+=v.length),j.length&&(J+=j.length),k.length&&(J+=k.length),M.length&&(J+=M.length),L.length&&(J+=L.length),U.trim()&&(J+=1),q.trim()&&(J+=1),$.trim()&&(J+=1),X&&(J+=1),me&&(J+=1),J},[l,v,j,k,M,L,U,q,$,X,me]),wr=async J=>{if(!Xe){a("Dir fehlt die Berechtigung, einzelne Logeinträge zu löschen.");return}if(window.confirm("Diesen Log-Eintrag dauerhaft löschen?")){c(!0),a("");try{await lt.delete(`/api/logs/${J}`),Me(Ae=>Ae+1)}catch(Ae){console.error("❌ Fehler beim Löschen des Logs:",Ae),a("Fehler beim Löschen des Logs")}finally{c(!1)}}},no=async()=>{if(!Xe){a("Dir fehlt die Berechtigung, Logs zu löschen.");return}if(e.length&&window.confirm("Alle angezeigten Logs (entsprechend Filter) löschen?")){c(!0),a("");try{const J={...ie(),ids:e.map(Ae=>Ae.id).join(",")};await lt.delete("/api/logs",{params:J}),Me(Ae=>Ae+1)}catch(J){console.error("❌ Fehler beim Löschen der gefilterten Logs:",J),a("Fehler beim Löschen der gefilterten Logs")}finally{c(!1)}}},An=async J=>{if(!ht){a("Dir fehlt die Berechtigung, Logs zu exportieren.");return}c(!0),a("");try{const Ae=await lt.get("/api/logs/export",{params:{...ie(),format:J},responseType:"blob"}),Be=Ae.headers["content-type"]||(J==="sql"?"application/sql":"text/plain"),yt=(Ae.headers["content-disposition"]||"").match(/filename="?([^";]+)"?/i),Et=(yt==null?void 0:yt[1])||`event-logs.${J}`,It=new Blob([Ae.data],{type:Be}),or=window.URL.createObjectURL(It),kt=document.createElement("a");kt.href=or,kt.download=Et,document.body.appendChild(kt),kt.click(),kt.remove(),window.URL.revokeObjectURL(or)}catch(Ae){console.error("❌ Fehler beim Export der Logs:",Ae),a("Fehler beim Export der Logs")}finally{c(!1)}};return xo.useState(!1),y.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(je||qe)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",He?` – ${He}`:qe?" – Portainer-Update läuft":"","."]}),qe&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",Qe]})]})}),y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",children:y.jsxs("button",{onClick:Kt,className:"flex w-full items-center justify-between",children:[y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx("span",{children:"Logs"}),en>0&&y.jsxs("span",{className:"rounded-full bg-blue-gray-500/80 px-2 py-0.5 text-xs text-white",children:[en," aktiv"]})]}),y.jsx("span",{className:"text-xs uppercase tracking-wide text-gray-400",children:ee?"Filter ausblenden":"Filter anzeigen"})]})})}),y.jsxs(H.CardBody,{className:"pt-0",children:[ee&&y.jsxs("div",{className:"mb-8",children:[(ht||Xe)&&y.jsxs("div",{className:"flex flex-wrap gap-2",children:[ht&&y.jsxs(y.Fragment,{children:[y.jsx(H.Button,{onClick:()=>An("txt"),disabled:Je||i||r,className:"w-full md:flex-1",children:"Export TXT"}),y.jsx(H.Button,{onClick:()=>An("sql"),disabled:Je||i||r,className:"w-full md:flex-1",children:"Export SQL"})]}),Xe&&y.jsx(H.Button,{onClick:no,disabled:Je||i||r||e.length===0,className:"w-full md:flex-1 bg-sunsetCoral-500 hover:bg-sunsetCoral-600",children:"Angezeigte löschen"})]}),y.jsxs("div",{className:"grid gap-6 mt-10",children:[y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Kategorien",children:Rt.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>Ce(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),Ce(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:l.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Kategorien"}):y.jsx("span",{children:l.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(h,J),className:"rounded-full bg-lavenderSmoke-600/80 px-2 py-0.5 text-white transition hover:bg-lavenderSmoke-600/90 focus:outline-none focus:ring-2 focus:ring-lavenderSmoke-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]}),y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Event-Typen",children:hr.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>Ue(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),Ue(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:v.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Event-Typen"}):y.jsx("span",{children:v.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(w,J),className:"rounded-full bg-citrusPunch-600/80 px-2 py-0.5 text-white transition hover:bg-citrusPunch-600/90 focus:outline-none focus:ring-2 focus:ring-citrusPunch-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]})]}),y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Aktionen",children:ir.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>Fe(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),Fe(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:j.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Aktionen"}):y.jsx("span",{children:j.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(N,J),className:"rounded-full bg-emeraldMist-500/80 px-2 py-0.5 text-white transition hover:bg-emeraldMist-500/90 focus:outline-none focus:ring-2 focus:ring-emeraldMist-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]}),y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Status",children:Jr.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>Ie(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),Ie(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:k.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Status"}):y.jsx("span",{children:k.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(A,J),className:"rounded-full bg-copperRust-600/80 px-2 py-0.5 text-white transition hover:bg-copperRust-600/90 focus:outline-none focus:ring-2 focus:ring-copperRust-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]})]}),y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Entitäts-Typen",children:jn.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>Ee(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),Ee(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:M.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Entitäten"}):y.jsx("span",{children:M.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(D,J),className:"rounded-full bg-indigo-600/80 px-2 py-0.5 text-white transition hover:bg-indigo-600/90 focus:outline-none focus:ring-2 focus:ring-indigo-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]}),y.jsxs("div",{className:"grid gap-3",children:[y.jsx(H.Select,{multiple:!0,onChange:ve,className:"text-stormGrey-500",variant:"static",dismiss:{itemPress:!1},label:"Kontext",children:Mr.map(({value:J,label:Ae})=>y.jsx(Ha,{value:J,onClick:()=>dt(J),onKeyDown:Be=>{(Be.key==="Enter"||Be.key===" ")&&(Be.preventDefault(),dt(J))},className:`text-black-600 ${J===po?"font-semibold text-black-800":""}`,children:Ae},J))}),y.jsx("div",{className:"mt-2 mb-2 min-h-[1.5rem] text-xs text-stormGrey-400",children:L.length===0?y.jsx("span",{className:"rounded-full bg-stormGrey-700/60 px-2 py-0.5 text-white",children:"Alle Kontexte"}):y.jsx("span",{children:L.map(J=>y.jsx("button",{type:"button",onClick:()=>ft(B,J),className:"rounded-full bg-sunsetCoral-600/80 px-2 py-0.5 text-white transition hover:bg-sunsetCoral-600/90 focus:outline-none focus:ring-2 focus:ring-sunsetCoral-400 cursor-pointer",title:"Filter entfernen",children:J},J))})})]})]}),y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{value:U,onChange:J=>{Y(J.target.value),Ne(1)},variant:"static",label:"Entitäts-ID",placeholder:"z. B. Stack-ID"})}),y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{value:q,onChange:J=>{z(J.target.value),Ne(1)},variant:"static",label:"Kontext-ID",placeholder:"z. B. Server-ID"})})]}),y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{value:$,onChange:J=>{K(J.target.value),Ne(1)},variant:"static",label:"Suche (Nachricht & Details)",placeholder:"Freitext"})}),y.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:y.jsx(H.Select,{variant:"static",label:"Einträge pro Seite",onChange:ve,value:ot,children:_t.map(({value:J,label:Ae})=>y.jsx(H.Option,{value:J,onClick:()=>ae(J),children:Ae},J))})})]}),y.jsxs("div",{className:"flex flex-col md:flex-row flex-wrap gap-4",children:[y.jsx("div",{className:"flex-1 min-w-[200px]",children:y.jsx(H.Input,{type:"datetime-local",variant:"static",label:"Von",value:X,onChange:J=>{te(J.target.value),Ne(1)},className:"w-full"})}),y.jsx("div",{className:"flex-1 min-w-[200px]",children:y.jsx(H.Input,{type:"datetime-local",variant:"static",label:"Bis",value:me,onChange:J=>{de(J.target.value),Ne(1)},className:"w-full"})}),y.jsx("div",{className:"flex-1 min-w-[180px]",children:y.jsx(H.Button,{onClick:Ft,disabled:Je||i||r,className:"w-full",children:"Zurücksetzen"})})]})]})]}),y.jsx("div",{className:"overflow-x-auto rounded-lg border border-blue-gray-50",children:y.jsxs("table",{className:"w-full min-w-[860px] table-auto text-left",children:[y.jsx("thead",{children:y.jsx("tr",{className:"bg-blue-gray-50/50 text-xs uppercase tracking-wide text-stormGrey-400",children:["Zeitpunkt","Kategorie","Status","Entität","Kontext","Nachricht","Details","Aktionen"].map(J=>y.jsx("th",{className:"px-6 py-4 font-semibold",children:J},J))})}),y.jsx("tbody",{children:r?y.jsx("tr",{children:y.jsx("td",{colSpan:8,className:"px-6 py-8 text-center text-stormGrey-400",children:"Logs werden geladen ..."})}):e.length===0?y.jsx("tr",{children:y.jsx("td",{colSpan:8,className:"px-6 py-8 text-center text-stormGrey-400",children:"Keine Logs gefunden."})}):e.map((J,Ae)=>{const Be=sV[J.status]||"text-blue-300",Mt=Ae===e.length-1?"":"border-b border-blue-gray-50",yt=J.category||"-",Et=J.entityName||J.entityId||"-",It=[];J.entityName&&J.entityId?It.push(`ID: ${J.entityId}`):!J.entityName&&J.entityId&&It.push(`ID: ${J.entityId}`),J.entityType&&It.push(J.entityType);const or=J.contextLabel||J.contextType||(J.contextId?`#${J.contextId}`:"-"),kt=[];J.contextType&&kt.push(J.contextType),J.contextId&&kt.push(`#${J.contextId}`);const Rn=fV(J.metadata),Ir=[];if(J.actorName||J.actorId){const gr=J.actorName?J.actorName:`#${J.actorId}`,Mn=J.actorName&&J.actorId?` (#${J.actorId})`:"";Ir.push(`Akteur: ${gr}${Mn}`)}return J.source&&Ir.push(`Quelle: ${J.source}`),Rn&&Ir.push(Rn),Ir.length||Ir.push("-"),y.jsxs("tr",{className:`text-sm text-stormGrey-700 ${Mt}`,children:[y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsx(H.Typography,{variant:"small",className:"block text-xs font-medium text-stormGrey-600",children:lV(J.timestamp)})}),y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsxs("div",{className:"flex flex-col gap-2",children:[y.jsx("span",{className:"font-medium",children:yt}),y.jsxs("div",{className:"flex flex-wrap gap-2 text-xs text-stormGrey-400",children:[J.eventType&&y.jsx("span",{className:"rounded-full bg-citrusPunch-600/80 px-2 py-0.5 text-white",children:J.eventType}),J.action&&y.jsx("span",{className:"rounded-full bg-emeraldMist-500/80 px-2 py-0.5 text-white",children:J.action})]})]})}),y.jsxs("td",{className:"px-6 py-4 align-top",children:[y.jsx(H.Typography,{variant:"small",className:`font-semibold ${Be}`,children:J.status||"-"}),J.severity&&y.jsx(H.Typography,{variant:"small",className:"text-xs text-stormGrey-400",children:J.severity})]}),y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsx("span",{className:"font-medium break-words",children:Et}),It.length>0&&y.jsx("div",{className:"flex flex-col text-xs text-stormGrey-400",children:It.map(gr=>y.jsx("span",{className:"break-words",children:gr},gr))})]})}),y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsx("span",{className:"font-medium break-words",children:or}),kt.length>0&&y.jsx("div",{className:"flex flex-col text-xs text-stormGrey-400",children:kt.map(gr=>y.jsx("span",{className:"break-words",children:gr},gr))})]})}),y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsx(H.Typography,{variant:"small",className:"break-words",children:J.message||"-"})}),y.jsx("td",{className:"px-6 py-4 align-top",children:y.jsx("div",{className:"flex flex-col gap-1 text-xs text-stormGrey-500",children:Ir.map((gr,Mn)=>y.jsx("span",{className:"break-words",children:gr},Mn))})}),y.jsx("td",{className:"px-6 py-4 align-top",children:Xe&&y.jsx(H.Typography,{variant:"small",children:y.jsx("button",{onClick:()=>wr(J.id),disabled:Je||i,className:"rounded-md border border-sunsetCoral-600 px-3 py-1 text-xs text-sunsetCoral-800 transition hover:bg-sunsetCoral-600/20 disabled:opacity-60",children:"Löschen"})})})]},J.id)})})]})}),y.jsxs("div",{className:"mt-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Typography,{variant:"small",color:"gray",children:""}),y.jsx(Jf,{disabled:r&&e.length===0})]})]})]})]})}const hV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},gV=e=>Array.isArray(e)?e.map(t=>{if(t&&typeof t=="object"){const r=Number(t.id),n=typeof t.name=="string"?t.name:"";return n?{id:Number.isFinite(r)?r:null,name:n}:null}if(typeof t=="string"){const r=t.trim();return r?{id:null,name:r}:null}return null}).filter(Boolean):[];function mV(){const[e,t]=P.useState([]),[r,n]=P.useState(!1),[o,a]=P.useState(""),[i,c]=P.useState(""),[f,g]=P.useState([]),[b,S]=P.useState(!1),[O,T]=P.useState(""),[C,x]=P.useState(""),[m,d]=P.useState(""),[s,u]=P.useState(""),[l,h]=P.useState(""),[v,w]=P.useState(""),[j,N]=P.useState(!1),[k,A]=P.useState(null),[M,D]=P.useState(null),{showToast:L}=zs(),{maintenance:B,update:U}=Aa(),Y=!!(B!=null&&B.active),q=B==null?void 0:B.message,z=!!(U!=null&&U.running),$=U!=null&&U.stage?hV[U.stage]??U.stage:"–",K=Y||z,X=So(),te=P.useCallback(()=>{},[]),{hasPermission:me}=Ur(),de=me("users-edit","full"),ee=me("users-delete","full"),{page:Se,perPage:pe,perPageOptions:fe,perPageIsAll:be,handlePerPageChange:ye,setPage:Pe,setTotals:Me,resetPagination:ke}=Nu();P.useEffect(()=>()=>ke(),[ke]);const ce=P.useCallback(async()=>{var oe,ve,se;n(!0),a("");try{const ie=await lt.get("/api/users"),Oe=(Array.isArray((oe=ie.data)==null?void 0:oe.items)?ie.data.items:[]).map(Ce=>({id:Ce.id,username:Ce.username||"",email:Ce.email||"",isActive:!!Ce.isActive,avatarColor:typeof Ce.avatarColor=="string"?Ce.avatarColor.trim():null,lastLogin:Ce.lastLogin||null,createdAt:Ce.createdAt||null,updatedAt:Ce.updatedAt||null,groups:gV(Ce.groups)})).sort((Ce,Ue)=>Ce.username.localeCompare(Ue.username,"de-DE"));t(Oe)}catch(ie){const he=((se=(ve=ie.response)==null?void 0:ve.data)==null?void 0:se.error)||ie.message||"Unbekannter Fehler";a(he),L({variant:"error",title:"Benutzer konnten nicht geladen werden",description:he})}finally{n(!1)}},[L]),je=P.useCallback(async()=>{var oe,ve,se;S(!0),T("");try{const ie=await lt.get("/api/groups"),Oe=(Array.isArray((oe=ie.data)==null?void 0:oe.items)?ie.data.items:[]).map(Ce=>({id:Number(Ce.id),name:Ce.name||""})).filter(Ce=>Number.isFinite(Ce.id)&&Ce.id>0&&Ce.name).filter(Ce=>Ce.name.toLowerCase()!=="superuser").sort((Ce,Ue)=>Ce.name.localeCompare(Ue.name,"de-DE"));g(Oe)}catch(ie){const he=((se=(ve=ie.response)==null?void 0:ve.data)==null?void 0:se.error)||ie.message||"Benutzergruppen konnten nicht geladen werden.";T(he),L({variant:"error",title:"Benutzergruppen",description:he})}finally{S(!1)}},[L]);P.useEffect(()=>{ce()},[ce]),P.useEffect(()=>{je()},[je]),P.useCallback(()=>{ce(),je()},[ce,je]);const He=P.useCallback(oe=>{c(oe.target.value)},[]);P.useCallback(()=>{c("")},[]),P.useEffect(()=>{Se!==1&&Pe(1)},[i,Se,Pe]);const qe=P.useMemo(()=>{const oe=i.trim().toLowerCase();return oe?e.filter(ve=>[ve.username,ve.email,...ve.groups.map(ie=>ie.name)].map(ie=>String(ie||"").toLowerCase()).some(ie=>ie.includes(oe))):e},[e,i]),Je=P.useMemo(()=>{if(be)return null;const oe=Number(pe);return Number.isFinite(oe)&&oe>0?oe:null},[pe,be]),Qe=P.useMemo(()=>{if(be||!Je)return qe;const oe=(Se-1)*Je;return qe.slice(oe,oe+Je)},[qe,Se,be,Je]),Ge=qe.length,Xe=Qe.length;P.useEffect(()=>{if(be){Me(Ge,Ge),Se!==1&&Pe(1);return}const oe=Number(pe);if(!Number.isFinite(oe)||oe<=0){Me(Ge,Ge);return}const ve=Math.max(1,Math.ceil(Ge/oe));if(Se>ve){Pe(ve);return}Me(Ge,Xe)},[Ge,Xe,Se,pe,be,Pe,Me]);const ht=P.useCallback(oe=>{if(!oe)return"–";const ve=typeof oe=="string"?oe.replace(" ","T"):oe,se=new Date(ve);return Number.isNaN(se.getTime())?oe:new Intl.DateTimeFormat("de-DE",{dateStyle:"short",timeStyle:"short"}).format(se)},[]),Ve=P.useCallback(()=>{x(""),d(""),u(""),h(""),w("")},[]),ot=P.useCallback(async oe=>{var he,Oe;if(K||!(oe!=null&&oe.id)||!ee)return;if(Array.isArray(oe==null?void 0:oe.groups)?oe.groups.some(Ce=>((Ce==null?void 0:Ce.name)||"").toLowerCase()==="superuser"):!1){L({variant:"error",title:"Löschen nicht möglich",description:"Der Superuser kann nicht gelöscht werden."});return}if(!window.confirm(`Benutzer "${oe.username}" wirklich löschen?`))return;const ie=Number(oe.id);if(!Number.isFinite(ie)||ie<=0){L({variant:"error",title:"Löschen fehlgeschlagen",description:"Ungültige Benutzer-ID."});return}A(ie);try{await lt.delete(`/api/users/${ie}`),L({variant:"success",title:"Benutzer gelöscht",description:`Der Benutzer "${oe.username}" wurde entfernt.`}),ce()}catch(Ce){const Ue=(Oe=(he=Ce.response)==null?void 0:he.data)==null?void 0:Oe.error;let Fe="Der Benutzer konnte nicht gelöscht werden.";Ue==="INVALID_USER_ID"?Fe="Die Benutzer-ID ist ungültig.":Ue==="USER_NOT_FOUND"?Fe="Der Benutzer wurde bereits entfernt.":Ue==="USER_SUPERUSER_PROTECTED"&&(Fe="Der Superuser kann nicht gelöscht werden."),L({variant:"error",title:"Löschen fehlgeschlagen",description:Fe})}finally{A(null)}},[K,ee,L,ce]),_t=P.useCallback(async oe=>{var he,Oe;if(!(oe!=null&&oe.id)||!de)return;if(K){L({variant:"error",title:"Aktion nicht möglich",description:"Im Wartungsmodus oder während eines Updates sind Statusänderungen gesperrt."});return}if((Array.isArray(oe==null?void 0:oe.groups)?oe.groups.some(Ce=>((Ce==null?void 0:Ce.name)||"").toLowerCase()==="superuser"):!1)&&oe.isActive){L({variant:"error",title:"Änderung nicht möglich",description:"Der Superuser kann nicht deaktiviert werden."});return}const se=Number(oe.id);if(!Number.isFinite(se)||se<=0){L({variant:"error",title:"Statusänderung fehlgeschlagen",description:"Ungültige Benutzer-ID."});return}const ie=!oe.isActive;D(se);try{await lt.put(`/api/users/${se}/active`,{isActive:ie}),ce(),L({variant:"success",title:"Status aktualisiert",description:`Der Benutzer wurde ${ie?"aktiviert":"deaktiviert"}.`})}catch(Ce){const Ue=(Oe=(he=Ce.response)==null?void 0:he.data)==null?void 0:Oe.error;let Fe="Der Benutzerstatus konnte nicht geändert werden.";Ue==="INVALID_USER_ID"?Fe="Die Benutzer-ID ist ungültig.":Ue==="USER_NOT_FOUND"?Fe="Der Benutzer wurde nicht gefunden.":Ue==="USER_SUPERUSER_PROTECTED"&&(Fe="Der Superuser kann nicht deaktiviert werden."),L({variant:"error",title:"Statusänderung fehlgeschlagen",description:Fe})}finally{D(null)}},[K,de,L,ce]),Ne=P.useCallback(async()=>{var se,ie,he,Oe;if(K){w("Im Wartungsmodus oder während eines Updates können keine Benutzer angelegt werden.");return}if(!de){w("Du verfügst nicht über die Berechtigung zum Anlegen von Benutzern.");return}const oe=C.trim();if(!oe){w("Benutzername ist erforderlich.");return}const ve=typeof s=="string"?s.trim():"";if(ve.length<8){w("Passwort muss mindestens 8 Zeichen enthalten.");return}if(!l){w("Bitte eine globale Rolle auswählen.");return}N(!0),w("");try{const Ce={username:oe,password:ve,groupId:Number(l)},Ue=m.trim();Ue&&(Ce.email=Ue);const Fe=await lt.post("/api/users",Ce);Ve(),ce(),L({variant:"success",title:"Benutzer angelegt",description:`Der Benutzer "${((ie=(se=Fe.data)==null?void 0:se.item)==null?void 0:ie.username)??oe}" wurde erstellt.`})}catch(Ce){const Ue=(Oe=(he=Ce.response)==null?void 0:he.data)==null?void 0:Oe.error;let Fe="Benutzer konnte nicht angelegt werden.";switch(Ue){case"USERNAME_REQUIRED":Fe="Benutzername ist erforderlich.";break;case"INVALID_EMAIL":Fe="Bitte eine gültige E-Mail-Adresse angeben.";break;case"INVALID_PASSWORD":case"PASSWORD_TOO_SHORT":Fe="Passwort muss mindestens 8 Zeichen enthalten.";break;case"INVALID_GROUP_ID":case"GROUP_NOT_FOUND":Fe="Bitte eine gültige globale Rolle auswählen.";break;case"USERNAME_TAKEN":Fe="Benutzername wird bereits verwendet.";break;case"EMAIL_TAKEN":Fe="E-Mail-Adresse wird bereits verwendet.";break}w(Fe),L({variant:"error",title:"Erstellen fehlgeschlagen",description:Fe})}finally{N(!1)}},[K,de,C,m,s,l,L,Ve,ce]),at=f.length>0,Te=K||j||b||!at,ae=K||j||b||!at,ge=P.useCallback(oe=>{if(oe&&oe.props&&oe.props.children)return oe.props.children;if(!l)return"Bitte auswählen";const ve=f.find(se=>String(se.id)===l);return ve?ve.name:"Bitte auswählen"},[f,l]);return y.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(Y||z)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",q?` – ${q}`:z?" – Portainer-Update läuft":"","."]}),z&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",$]})]})}),y.jsxs(H.Card,{children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",children:y.jsx("span",{children:"Benutzerverwaltung"})})}),y.jsxs(H.CardBody,{className:"pt-0",children:[de&&y.jsxs("div",{className:"mb-8 rounded-lg border border-blue-gray-100 bg-white p-4 shadow-sm",children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-2",children:"Neuen Benutzer anlegen"}),at?y.jsxs(y.Fragment,{children:[y.jsx(H.Typography,{variant:"small",className:"text-sm text-stormGrey-500 mb-4",children:"Benutzername, Passwort (mindestens 8 Zeichen) und eine globale Rolle sind Pflichtfelder."}),v&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:v}),O&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:O}),y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsx(H.Input,{label:"Benutzername",value:C,onChange:oe=>x(oe.target.value),disabled:K||j,crossOrigin:""}),y.jsx(H.Input,{label:"E-Mail (optional)",value:m,onChange:oe=>d(oe.target.value),disabled:K||j,crossOrigin:""}),y.jsx(H.Input,{type:"password",label:"Passwort",value:s,onChange:oe=>u(oe.target.value),disabled:K||j,crossOrigin:""}),y.jsxs(H.Select,{label:"Globale Rolle",variant:"outlined",value:l,onChange:h,disabled:ae,selected:ge,children:[y.jsx(H.Option,{value:"",children:"Bitte auswählen"}),f.map(oe=>y.jsx(H.Option,{value:String(oe.id),children:oe.name},oe.id))]})]}),y.jsx("div",{className:"mt-4 text-sm text-stormGrey-500",children:b?"Benutzergruppen werden geladen ...":""}),y.jsxs("div",{className:"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center",children:[y.jsx(H.Button,{color:"green",onClick:Ne,disabled:Te,children:j?"Speichert ...":"Benutzer anlegen"}),y.jsx(H.Button,{variant:"text",color:"blue-gray",onClick:Ve,disabled:j||K,children:"Formular zurücksetzen"})]})]}):y.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800",children:"Es existiert keine verfügbare Benutzergruppe. Bitte lege zuerst eine Gruppe an."})]}),y.jsx("div",{className:"mb-8",children:y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between mt-8",children:[y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{label:"Suchen nach Name, E-Mail oder Gruppe",value:i,onChange:He,disabled:r&&!e.length,crossOrigin:""})}),y.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:y.jsx(H.Select,{variant:"static",label:"Einträge pro Seite",onChange:te,value:pe,children:fe.map(({value:oe,label:ve})=>y.jsx(H.Option,{value:oe,children:ve},oe))})})]})}),o&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:o}),y.jsx("div",{className:"overflow-x-auto rounded-lg border border-blue-gray-50",children:y.jsxs("table",{className:"w-full min-w-[720px] table-auto text-left",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"bg-blue-gray-50/50 text-xs uppercase tracking-wide text-stormGrey-400",children:[y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Benutzername"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"E-Mail"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Gruppen"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Status"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Letzte Anmeldung"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Erstellt am"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Aktionen"})]})}),y.jsx("tbody",{children:r&&e.length===0?y.jsx("tr",{children:y.jsx("td",{colSpan:7,className:"px-6 py-8 text-center text-blue-gray-400",children:"Benutzerdaten werden geladen ..."})}):Qe.length===0?y.jsx("tr",{children:y.jsx("td",{colSpan:7,className:"px-6 py-8 text-center text-blue-gray-400",children:"Keine Benutzer gefunden."})}):Qe.map((oe,ve)=>{const se=ve===Qe.length-1?"":"border-b border-blue-gray-50",ie=Array.isArray(oe==null?void 0:oe.groups)?oe.groups.some(he=>((he==null?void 0:he.name)||"").toLowerCase()==="superuser"):!1;return y.jsxs("tr",{className:`text-sm text-stormGrey-700 ${se}`,children:[y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"font-medium text-stormGrey-900",children:oe.username||"–"})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",children:oe.email||"–"})}),y.jsx("td",{className:"px-6 py-4",children:oe.groups.length>0?y.jsx("div",{className:"flex flex-wrap gap-2",children:oe.groups.map(he=>y.jsx(H.Chip,{value:he.name,size:"sm",color:"blue-gray",variant:"ghost"},he.id??he.name))}):y.jsx("span",{className:"text-stormGrey-400",children:"–"})}),y.jsx("td",{className:"px-6 py-4",children:de?y.jsx("button",{type:"button",className:`inline-flex items-center rounded-full px-1 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 ${K?"cursor-not-allowed":"cursor-pointer"}`,onClick:()=>_t(oe),disabled:K||M===oe.id||Array.isArray(oe.groups)&&oe.groups.some(he=>((he==null?void 0:he.name)||"").toLowerCase()==="superuser"&&oe.isActive),children:y.jsx(H.Chip,{value:M===oe.id?"Wechselt ...":oe.isActive?"Aktiv":"Deaktiviert",size:"sm",color:oe.isActive?"green":"red",variant:"ghost",className:"pointer-events-none"})}):y.jsx(H.Chip,{value:oe.isActive?"Aktiv":"Deaktiviert",size:"sm",color:oe.isActive?"green":"red",variant:"ghost"})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"antialiased font-sans mb-1 block text-xs font-medium text-stormGrey-600",children:ht(oe.lastLogin)})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"antialiased font-sans mb-1 block text-xs font-medium text-stormGrey-600",children:ht(oe.createdAt)})}),y.jsx("td",{className:"px-6 py-4",children:y.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-2",children:[y.jsx(H.Button,{size:"sm",variant:"outlined",color:"blue-gray",onClick:()=>X(`/dashboard/users/${oe.id}`),children:"Details"}),ee&&!ie&&y.jsx(H.Button,{size:"sm",variant:"text",color:"red",onClick:()=>ot(oe),disabled:K||k===oe.id,children:k===oe.id?"Löscht ...":"Löschen"})]})})]},oe.id)})})]})}),y.jsxs("div",{className:"mt-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Typography,{variant:"small",color:"gray",children:""}),y.jsx(Jf,{disabled:r&&e.length===0})]})]})]})]})}const bV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"};function vV(){const[e,t]=P.useState([]),[r,n]=P.useState(!1),[o,a]=P.useState(""),[i,c]=P.useState(""),[f,g]=P.useState(""),[b,S]=P.useState(""),[O,T]=P.useState(""),[C,x]=P.useState(!1),[m,d]=P.useState(null),{showToast:s}=zs(),{maintenance:u,update:l}=Aa(),h=!!(u!=null&&u.active),v=u==null?void 0:u.message,w=!!(l!=null&&l.running),j=l!=null&&l.stage?bV[l.stage]??l.stage:"–",N=h||w,k=So(),{hasPermission:A}=Ur(),M=A("user-groups-edit","full"),D=A("user-groups-delete","full"),{page:L,perPage:B,perPageOptions:U,perPageIsAll:Y,handlePerPageChange:q,setPage:z,setTotals:$,resetPagination:K}=Nu();P.useEffect(()=>()=>K(),[K]);const X=P.useCallback(()=>{},[]),te=P.useCallback(async()=>{var ce,je,He;n(!0),a("");try{const qe=await lt.get("/api/groups"),Qe=(Array.isArray((ce=qe.data)==null?void 0:ce.items)?qe.data.items:[]).map(Ge=>({id:Ge.id,name:Ge.name||"",description:Ge.description||"",avatarColor:Ge.avatarColor||null,memberCount:Number(Ge.memberCount)||0,members:Array.isArray(Ge.members)?Ge.members.map(Xe=>({id:Xe.id,username:Xe.username||""})).filter(Xe=>Xe.username):[],createdAt:Ge.createdAt||null,updatedAt:Ge.updatedAt||null})).sort((Ge,Xe)=>Ge.name.localeCompare(Xe.name,"de-DE"));t(Qe)}catch(qe){const Je=((He=(je=qe.response)==null?void 0:je.data)==null?void 0:He.error)||qe.message||"Unbekannter Fehler";a(Je),s({variant:"error",title:"Benutzergruppen konnten nicht geladen werden",description:Je})}finally{n(!1)}},[s]);P.useEffect(()=>{te()},[te]),P.useCallback(()=>{te()},[te]);const me=P.useCallback(ce=>{c(ce.target.value)},[]);P.useCallback(()=>{c("")},[]),P.useEffect(()=>{L!==1&&z(1)},[i,L,z]);const de=P.useMemo(()=>{const ce=i.trim().toLowerCase();return ce?e.filter(je=>[je.name,je.description,...je.members.map(qe=>qe.username)].map(qe=>String(qe||"").toLowerCase()).some(qe=>qe.includes(ce))):e},[e,i]),ee=P.useMemo(()=>{if(Y)return null;const ce=Number(B);return Number.isFinite(ce)&&ce>0?ce:null},[B,Y]),Se=P.useMemo(()=>{if(Y||!ee)return de;const ce=(L-1)*ee;return de.slice(ce,ce+ee)},[de,L,Y,ee]),pe=de.length,fe=Se.length;P.useEffect(()=>{if(Y){$(pe,pe),L!==1&&z(1);return}const ce=Number(B);if(!Number.isFinite(ce)||ce<=0){$(pe,pe);return}const je=Math.max(1,Math.ceil(pe/ce));if(L>je){z(je);return}$(pe,fe)},[pe,fe,L,B,Y,z,$]);const be=P.useCallback(ce=>{if(!ce)return"–";const je=typeof ce=="string"?ce.replace(" ","T"):ce,He=new Date(je);return Number.isNaN(He.getTime())?ce:new Intl.DateTimeFormat("de-DE",{dateStyle:"short",timeStyle:"short"}).format(He)},[]),ye=P.useCallback(()=>{g(""),S(""),T("")},[]),Pe=P.useCallback(async()=>{var je,He,qe,Je;if(N){T("Im Wartungsmodus oder während eines Updates können keine Gruppen angelegt werden.");return}if(!M){T("Du verfügst nicht über die Berechtigung zum Anlegen von Gruppen.");return}const ce=f.trim();if(!ce){T("Gruppenname ist erforderlich.");return}x(!0),T("");try{const Qe={name:ce},Ge=b.trim();Ge&&(Qe.description=Ge);const Xe=await lt.post("/api/groups",Qe);s({variant:"success",title:"Gruppe angelegt",description:`Die Benutzergruppe "${((He=(je=Xe.data)==null?void 0:je.item)==null?void 0:He.name)??ce}" wurde erstellt.`}),ye(),te()}catch(Qe){const Ge=(Je=(qe=Qe.response)==null?void 0:qe.data)==null?void 0:Je.error;let Xe="Benutzergruppe konnte nicht angelegt werden.";Ge==="GROUP_NAME_REQUIRED"?Xe="Gruppenname ist erforderlich.":Ge==="GROUP_NAME_TAKEN"&&(Xe="Der Gruppenname wird bereits verwendet."),T(Xe),s({variant:"error",title:"Erstellen fehlgeschlagen",description:Xe})}finally{x(!1)}},[N,M,f,b,s,ye,te]),Me=N||C,ke=P.useCallback(async ce=>{var Qe,Ge;if(N||!(ce!=null&&ce.id)||!D)return;if(((ce==null?void 0:ce.name)||"").toLowerCase()==="superuser"){s({variant:"error",title:"Löschen nicht möglich",description:"Die Superuser-Gruppe kann nicht gelöscht werden."});return}if((Number(ce.memberCount)||0)>0){s({variant:"error",title:"Löschen nicht möglich",description:"Die Gruppe enthält noch Benutzer. Bitte entfernen Sie diese zuerst."});return}if(!window.confirm(`Benutzergruppe "${ce.name}" wirklich löschen?`))return;const Je=Number(ce.id);if(!Number.isFinite(Je)||Je<=0){s({variant:"error",title:"Löschen fehlgeschlagen",description:"Ungültige Gruppen-ID."});return}d(Je);try{await lt.delete(`/api/groups/${Je}`),s({variant:"success",title:"Gruppe gelöscht",description:`Die Benutzergruppe "${ce.name}" wurde entfernt.`}),te()}catch(Xe){const ht=(Ge=(Qe=Xe.response)==null?void 0:Qe.data)==null?void 0:Ge.error;let Ve="Die Benutzergruppe konnte nicht gelöscht werden.";ht==="INVALID_GROUP_ID"?Ve="Die Gruppen-ID ist ungültig.":ht==="GROUP_NOT_FOUND"?Ve="Die Benutzergruppe wurde bereits entfernt.":ht==="GROUP_HAS_MEMBERS"?Ve="Die Gruppe enthält noch Benutzer. Bitte entfernen Sie diese zuerst.":ht==="GROUP_SUPERUSER_PROTECTED"&&(Ve="Die Superuser-Gruppe kann nicht gelöscht werden."),s({variant:"error",title:"Löschen fehlgeschlagen",description:Ve})}finally{d(null)}},[N,D,s,te]);return y.jsxs("div",{className:"mt-12 mb-8 flex flex-col gap-12",children:[(h||w)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",v?` – ${v}`:w?" – Portainer-Update läuft":"","."]}),w&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",j]})]})}),y.jsxs(H.Card,{className:"border border-blue-gray-100 shadow-sm",children:[y.jsx(H.CardHeader,{variant:"gradient",color:"gray",className:"mb-5 p-4",children:y.jsx(H.Typography,{variant:"h6",color:"white",children:y.jsx("span",{children:"Benutzergruppen"})})}),y.jsxs(H.CardBody,{className:"pt-0",children:[M&&y.jsxs("div",{className:"mb-8 rounded-lg border border-blue-gray-100 bg-white p-4 shadow-sm",children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-2",children:"Neue Benutzergruppe anlegen"}),y.jsx(H.Typography,{variant:"small",className:"text-sm text-stormGrey-500 mb-4",children:"Der Gruppenname ist Pflicht, die Beschreibung optional."}),O&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:O}),y.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[y.jsx(H.Input,{label:"Gruppenname",value:f,onChange:ce=>g(ce.target.value),disabled:Me,crossOrigin:""}),y.jsx(H.Input,{label:"Beschreibung (optional)",value:b,onChange:ce=>S(ce.target.value),disabled:Me,crossOrigin:""})]}),y.jsxs("div",{className:"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center",children:[y.jsx(H.Button,{color:"green",onClick:Pe,disabled:Me,children:C?"Speichert ...":"Gruppe anlegen"}),y.jsx(H.Button,{variant:"text",color:"blue-gray",onClick:ye,disabled:C||N,children:"Formular zurücksetzen"})]})]}),y.jsx("div",{className:"mb-8",children:y.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[y.jsx("div",{className:"md:flex-1",children:y.jsx(H.Input,{label:"Suchen nach Name, E-Mail oder Gruppe",value:i,onChange:me,disabled:r&&!e.length,crossOrigin:""})}),y.jsx("div",{className:"md:mt-0 mt-8 md:flex-1",children:y.jsx(H.Select,{variant:"static",label:"Einträge pro Seite",onChange:X,value:B,children:U.map(({value:ce,label:je})=>y.jsx(H.Option,{value:ce,children:je},ce))})})]})}),o&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:o}),o&&y.jsx("div",{className:"mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:o}),y.jsx("div",{className:"overflow-x-auto rounded-lg border border-blue-gray-50",children:y.jsxs("table",{className:"w-full min-w-[720px] table-auto text-left",children:[y.jsx("thead",{children:y.jsxs("tr",{className:"bg-blue-gray-50/50 text-xs uppercase tracking-wide text-stormGrey-400",children:[y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Gruppenname"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Beschreibung"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Mitglieder"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Erstellt am"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Zuletzt aktualisiert"}),y.jsx("th",{className:"px-6 py-4 font-semibold",children:"Aktionen"})]})}),y.jsx("tbody",{children:r&&e.length===0?y.jsx("tr",{children:y.jsx("td",{colSpan:6,className:"px-6 py-8 text-center text-stormGrey-400",children:"Gruppen werden geladen ..."})}):Se.length===0?y.jsx("tr",{children:y.jsx("td",{colSpan:6,className:"px-6 py-8 text-center text-stormGrey-400",children:"Keine Gruppen gefunden."})}):Se.map((ce,je)=>{const He=je===Se.length-1?"":"border-b border-blue-gray-50",qe=((ce==null?void 0:ce.name)||"").toLowerCase()==="superuser";return y.jsxs("tr",{className:`text-sm text-stormGrey-700 ${He}`,children:[y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"font-medium text-stormGrey-900",children:ce.name||"–"})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",children:ce.description?ce.description:y.jsx("span",{className:"text-stormGrey-400",children:"–"})})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"antialiased font-sans mb-1 block text-xs font-medium text-stormGrey-600",children:ce.memberCount.toLocaleString("de-DE")})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"antialiased font-sans mb-1 block text-xs font-medium text-stormGrey-600",children:be(ce.createdAt)})}),y.jsx("td",{className:"px-6 py-4",children:y.jsx(H.Typography,{variant:"small",className:"antialiased font-sans mb-1 block text-xs font-medium text-stormGrey-600",children:be(ce.updatedAt)})}),y.jsx("td",{className:"px-6 py-4",children:y.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-2",children:[y.jsx(H.Button,{size:"sm",variant:"outlined",color:"blue-gray",onClick:()=>k(`/dashboard/usergroups/${ce.id}`),children:"Details"}),D&&!qe&&y.jsx(H.Button,{size:"sm",variant:"text",color:"red",onClick:()=>ke(ce),disabled:N||m===ce.id||Number(ce.memberCount)>0,children:m===ce.id?"Löscht ...":"Löschen"})]})})]},ce.id)})})]})}),y.jsxs("div",{className:"mt-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Typography,{variant:"small",color:"gray",children:!r&&e.length===0?"Noch keine Gruppen angelegt.":`${pe.toLocaleString("de-DE")} Gruppen gefunden`}),y.jsx(Jf,{disabled:r&&e.length===0})]})]})]})]})}const ws={chart:{toolbar:{show:!1}},title:{show:""},dataLabels:{enabled:!1},xaxis:{axisTicks:{show:!1},axisBorder:{show:!1},labels:{style:{colors:"#37474f",fontSize:"13px",fontFamily:"inherit",fontWeight:300}}},yaxis:{labels:{style:{colors:"#37474f",fontSize:"13px",fontFamily:"inherit",fontWeight:300}}},grid:{show:!0,borderColor:"#dddddd",strokeDashArray:5,xaxis:{lines:{show:!0}},padding:{top:5,right:20}},fill:{opacity:.8},tooltip:{theme:"dark"}};({...ws,xaxis:{...ws.xaxis}});({...ws,xaxis:{...ws.xaxis}});({...ws,xaxis:{...ws.xaxis}});const yV=[{title:"account",options:[{checked:!0,label:"Email me when someone follows me"},{checked:!1,label:"Email me when someone answers on my post"},{checked:!0,label:"Email me when someone mentions me"}]},{title:"application",options:[{checked:!1,label:"New launches and projects"},{checked:!0,label:"Monthly product updates"},{checked:!1,label:"Subscribe to newsletter"}]}],iN=["bg-arcticBlue-600","bg-copperRust-500","bg-sunsetCoral-600","bg-mintTea-400","bg-lavenderSmoke-500","bg-emeraldMist-500","bg-roseQuartz-500","bg-auroraTeal-500","bg-citrusPunch-500","bg-mossGreen-400"],xV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},wV=e=>Array.isArray(e)?e.map(t=>{if(t&&typeof t=="object"){const r=Number(t.id),n=typeof t.name=="string"?t.name:"";return n?{id:Number.isFinite(r)?r:null,name:n}:null}if(typeof t=="string"){const r=t.trim();return r?{id:null,name:r}:null}return null}).filter(Boolean):[],Zw=e=>({id:(e==null?void 0:e.id)??null,username:(e==null?void 0:e.username)||"",email:(e==null?void 0:e.email)||"",isActive:!!(e!=null&&e.isActive),avatarColor:(e==null?void 0:e.avatarColor)||null,lastLogin:(e==null?void 0:e.lastLogin)||null,createdAt:(e==null?void 0:e.createdAt)||null,updatedAt:(e==null?void 0:e.updatedAt)||null,groups:wV(e==null?void 0:e.groups),securityPhraseDownloadedAt:(e==null?void 0:e.securityPhraseDownloadedAt)||null}),_V=e=>{if(!e||!Array.isArray(e.groups)||e.groups.length===0)return null;const t=e.groups.map(r=>Number(r.id)).find(r=>Number.isFinite(r)&&r>0);return Number.isFinite(t)?t:null},ta=e=>{if(!e)return{username:"",email:"",password:"",groupId:null,avatarColor:""};const t=_V(e);return{username:e.username||"",email:e.email||"",password:"",groupId:Number.isFinite(t)?t:null,avatarColor:e.avatarColor||""}};function SV(){const{userId:e}=H5(),{showToast:t}=zs(),{maintenance:r,update:n}=Aa(),{hasPermission:o,user:a}=Ur(),[i,c]=P.useState(null),[f,g]=P.useState(ta(null)),b=P.useRef(ta(null)),[S,O]=P.useState(!1),[T,C]=P.useState(""),[x,m]=P.useState(!1),[d,s]=P.useState([]),[u,l]=P.useState(!1),[h,v]=P.useState(""),[w,j]=P.useState(!1),[N,k]=P.useState(""),[A,M]=P.useState([]),[D,L]=P.useState(null),[B,U]=P.useState(!1),[Y,q]=P.useState(""),[z,$]=P.useState(!1),K=!!(r!=null&&r.active),X=r==null?void 0:r.message,te=!!(n!=null&&n.running),me=n!=null&&n.stage?xV[n.stage]??n.stage:"–",de=K||te,ee=!!(a!=null&&a.isSuperuser||o("users-edit","full")),Se=!!(a!=null&&a.isSuperuser||o("users-edit","read")),pe=!!(a!=null&&a.isSuperuser||o("users-security-phrase","full")),fe=pe;if(!Se)return null;const be=P.useMemo(()=>Array.isArray(i==null?void 0:i.groups)?i.groups.some(he=>((he==null?void 0:he.name)||"").toLowerCase()==="superuser"):!1,[i]),ye=(a==null?void 0:a.isSuperuser)&&(i==null?void 0:i.id)&&Number(a.id)===Number(i.id),Pe=be&&!ye,Me=P.useMemo(()=>{const he=Number(e);return Number.isFinite(he)?he:null},[e]),ke=P.useCallback(async()=>{var he,Oe,Ce,Ue;if(!Me){C("Ungültige Benutzer-ID."),c(null),g(ta(null)),b.current=ta(null),m(!0);return}O(!0),C("");try{const Fe=await lt.get(`/api/users/${Me}`),Ie=Zw((he=Fe.data)==null?void 0:he.item);if(!Ie.id)throw new Error("USER_NOT_FOUND");c(Ie),M([]),L(Ie.securityPhraseDownloadedAt||null),q("");const Ee=ta(Ie);b.current={...Ee},g(Ee),k("")}catch(Fe){const Ie=(Ce=(Oe=Fe.response)==null?void 0:Oe.data)==null?void 0:Ce.error;let Ee="Benutzerdetails konnten nicht geladen werden.";Ie==="USER_NOT_FOUND"?Ee="Der angeforderte Benutzer wurde nicht gefunden.":Ie==="INVALID_USER_ID"?Ee="Die angegebene Benutzer-ID ist ungültig.":((Ue=Fe.response)==null?void 0:Ue.status)===404&&(Ee="Der angeforderte Benutzer existiert nicht."),c(null),b.current=ta(null),g(ta(null)),C(Ee),t({variant:"error",title:"Fehler beim Laden",description:Ee})}finally{O(!1),m(!0)}},[Me,t]),ce=P.useCallback(async()=>{var he,Oe,Ce;l(!0),v("");try{const Ue=await lt.get("/api/groups"),Ie=(Array.isArray((he=Ue.data)==null?void 0:he.items)?Ue.data.items:[]).map(Ee=>({id:Number(Ee.id),name:Ee.name||"",description:Ee.description||"",memberCount:Number.isFinite(Number(Ee.memberCount))?Number(Ee.memberCount):0})).filter(Ee=>Number.isFinite(Ee.id)&&Ee.id>0&&Ee.name).sort((Ee,dt)=>Ee.name.localeCompare(dt.name,"de-DE"));s(Ie)}catch(Ue){const Fe=((Ce=(Oe=Ue.response)==null?void 0:Oe.data)==null?void 0:Ce.error)||Ue.message||"Benutzergruppen konnten nicht geladen werden.";v(Fe),t({variant:"error",title:"Benutzergruppen",description:Fe})}finally{l(!1)}},[t]);P.useEffect(()=>{ke()},[ke]),P.useEffect(()=>{ce()},[ce]);const je=P.useMemo(()=>{if(!x||!i)return!1;const he=b.current;if(!he)return!1;const Oe=he.username||"",Ce=f.username||"",Ue=he.email||"",Fe=f.email||"",Ie=Number.isFinite(he.groupId)?Number(he.groupId):null,Ee=Number.isFinite(f.groupId)?Number(f.groupId):null,dt=he.avatarColor||"",ft=f.avatarColor||"",Ft=!!(f.password&&f.password.trim().length>0);return Oe!==Ce||Ue!==Fe||!be&&Ie!==Ee||dt!==ft||Ft},[f,x,i,be]),He=P.useCallback(he=>{var Oe;return(Oe=he==null?void 0:he.props)!=null&&Oe.children?he.props.children:f.avatarColor?f.avatarColor:"Standardfarbe"},[f.avatarColor]),qe=P.useCallback(he=>{if(!ee)return;const{value:Oe}=he.target;g(Ce=>({...Ce,username:Oe}))},[ee]),Je=P.useCallback(he=>{if(!ee)return;const{value:Oe}=he.target;g(Ce=>({...Ce,email:Oe}))},[ee]),Qe=P.useCallback(he=>{if(!ee)return;const{value:Oe}=he.target;g(Ce=>({...Ce,password:Oe}))},[ee]),Ge=P.useCallback(he=>{if(!ee)return;if(!he){g(Ce=>({...Ce,groupId:null}));return}const Oe=Number(he);g(Ce=>({...Ce,groupId:Number.isFinite(Oe)&&Oe>0?Oe:null}))},[ee]),Xe=P.useCallback(he=>{ee&&g(Oe=>({...Oe,avatarColor:he||""}))},[ee]),ht=P.useCallback(async()=>{var he,Oe,Ce,Ue;if(!(!ee||!i||!je)){j(!0),k("");try{const Fe={username:f.username,email:f.email,password:f.password,avatarColor:f.avatarColor};be||(Fe.groupId=f.groupId);const Ie=await lt.put(`/api/users/${i.id}`,Fe),Ee=Zw(((he=Ie.data)==null?void 0:he.item)||((Oe=Ie.data)==null?void 0:Oe.user));c(Ee);const dt=ta(Ee);b.current={...dt},g(dt),v(""),t({variant:"success",title:"Benutzer gespeichert",description:"Die Änderungen wurden erfolgreich gespeichert."})}catch(Fe){const Ie=(Ue=(Ce=Fe.response)==null?void 0:Ce.data)==null?void 0:Ue.error;let Ee="Die Benutzerdaten konnten nicht gespeichert werden.";Ie==="USERNAME_REQUIRED"?Ee="Bitte einen Benutzernamen angeben.":Ie==="USERNAME_TAKEN"?Ee="Der Benutzername wird bereits verwendet.":Ie==="INVALID_EMAIL"?Ee="Bitte eine gültige E-Mail-Adresse eingeben.":Ie==="EMAIL_TAKEN"?Ee="Die E-Mail-Adresse wird bereits verwendet.":Ie==="INVALID_PASSWORD"?Ee="Das Passwort ist ungültig.":Ie==="PASSWORD_TOO_SHORT"?Ee="Das Passwort muss mindestens 8 Zeichen enthalten.":Ie==="INVALID_AVATAR_COLOR"?Ee="Bitte eine gültige Avatar-Farbe auswählen.":Ie==="GROUP_NOT_FOUND"&&(Ee="Die ausgewählte Benutzergruppe existiert nicht mehr.",v(Ee)),k(Ee),t({variant:"error",title:"Speichern fehlgeschlagen",description:Ee})}finally{j(!1)}}},[ee,i,je,f,t,be]),Ve=P.useCallback(async()=>{var he,Oe,Ce,Ue,Fe,Ie;if(!(!pe||!Me)){U(!0),q("");try{const Ee=await lt.get(`/api/users/${Me}/security-phrase`),dt=Array.isArray((Oe=(he=Ee.data)==null?void 0:he.item)==null?void 0:Oe.words)?Ee.data.item.words:[];M(dt),L(((Ue=(Ce=Ee.data)==null?void 0:Ce.item)==null?void 0:Ue.downloadedAt)||null)}catch(Ee){const dt=(Ie=(Fe=Ee.response)==null?void 0:Fe.data)==null?void 0:Ie.error;let ft="Sicherheitsschlüssel konnte nicht geladen werden.";dt==="USER_NOT_FOUND"?ft="Der Benutzer wurde nicht gefunden.":dt==="INVALID_USER_ID"?ft="Die Benutzer-ID ist ungültig.":dt==="INSUFFICIENT_PERMISSIONS"&&(ft="Keine Berechtigung zum Anzeigen des Sicherheitsschlüssels."),q(ft),M([]),L(null)}finally{U(!1)}}},[pe,Me]),ot=P.useCallback(()=>{fe&&(B||z||Ve())},[fe,Ve,z,B]),_t=P.useCallback(async()=>{var he,Oe,Ce,Ue,Fe,Ie;if(!(!fe||!Me||de||z)){$(!0),q("");try{const Ee=await lt.post(`/api/users/${Me}/security-phrase/renew`),dt=Array.isArray((Oe=(he=Ee.data)==null?void 0:he.item)==null?void 0:Oe.words)?Ee.data.item.words:[];M(dt),L(((Ue=(Ce=Ee.data)==null?void 0:Ce.item)==null?void 0:Ue.downloadedAt)||null),t({variant:"success",title:"Sicherheitsschlüssel erneuert",description:"Der Benutzer muss den neuen Schlüssel erneut herunterladen."})}catch(Ee){const dt=(Ie=(Fe=Ee.response)==null?void 0:Fe.data)==null?void 0:Ie.error;let ft="Der Sicherheitsschlüssel konnte nicht erneuert werden.";dt==="USER_NOT_FOUND"?ft="Der Benutzer wurde nicht gefunden.":dt==="INVALID_USER_ID"?ft="Die Benutzer-ID ist ungültig.":dt==="INSUFFICIENT_PERMISSIONS"&&(ft="Keine Berechtigung zum Erneuern des Sicherheitsschlüssels."),q(ft)}finally{$(!1)}}},[fe,Me,de,z,t]),Ne=P.useMemo(()=>{const he=(f.username||f.email||"").trim();return he?he.charAt(0).toUpperCase():"?"},[f.username,f.email]),at=P.useMemo(()=>f.avatarColor?f.avatarColor:(i==null?void 0:i.avatarColor)||"",[f.avatarColor,i]),Te=P.useMemo(()=>{if(!Array.isArray(A)||A.length===0)return[];const he=[];for(let Oe=0;Oe{if(!D)return{text:"Noch nicht heruntergeladen",tone:"text-red-500"};const he=new Date(D);return Number.isNaN(he.getTime())?{text:"Zuletzt heruntergeladen: unbekannt",tone:"text-blue-gray-500"}:{text:`Zuletzt heruntergeladen: ${he.toLocaleString("de-DE")}`,tone:"text-blue-gray-500"}},[D]),ge=P.useMemo(()=>Array.isArray(d)?d.filter(he=>((he==null?void 0:he.name)||"").toLowerCase()!=="superuser"):[],[d]);P.useEffect(()=>{if(be)return;const he=f.groupId?Number(f.groupId):null;ge.some(Ce=>Number(Ce.id)===he)||g(Ce=>({...Ce,groupId:null}))},[ge,f.groupId,be]),P.useEffect(()=>{if(x){if(!pe||!Me){M([]),L(null),q(""),U(!1);return}Ve()}},[x,pe,Ve,Me]);const oe=de||w||!i||!ee,ve=de||w||!i||u||!ee||be,se=de||w||!i||!ee||Pe,ie=f.groupId?String(f.groupId):"";return y.jsx(y.Fragment,{children:y.jsxs("div",{className:"mt-12 flex flex-col gap-12",children:[(K||te)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",X?` – ${X}`:te?" – Portainer-Update läuft":"","."]}),te&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",me]})]})}),y.jsx("div",{className:"relative h-72 w-full overflow-hidden rounded-xl bg-[url('/img/background-image.png')] bg-cover\\tbg-center",children:y.jsx("div",{className:"absolute inset-0 h-full w-full bg-gray-900/75"})}),y.jsx(H.Card,{className:"mx-3 -mt-16 mb-6 lg:mx-4 border border-blue-gray-100",children:y.jsxs(H.CardBody,{className:"p-4",children:[y.jsxs("div",{className:"mb-10 flex flex-wrap items-center justify-between gap-6",children:[y.jsxs("div",{className:"flex items-center gap-6",children:[y.jsx("div",{className:`text-black flex h-[74px] w-[74px] items-center justify-center rounded-xl text-3xl font-semibold uppercase shadow-lg shadow-blue-gray-500/40 ${at}`,"aria-label":f.username||"Benutzeravatar",children:Ne}),y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:f.username||"–"}),y.jsx(H.Typography,{className:"text-xs font-semibold tracking-wide text-stormGrey-400",children:f.email||"–"})]})]}),je&&y.jsx(H.Button,{color:"green",className:"normal-case",onClick:ht,disabled:de||w,children:w?"Speichert ...":"Änderungen speichern"})]}),S&&!i&&y.jsxs("div",{className:"mb-6 flex items-center gap-3 rounded-lg border border-blue-gray-50 bg-blue-gray-50/50 px-4 py-3 text-sm text-blue-gray-500",children:[y.jsx(H.Spinner,{className:"h-4 w-4"}),y.jsx("span",{children:"Benutzerdaten werden geladen ..."})]}),T&&!S&&y.jsx("div",{className:"mb-6 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:T}),N&&!S&&y.jsx("div",{className:"mb-6 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:N}),y.jsxs("div",{className:"grid-cols-1 mb-12 grid gap-12 px-4 lg:grid-cols-2 xl:grid-cols-3",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-4",children:"Allgemeine Einstellungen"}),be&&y.jsxs("div",{className:"mb-4 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800",children:["Systemgruppe – Name und Beschreibung sind geschützt.",Pe&&y.jsx("span",{className:"mt-1 block text-xs text-amber-600",children:"Nur der Superuser selbst kann Benutzername, E-Mail-Adresse und Passwort ändern."})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Benutzername"}),y.jsx(H.Input,{value:f.username,onChange:qe,placeholder:"Benutzername",disabled:oe||Pe,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"E-Mail-Adresse"}),y.jsx(H.Input,{type:"email",value:f.email,onChange:Je,placeholder:"benutzer@example.com",disabled:oe||Pe,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Neues Passwort"}),y.jsx(H.Input,{type:"password",value:f.password,onChange:Qe,placeholder:"Passwort setzen",disabled:oe||Pe,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}}),y.jsx(H.Typography,{className:"mt-1 text-xs text-blue-gray-400",children:"Das Passwort wird nur geändert, wenn ein neuer Wert eingetragen wird."})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Globale Rolle"}),be?y.jsx(H.Typography,{className:"block text-xs font-semibold uppercase text-blue-gray-500",children:"Die Rolle für den Superuser kann nicht geändert werden."}):u&&d.length===0?y.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-blue-gray-50 bg-blue-gray-50/50 px-4 py-3 text-sm text-blue-gray-500",children:[y.jsx(H.Spinner,{className:"h-4 w-4"}),y.jsx("span",{children:"Benutzergruppen werden geladen ..."})]}):ge.length===0?y.jsx(H.Typography,{className:"block text-xs font-semibold uppercase text-blue-gray-500",children:"Es sind keine weiteren Benutzergruppen vorhanden. Bitte lege zunächst eine neue Gruppe an."}):y.jsx(H.Select,{label:"Benutzergruppe wählen",value:ie,onChange:Ge,disabled:ve,variant:"outlined",children:ge.map(he=>y.jsx(H.Option,{value:String(he.id),children:he.name},he.id))})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Avatar-Farbe"}),y.jsxs(H.Select,{label:"Avatar-Farbe auswählen",variant:"outlined",value:f.avatarColor,onChange:Xe,disabled:se,selected:He,children:[y.jsx(H.Option,{value:"",children:y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx("span",{className:"h-4 w-4 rounded border border-blue-gray-100"}),y.jsx("span",{className:"text-xs",children:"Keine"})]})}),iN.map(he=>y.jsx(H.Option,{value:he,children:y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx("span",{className:`h-4 w-4 rounded border border-blue-gray-100 ${he}`}),y.jsx("span",{className:"text-xs",children:he})]})},he))]})]})]}),y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-3",children:"Platform Settings"}),y.jsx("div",{className:"flex flex-col gap-12",children:yV.map(({title:he,options:Oe})=>y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-4 block text-xs font-semibold uppercase text-blue-gray-500",children:he}),y.jsx("div",{className:"flex flex-col gap-6",children:Oe.map(({checked:Ce,label:Ue})=>y.jsx(H.Switch,{id:Ue,label:Ue,defaultChecked:Ce,labelProps:{className:"text-sm font-normal text-blue-gray-500"}},Ue))})]},he))})]})]}),pe&&y.jsxs("div",{className:"mt-10 border-t border-blue-gray-50 pt-8",children:[y.jsxs("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-4",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",children:"Sicherheitsschlüssel"}),y.jsx(H.Typography,{className:`text-sm ${ae.tone}`,children:ae.text})]}),y.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[y.jsx(H.Button,{variant:"outlined",color:"blue",className:"normal-case",onClick:ot,disabled:!fe||de||B||z,children:"Aktualisieren"}),y.jsx(H.Button,{color:"red",className:"normal-case",onClick:_t,disabled:!fe||de||B||z,children:z?"Erneuert ...":"Schlüssel erneuern"})]})]}),B?y.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-blue-gray-50 bg-blue-gray-50/50 px-4 py-3 text-sm text-blue-gray-500",children:[y.jsx(H.Spinner,{className:"h-4 w-4"}),y.jsx("span",{children:"Sicherheitsschlüssel wird geladen ..."})]}):Y?y.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700",children:[y.jsx("span",{children:Y}),y.jsx(H.Button,{variant:"text",size:"sm",color:"red",className:"normal-case",onClick:ot,disabled:!fe||de||B||z,children:"Erneut laden"})]}):Te.length>0?y.jsx("div",{className:"rounded-lg border border-blue-gray-100 bg-blue-gray-50/60 p-4",children:y.jsx("div",{className:"space-y-2 text-center font-mono text-base tracking-wide text-blue-gray-900 md:text-lg",children:Te.map((he,Oe)=>y.jsx("div",{className:"flex flex-wrap items-center justify-center gap-4",children:he.map((Ce,Ue)=>y.jsx("span",{className:"uppercase",children:Ce},`security-phrase-${Oe}-${Ue}`))},`security-phrase-row-${Oe}`))})}):y.jsx(H.Typography,{className:"text-sm text-blue-gray-500",children:"Kein Sicherheitsschlüssel verfügbar."}),y.jsx(H.Typography,{className:"mt-3 text-sm text-blue-gray-500",children:"Nach dem Erneuern muss der Benutzer den neuen Sicherheitsschlüssel erneut herunterladen."})]})]})})]})})}const CV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},Jw=e=>({id:(e==null?void 0:e.id)??null,name:(e==null?void 0:e.name)||"",description:(e==null?void 0:e.description)||"",avatarColor:(e==null?void 0:e.avatarColor)||null,createdAt:(e==null?void 0:e.createdAt)||null,updatedAt:(e==null?void 0:e.updatedAt)||null,memberCount:Number.isFinite(Number(e==null?void 0:e.memberCount))?Number(e.memberCount):0,members:Array.isArray(e==null?void 0:e.members)?e.members.map(t=>({id:(t==null?void 0:t.id)??null,username:(t==null?void 0:t.username)||""})).filter(t=>t.username):[]}),ra=e=>e?{name:e.name||"",description:e.description||"",avatarColor:e.avatarColor||""}:{name:"",description:"",avatarColor:""},Ih=[{value:"full",label:"Vollzugriff"},{value:"read",label:"Nur lesen"},{value:"none",label:"Kein Zugriff"}],e_={none:0,read:1,full:2},Dh=(e,t)=>e==="maintenance-server-delete"&&t!=="full"?"none":t;function TV(){const{groupId:e}=H5(),{showToast:t}=zs(),{maintenance:r,update:n}=Aa(),{hasPermission:o,user:a}=Ur(),[i,c]=P.useState(null),[f,g]=P.useState(ra(null)),b=P.useRef(ra(null)),[S,O]=P.useState({}),[T,C]=P.useState(!1),[x,m]=P.useState(""),[d,s]=P.useState(!1),[u,l]=P.useState(!1),[h,v]=P.useState(""),[w,j]=P.useState([]),[N,k]=P.useState({}),[A,M]=P.useState({}),[D,L]=P.useState(!1),[B,U]=P.useState(""),Y=!!(r!=null&&r.active),q=r==null?void 0:r.message,z=!!(n!=null&&n.running),$=n!=null&&n.stage?CV[n.stage]??n.stage:"–",K=Y||z,X=P.useMemo(()=>((i==null?void 0:i.name)||"").toLowerCase()==="superuser",[i]),te=!!(a!=null&&a.isSuperuser),me=!!(te||o("user-groups-edit","full")),de=!!(te||o("user-groups-edit","read")),ee=!!(te||o("user-groups-edit","full")),Se=X&&!te,pe=P.useMemo(()=>{const Te=Number(e);return Number.isFinite(Te)?Te:null},[e]),fe=P.useCallback(async Te=>{var ge,oe,ve,se;const ae=Number(Te);if(!Number.isFinite(ae)||ae<=0){j([]),k({}),M({}),U(""),O({}),L(!1);return}L(!0),U("");try{const ie=await lt.get(`/api/groups/${ae}/permissions`),he=Array.isArray((ge=ie.data)==null?void 0:ge.sections)?ie.data.sections:[],Oe=(oe=ie.data)!=null&&oe.values&&typeof ie.data.values=="object"?ie.data.values:{},Ce={},Ue={},Fe=(Ee,dt)=>{if(!Ee||typeof Ee!="object")return null;const ft=Ee.key||"",Ft=typeof Ee.defaultLevel=="string"&&Ee.defaultLevel?Ee.defaultLevel:"none";Ce[ft]=Ft;const Kt=Oe[ft];let Pt=typeof Kt=="string"&&Kt?Kt:Ft;const Rt=Array.isArray(Ee.availableLevels)&&Ee.availableLevels.length?Ee.availableLevels:Ih.map(ir=>ir.value);Rt.includes(Pt)||(Pt=Ft),Ue[ft]=Pt;const hr=Array.isArray(Ee.dependencies)?Ee.dependencies:[];return{...Ee,availableLevels:Rt,dependencies:hr,sortOrder:typeof Ee.sortOrder=="number"?Ee.sortOrder:dt}},Ie=he.map((Ee,dt)=>{const ft=Array.isArray(Ee.items)?Ee.items.map((Kt,Pt)=>Fe(Kt,Pt)).filter(Boolean):[],Ft=Array.isArray(Ee.groups)?Ee.groups.map((Kt,Pt)=>{const Rt=Array.isArray(Kt.items)?Kt.items.map((hr,ir)=>Fe(hr,ir)).filter(Boolean):[];return{...Kt,sortOrder:typeof Kt.sortOrder=="number"?Kt.sortOrder:Pt,items:Rt}}):[];return{...Ee,sortOrder:typeof Ee.sortOrder=="number"?Ee.sortOrder:dt,hasNavigation:!!Ee.hasNavigation,items:ft,groups:Ft}});j(Ie),M(Ce),k({...Ue}),O({...Ue})}catch(ie){let he="Die Berechtigungen konnten nicht geladen werden.";((se=(ve=ie.response)==null?void 0:ve.data)==null?void 0:se.error)==="GROUP_NOT_FOUND"&&(he="Die angeforderte Benutzergruppe wurde nicht gefunden."),U(he),j([]),k({}),M({}),O({}),t({variant:"error",title:"Fehler beim Laden",description:he})}finally{L(!1)}},[t]),be=P.useCallback(async()=>{var Te,ae,ge,oe;if(!pe){m("Ungültige Gruppen-ID."),c(null),g(ra(null)),b.current=ra(null),j([]),k({}),M({}),U(""),s(!0);return}C(!0),m("");try{const ve=await lt.get(`/api/groups/${pe}`),se=Jw((Te=ve.data)==null?void 0:Te.item);if(!se.id)throw new Error("GROUP_NOT_FOUND");c(se);const ie=ra(se);b.current={...ie},g(ie),v(""),(se.name||"").toLowerCase()==="superuser"?(j([]),k({}),M({}),U(""),O({}),L(!1)):de?fe(se.id):(j([]),k({}),M({}),U(""),O({}),L(!1))}catch(ve){const se=(ge=(ae=ve.response)==null?void 0:ae.data)==null?void 0:ge.error;let ie="Gruppendetails konnten nicht geladen werden.";se==="GROUP_NOT_FOUND"?ie="Die angeforderte Benutzergruppe wurde nicht gefunden.":se==="INVALID_GROUP_ID"?ie="Die angegebene Gruppen-ID ist ungültig.":((oe=ve.response)==null?void 0:oe.status)===404&&(ie="Die angeforderte Benutzergruppe existiert nicht."),c(null),b.current=ra(null),g(ra(null)),j([]),k({}),M({}),U(""),L(!1),m(ie),t({variant:"error",title:"Fehler beim Laden",description:ie})}finally{C(!1),s(!0)}},[pe,t,fe,de]);P.useEffect(()=>{be()},[be]);const ye=P.useMemo(()=>{if(!d||!i)return!1;const Te=b.current;if(!Te)return!1;const ae=Te.name||"",ge=f.name||"",oe=Te.description||"",ve=f.description||"",se=Te.avatarColor||"",ie=f.avatarColor||"";return ae!==ge||oe!==ve||se!==ie},[f,d,i]),Pe=P.useMemo(()=>{if(X)return!1;const Te=S||{},ae=N||{},ge=new Set([...Object.keys(Te),...Object.keys(ae)]);for(const oe of ge){const ve=Te[oe]??null,se=ae[oe]??null;if(ve!==se)return!0}return!1},[N,S,X]),Me=P.useMemo(()=>ye||Pe,[ye,Pe]),ke=P.useCallback(Te=>{const{value:ae}=Te.target;g(ge=>({...ge,name:ae}))},[]),ce=P.useCallback(Te=>{const{value:ae}=Te.target;g(ge=>({...ge,description:ae}))},[]),je=P.useCallback(Te=>{g(ae=>({...ae,avatarColor:Te||""}))},[]),He=P.useCallback(async()=>{var Te,ae,ge,oe;if(!(!i||!ye&&!Pe)){if(ye&&!me){v("Dir fehlt die Berechtigung, diese Gruppe zu bearbeiten.");return}if(Pe&&!ee){v("Dir fehlt die Berechtigung, die Gruppenrechte anzupassen.");return}l(!0),v("");try{if(ye){const ve={avatarColor:f.avatarColor};X||(ve.name=f.name,ve.description=f.description);const se=await lt.put(`/api/groups/${i.id}`,ve),ie=Jw(((Te=se.data)==null?void 0:Te.item)||((ae=se.data)==null?void 0:ae.group));if(ie!=null&&ie.id){c(ie);const he=ra(ie);b.current={...he},g(he)}}Pe&&(await lt.put(`/api/groups/${i.id}/permissions`,{values:N}),k(ve=>({...ve,...N})),O({...N})),ye?t({variant:"success",title:"Gruppe gespeichert",description:"Die Änderungen wurden erfolgreich gespeichert."}):Pe&&t({variant:"success",title:"Berechtigungen gespeichert",description:"Die Berechtigungen wurden erfolgreich gespeichert."}),v("")}catch(ve){const se=(oe=(ge=ve.response)==null?void 0:ge.data)==null?void 0:oe.error;let ie="Die Änderungen konnten nicht gespeichert werden.";se==="GROUP_NAME_REQUIRED"?ie="Bitte einen Gruppennamen angeben.":se==="GROUP_NAME_TAKEN"?ie="Der Gruppenname wird bereits verwendet.":se==="INVALID_AVATAR_COLOR"?ie="Bitte eine gültige Avatar-Farbe auswählen.":se==="GROUP_NOT_FOUND"?ie="Die Benutzergruppe wurde nicht gefunden.":se==="GROUP_SUPERUSER_PROTECTED"?ie="Für die Superuser-Gruppe können Berechtigungen nicht angepasst werden.":se==="PERMISSION_INVALID_PAYLOAD"?ie="Ungültige Berechtigungsdaten übermittelt.":se==="PERMISSION_INVALID_LEVEL"?ie="Für mindestens eine Berechtigung wurde ein nicht erlaubter Wert übermittelt.":se==="PERMISSION_UNKNOWN_KEY"&&(ie="Es wurde eine unbekannte Berechtigung übermittelt."),v(ie),t({variant:"error",title:"Speichern fehlgeschlagen",description:ie})}finally{l(!1)}}},[i,ye,Pe,f,t,X,N,me,ee]),qe=P.useMemo(()=>{const Te=(f.name||f.description||"").trim();return Te?Te.charAt(0).toUpperCase():"?"},[f.name,f.description]),Je=P.useMemo(()=>f.avatarColor?f.avatarColor:(i==null?void 0:i.avatarColor)||"",[f.avatarColor,i]),Qe=K||u||!i||Se||!me,Ge=K||u||!i||Se||!me,Xe=f.avatarColor||"",ht=P.useCallback((Te,ae)=>{if(!Te||!ee||X)return;const ge=Dh(Te,ae);k(oe=>{const ve=Te==="maintenance-server-manage"&&ge!=="full";if(!ve&&oe[Te]===ge)return oe;const se={...oe,[Te]:ge};return ve&&(se["maintenance-server-delete"]="none"),se})},[ee,X]),Ve=P.useCallback(Te=>{if(!Te)return null;let ae=null;return Object.prototype.hasOwnProperty.call(N,Te)?ae=N[Te]:Object.prototype.hasOwnProperty.call(A,Te)&&(ae=A[Te]),typeof ae=="string"?Dh(Te,ae):ae},[N,A]),ot=P.useMemo(()=>y.jsx("span",{className:"mx-auto block h-2.5 w-2.5 rounded-full border border-blue-gray-400 bg-black"}),[]),_t=P.useMemo(()=>y.jsx("span",{className:"mx-auto block h-2.5 w-2.5 rounded-full border border-blue-gray-700 bg-gray-900"}),[]),Ne=P.useCallback(Te=>!Te||!Te.key?!1:(Array.isArray(Te.dependencies)?Te.dependencies:[]).every(ge=>{if(!ge||!ge.key)return!0;const oe=Ve(ge.key)??"none",ve=ge.requiredLevel||"!=none";return ve==="!=none"?oe!=="none":ve.startsWith("!=")?oe!==ve.substring(2):ve.startsWith("=")?oe===ve.substring(1):ve?oe===ve:!0}),[Ve]),at=(Te,ae,ge={})=>{if(!Ne(Te))return null;const oe=`permission-${ae}-${Te.key}`,ve=Ve(Te.key)??"none",se=Dh(Te.key,ve),ie=Ve("maintenance-server-manage")??"none",{addTopBorder:he=!0}=ge,Oe=["flex flex-col gap-2.5 px-4 py-4 md:flex-row md:items-center md:gap-6",he?"border-t border-blue-gray-100":""].filter(Boolean).join(" "),Ce=Array.isArray(Te.availableLevels)&&Te.availableLevels.length?Te.availableLevels:Ih.map(Ie=>Ie.value),Ue=new Set(Te.key==="maintenance-server-delete"?Ce.filter(Ie=>Ie==="full"||Ie==="none"):Ce),Fe=Ih;return y.jsxs("div",{className:Oe,children:[y.jsx("div",{className:"text-sm font-medium leading-5 text-blue-gray-600 md:w-1/2",children:Te.label}),y.jsx(H.List,{className:"flex-col gap-1.5 md:ml-auto md:flex-row md:flex-nowrap md:w-1/2 md:items-center md:justify-end md:gap-3",children:Fe.map(Ie=>{const Ee=`${oe}-${Ie.value}`,dt=se===Ie.value,ft=Te.key==="maintenance-server-delete"&&Ie.value==="full"&&(e_[ie]??0)ht(Te.key,Ie.value),disabled:Ft,ripple:!1,className:"h-4 w-4 hover:before:opacity-0",containerProps:{className:"p-0"},icon:ot,checkedIcon:_t})}),y.jsx(H.Typography,{color:"blue-gray",className:`text-sm font-medium leading-5 whitespace-nowrap ${Ft?"text-blue-gray-300":"text-blue-gray-600"}`,children:Ie.label})]})},`${ae}-${Te.key}-${Ie.value}`)})})]},`${ae}-${Te.key}`)};return y.jsx(y.Fragment,{children:y.jsxs("div",{className:"mt-12 flex flex-col gap-12",children:[(Y||z)&&y.jsx("div",{className:"rounded-lg border border-cyan-500/60 bg-cyan-900/30 px-4 py-3 text-sm text-bluegray-100",children:y.jsxs("div",{className:"flex flex-col gap-1",children:[y.jsxs("span",{children:["Wartungsmodus aktiv",q?` – ${q}`:z?" – Portainer-Update läuft":"","."]}),z&&y.jsxs("span",{className:"text-xs text-indigo-900",children:["Phase: ",$]})]})}),y.jsx("div",{className:"relative h-72 w-full overflow-hidden rounded-xl bg-[url('/img/background-image.png')] bg-cover\\tbg-center",children:y.jsx("div",{className:"absolute inset-0 h-full w-full bg-gray-900/75"})}),y.jsx(H.Card,{className:"mx-3 -mt-16 mb-6 lg:mx-4 border border-blue-gray-100",children:y.jsxs(H.CardBody,{className:"p-4",children:[y.jsxs("div",{className:"mb-10 flex flex-wrap items-center justify-between gap-6",children:[y.jsxs("div",{className:"flex items-center gap-6",children:[y.jsx("div",{className:`text-black flex h-[74px] w-[74px] items-center justify-center rounded-xl text-3xl font-semibold uppercase shadow-lg shadow-blue-gray-500/40 ${Je}`,"aria-label":f.name||"Gruppenavatar",children:qe}),y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:f.name||"–"}),y.jsxs(H.Typography,{className:"text-xs font-semibold tracking-wide text-stormGrey-400",children:["Gruppen-ID: ",(i==null?void 0:i.id)??"–"]})]})]}),Me&&y.jsx(H.Button,{color:"green",className:"normal-case",onClick:He,disabled:K||u,children:u?"Speichert ...":"Änderungen speichern"})]}),T&&!i&&y.jsxs("div",{className:"mb-6 flex items-center gap-3 rounded-lg border border-blue-gray-50 bg-blue-gray-50/50 px-4 py-3 text-sm text-blue-gray-500",children:[y.jsx(H.Spinner,{className:"h-4 w-4"}),y.jsx("span",{children:"Gruppendaten werden geladen ..."})]}),x&&!T&&y.jsx("div",{className:"mb-6 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:x}),h&&!T&&y.jsx("div",{className:"mb-6 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800",children:h}),y.jsxs("div",{className:"grid-cols-1 mb-12 grid gap-12 px-4 lg:grid-cols-2 xl:grid-cols-3",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-4",children:"Gruppendaten"}),X&&y.jsxs("div",{className:"mb-4 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800",children:["Systemgruppe – Name und Beschreibung sind geschützt.",Se&&y.jsx("span",{className:"mt-1 block text-xs text-amber-600",children:"Nur der Superuser darf die Superuser-Gruppe bearbeiten."})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Gruppenname"}),y.jsx(H.Input,{value:f.name,onChange:ke,placeholder:"Gruppenname",disabled:Qe,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Beschreibung"}),y.jsx(H.Input,{value:f.description,onChange:ce,placeholder:"Beschreibung der Gruppe",disabled:Qe,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{className:"mb-6",children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Avatar-Farbe"}),y.jsxs(H.Select,{label:"Avatar-Farbe auswählen",variant:"outlined",value:Xe,onChange:je,disabled:Ge,selected:Te=>{var ae;return(ae=Te==null?void 0:Te.props)!=null&&ae.children?Te.props.children:f.avatarColor?f.avatarColor:"Standardfarbe"},children:[y.jsx(H.Option,{value:"",children:y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx("span",{className:"h-4 w-4 rounded border border-blue-gray-100"}),y.jsx("span",{className:"text-xs",children:"Keine"})]})}),iN.map(Te=>y.jsx(H.Option,{value:Te,children:y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx("span",{className:`h-4 w-4 rounded border border-blue-gray-100 ${Te}`}),y.jsx("span",{className:"text-xs",children:Te})]})},Te))]})]})]}),y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-4",children:"Mitglieder"}),!i||i.members.length===0?y.jsx(H.Typography,{className:"text-sm text-stormGrey-500",children:"Aktuell sind keine Benutzer dieser Gruppe zugeordnet."}):y.jsx("div",{className:"flex flex-wrap gap-2",children:i.members.map(Te=>y.jsx(H.Chip,{value:Te.username,size:"sm",color:"blue-gray",variant:"ghost"},`${i.id}-${Te.id}-${Te.username}`))}),y.jsx("div",{className:"mt-6 text-xs text-stormGrey-400",children:y.jsxs("p",{children:["Mitglieder insgesamt: ",(i==null?void 0:i.memberCount)??0]})})]}),y.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:!Y&&!z&&y.jsxs(y.Fragment,{children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",className:"mb-4",children:"Berechtigungen (Ansicht)"}),X?y.jsx("div",{className:"rounded-xl border border-blue-gray-100 bg-white px-4 py-4 text-sm text-blue-gray-600 shadow-sm",children:"Die Superuser-Gruppe besitzt automatisch Vollzugriff auf alle Bereiche. Berechtigungen können hier nicht angepasst werden."}):de?y.jsxs("div",{className:"rounded-xl border border-blue-gray-100 bg-white shadow-sm",children:[D&&y.jsx("div",{className:"border-b border-blue-gray-100 px-4 py-4",children:y.jsxs("div",{className:"flex items-center gap-3 text-sm text-blue-gray-500",children:[y.jsx(H.Spinner,{className:"h-4 w-4"}),y.jsx("span",{children:"Berechtigungen werden geladen ..."})]})}),!D&&B&&y.jsx("div",{className:"border-b border-blue-gray-100 px-4 py-4 text-sm text-red-700",children:B}),!D&&!B&&(w.length===0?y.jsx("div",{className:"border-b border-blue-gray-100 px-4 py-4 text-sm text-blue-gray-500",children:"Für diese Gruppe sind keine Berechtigungen definiert."}):w.map((Te,ae)=>{const ge=Array.isArray(Te.items)?Te.items:[],oe=Array.isArray(Te.groups)?Te.groups:[];return y.jsxs("div",{className:ae===0?"":"border-t border-blue-gray-100",children:[y.jsx("div",{className:"border-b border-blue-gray-100 px-4 py-4",children:y.jsx(H.Typography,{variant:"h6",className:"text-lg font-semibold text-blue-gray-700",children:Te.title})}),ge.map((ve,se)=>at(ve,Te.key||ae,{addTopBorder:se!==0})),oe.map((ve,se)=>{const ie=Array.isArray(ve.items)?ve.items:[];return ie.some(Ne)?y.jsxs("div",{className:"border-t border-blue-gray-100",children:[y.jsx("div",{className:"border-b border-blue-gray-100 px-4 py-3",children:y.jsx(H.Typography,{className:"text-sm font-semibold uppercase tracking-wide text-blue-gray-600",children:ve.title})}),ie.map((Oe,Ce)=>at(Oe,ve.key||`${Te.key||ae}-${se}`,{addTopBorder:Ce!==0}))]},ve.key||`${Te.key||ae}-${se}`):null})]},Te.key||ae)}))]}):null]})})]})]})})]})})}const OV={initializing:"Vorbereitung","activating-maintenance":"Wartungsmodus aktivieren","executing-script":"Skript wird ausgeführt",waiting:"Warte auf Portainer",completed:"Abgeschlossen",failed:"Fehlgeschlagen"},PV=(e=[])=>{if(!Array.isArray(e)||e.length===0)return"";const t=[];for(let r=0;r{if(!Array.isArray(e))return[];const t=[];for(let r=0;rkV(b),[b]),h=P.useCallback(N=>{if(!N)return;const k=new Blob([N],{type:"text/plain;charset=utf-8"}),A=URL.createObjectURL(k),M=document.createElement("a");M.href=A;const D=t!=null&&t.username?`${t.username}-sicherheitsschluessel`:"security-phrase";M.download=`${D}.txt`,document.body.appendChild(M),M.click(),document.body.removeChild(M),URL.revokeObjectURL(A)},[t==null?void 0:t.username]),v=P.useCallback(async()=>{var N,k,A,M,D,L,B,U;c(!0),g("");try{const Y=await lt.get("/api/users/me/security-phrase"),q=Array.isArray((k=(N=Y.data)==null?void 0:N.item)==null?void 0:k.words)?Y.data.item.words:[];if(!q.length)throw new Error("EMPTY_SECURITY_PHRASE");S(q),x(!1)}catch(Y){if(((A=Y==null?void 0:Y.response)==null?void 0:A.status)===409||((D=(M=Y==null?void 0:Y.response)==null?void 0:M.data)==null?void 0:D.error)==="SECURITY_PHRASE_ALREADY_DOWNLOADED"){await n(),e("/dashboard/stacks",{replace:!0});return}if(((L=Y==null?void 0:Y.response)==null?void 0:L.status)===401){await n(),e("/auth/sign-in",{replace:!0});return}const q=((U=(B=Y==null?void 0:Y.response)==null?void 0:B.data)==null?void 0:U.error)||(Y==null?void 0:Y.message)||"Sicherheitsschlüssel konnte nicht geladen werden.";g(q)}finally{c(!1)}},[e,n]);P.useEffect(()=>{if(!t){e("/auth/sign-in",{replace:!0});return}if(!m){e("/dashboard/stacks",{replace:!0});return}v()},[t,m,v,e]);const w=P.useCallback(()=>{v()},[v]),j=P.useCallback(async()=>{var N,k,A,M,D,L;if(!(O||!Array.isArray(b)||b.length===0)){T(!0),g("");try{const B=PV(b);h(B);const U=await lt.post("/api/users/me/security-phrase/downloaded"),Y=((k=(N=U.data)==null?void 0:N.item)==null?void 0:k.downloadedAt)||null,q=(A=U.data)==null?void 0:A.session;q!=null&&q.user?r(q):await n(),x(!!Y),e("/dashboard/stacks",{replace:!0})}catch(B){if(((M=B==null?void 0:B.response)==null?void 0:M.status)===401){await n(),e("/auth/sign-in",{replace:!0});return}const U=((L=(D=B==null?void 0:B.response)==null?void 0:D.data)==null?void 0:L.error)||(B==null?void 0:B.message)||"Download konnte nicht bestätigt werden.";g(U)}finally{T(!1)}}},[b,O,h,n,e,r]);return m?y.jsxs("div",{className:"flex min-h-screen flex-col items-center justify-center bg-blue-gray-50/50 px-4 py-10",children:[y.jsxs("div",{className:"mb-6 text-center",children:[y.jsx(H.Typography,{variant:"h2",className:"font-semibold text-blue-gray-800",children:"Sicherheitsschlüssel sichern"}),y.jsx(H.Typography,{color:"blue-gray",className:"mt-2 max-w-3xl text-base",children:"Bitte lade den einmaligen Sicherheitsschlüssel herunter und bewahre ihn sicher auf. Er wird benötigt, um dein Passwort zurückzusetzen. Ohne den Download kannst du die Anwendung nicht weiter nutzen."})]}),y.jsx(H.Card,{className:"w-full max-w-3xl shadow-lg",children:y.jsxs(H.CardBody,{className:"space-y-6",children:[i&&y.jsx("div",{className:"flex items-center justify-center py-10",children:y.jsx(H.Spinner,{className:"h-10 w-10 text-blue-gray-500"})}),!i&&f&&y.jsx(H.Alert,{color:"red",className:"border border-red-200 bg-red-50 text-red-700",icon:y.jsx(zz,{className:"h-5 w-5"}),children:y.jsxs("div",{className:"flex items-start justify-between gap-4",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{variant:"h6",color:"red",children:"Fehler"}),y.jsx(H.Typography,{color:"red",className:"text-sm",children:f})]}),y.jsx(H.Button,{size:"sm",color:"red",variant:"text",onClick:w,className:"normal-case",children:"Erneut versuchen"})]})}),!i&&!f&&y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"rounded-lg border border-blue-gray-100 bg-blue-gray-50/60 p-6",children:[y.jsx(H.Typography,{variant:"h5",className:"mb-4 text-blue-gray-800",children:"Deine Sicherheitsphrase"}),y.jsx("div",{className:"space-y-3",children:l.map((N,k)=>y.jsx("div",{className:"flex flex-wrap items-center justify-center gap-4 text-lg font-mono tracking-wide text-blue-gray-900 md:text-xl",children:N.map((A,M)=>y.jsx("span",{className:"uppercase",children:A},`phrase-${k}-${M}`))},`phrase-row-${k}`))})]}),y.jsxs("div",{className:"flex flex-col items-center justify-between gap-4 md:flex-row",children:[y.jsx("div",{className:"text-sm text-blue-gray-600",children:"Der Download startet im TXT-Format. Bewahre die Datei sicher auf – sie kann später nicht erneut angezeigt werden."}),y.jsxs(H.Button,{color:"blue",size:"md",className:"flex items-center gap-2 normal-case",onClick:j,disabled:u||O||C||b.length===0,children:[y.jsx(Dz,{className:"h-5 w-5"}),"Sicherheitsschlüssel herunterladen"]})]})]})]})})]}):null}const EV="/assets/pattern-68ea7609.png";function jV(){const e=So(),{setSession:t,refreshSession:r}=Ur(),[n,o]=P.useState(""),[a,i]=P.useState(""),[c,f]=P.useState(!1),[g,b]=P.useState(null),[S,O]=P.useState(!1);P.useEffect(()=>{let C=!0;const x=new AbortController;return(async()=>{try{const d=await fetch("/api/setup/status",{credentials:"include",signal:x.signal});if(d.ok&&!(await d.json()).setupComplete&&C){e("/setup",{replace:!0});return}const s=await fetch("/api/auth/session",{credentials:"include",signal:x.signal});if(s.ok){const u=await s.json();if(u!=null&&u.user&&t(u),u!=null&&u.user&&C){const l=!!u.user.requiresSecurityPhraseDownload;e(l?"/dashboard/security-phrase":"/dashboard/stacks",{replace:!0});return}}}catch(d){d.name!=="AbortError"&&console.error("⚠️ [Auth] Initiale Prüfung fehlgeschlagen:",d)}finally{C&&O(!0)}})(),()=>{C=!1,x.abort()}},[e,t]);const T=P.useCallback(async C=>{var d,s;if(C.preventDefault(),c)return;b(null);const x=n.trim(),m=a.trim();if(!x||!m){b("Bitte fülle beide Felder aus.");return}f(!0);try{const u=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({identifier:x,password:m})}),l=await u.json().catch(()=>({}));if(!u.ok){if(u.status===401||l.error==="INVALID_CREDENTIALS")b("Ungültige Zugangsdaten.");else if(l.error==="MISSING_CREDENTIALS")b("Bitte fülle beide Felder aus.");else if(l.error==="SETUP_REQUIRED"||l.error==="SUPERUSER_REQUIRED"){e("/setup",{replace:!0});return}else l.error==="USER_INACTIVE"?b("Dieses Konto ist deaktiviert. Bitte wende dich an einen Administrator."):b("Anmeldung fehlgeschlagen. Bitte versuche es erneut.");return}let h=null;if(l!=null&&l.user)t(l),h=l;else{const w=await r();w!=null&&w.ok&&((d=w==null?void 0:w.data)!=null&&d.user)&&(h=w.data)}const v=!!((s=h==null?void 0:h.user)!=null&&s.requiresSecurityPhraseDownload);e(v?"/dashboard/security-phrase":"/dashboard/stacks",{replace:!0})}catch(u){console.error("⚠️ [Auth] Anmeldung fehlgeschlagen:",u),b("Netzwerkfehler – bitte erneut versuchen.")}finally{f(!1)}},[n,a,c,e,r,t]);return S?y.jsxs("section",{className:"m-8 flex gap-4",children:[y.jsxs("div",{className:"w-full lg:w-3/5 mt-24",children:[y.jsxs("div",{className:"text-center",children:[y.jsx(H.Typography,{variant:"h2",className:"font-bold mb-4",children:"Anmelden"}),y.jsx(H.Typography,{variant:"paragraph",color:"blue-gray",className:"text-lg font-normal",children:"Gib deine E-Mail oder deinen Benutzernamen sowie dein Passwort ein, um dich anzumelden."})]}),y.jsxs("form",{className:"mt-8 mb-2 mx-auto w-80 max-w-screen-lg lg:w-1/2",onSubmit:T,children:[y.jsxs("div",{className:"mb-1 flex flex-col gap-6",children:[y.jsx(H.Typography,{variant:"small",color:"blue-gray",className:"-mb-3 font-medium",children:"E-Mail oder Benutzername"}),y.jsx(H.Input,{size:"lg",placeholder:"E-Mail oder Benutzername",value:n,onChange:C=>o(C.target.value),required:!0,autoFocus:!0,disabled:c,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}}),y.jsx(H.Typography,{variant:"small",color:"blue-gray",className:"-mb-3 font-medium",children:"Passwort"}),y.jsx(H.Input,{type:"password",size:"lg",placeholder:"********",value:a,onChange:C=>i(C.target.value),required:!0,disabled:c,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),g&&y.jsx(H.Alert,{color:"red",className:"mt-2 border border-red-200 bg-red-50 text-red-700",children:g}),y.jsx(H.Button,{type:"submit",className:"mt-6",fullWidth:!0,disabled:c,children:c?"Anmeldung läuft ...":"Anmelden"}),y.jsx(H.Typography,{as:"button",type:"button",onClick:()=>e("/auth/forgot-password"),className:"mt-4 text-sm font-medium text-blue-600 transition hover:text-blue-800",children:"Passwort vergessen?"})]})]}),y.jsx("div",{className:"w-2/5 h-full hidden lg:block",children:y.jsx("img",{src:EV,className:"h-full w-full object-cover rounded-3xl"})})]}):y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Pruefe Anmeldestatus ..."})})}function AV(){return y.jsxs("section",{className:"m-8 flex",children:[y.jsx("div",{className:"w-2/5 h-full hidden lg:block",children:y.jsx("img",{src:"/img/pattern.png",className:"h-full w-full object-cover rounded-3xl"})}),y.jsxs("div",{className:"w-full lg:w-3/5 flex flex-col items-center justify-center",children:[y.jsxs("div",{className:"text-center",children:[y.jsx(H.Typography,{variant:"h2",className:"font-bold mb-4",children:"Join Us Today"}),y.jsx(H.Typography,{variant:"paragraph",color:"blue-gray",className:"text-lg font-normal",children:"Enter your email and password to register."})]}),y.jsxs("form",{className:"mt-8 mb-2 mx-auto w-80 max-w-screen-lg lg:w-1/2",children:[y.jsxs("div",{className:"mb-1 flex flex-col gap-6",children:[y.jsx(H.Typography,{variant:"small",color:"blue-gray",className:"-mb-3 font-medium",children:"Your email"}),y.jsx(H.Input,{size:"lg",placeholder:"name@mail.com",className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsx(H.Checkbox,{label:y.jsxs(H.Typography,{variant:"small",color:"gray",className:"flex items-center justify-start font-medium",children:["I agree the ",y.jsx("a",{href:"#",className:"font-normal text-black transition-colors hover:text-gray-900 underline",children:"Terms and Conditions"})]}),containerProps:{className:"-ml-2.5"}}),y.jsx(H.Button,{className:"mt-6",fullWidth:!0,children:"Register Now"}),y.jsxs("div",{className:"space-y-4 mt-8",children:[y.jsxs(H.Button,{size:"lg",color:"white",className:"flex items-center gap-2 justify-center shadow-md",fullWidth:!0,children:[y.jsxs("svg",{width:"17",height:"16",viewBox:"0 0 17 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[y.jsxs("g",{clipPath:"url(#clip0_1156_824)",children:[y.jsx("path",{d:"M16.3442 8.18429C16.3442 7.64047 16.3001 7.09371 16.206 6.55872H8.66016V9.63937H12.9813C12.802 10.6329 12.2258 11.5119 11.3822 12.0704V14.0693H13.9602C15.4741 12.6759 16.3442 10.6182 16.3442 8.18429Z",fill:"#4285F4"}),y.jsx("path",{d:"M8.65974 16.0006C10.8174 16.0006 12.637 15.2922 13.9627 14.0693L11.3847 12.0704C10.6675 12.5584 9.7415 12.8347 8.66268 12.8347C6.5756 12.8347 4.80598 11.4266 4.17104 9.53357H1.51074V11.5942C2.86882 14.2956 5.63494 16.0006 8.65974 16.0006Z",fill:"#34A853"}),y.jsx("path",{d:"M4.16852 9.53356C3.83341 8.53999 3.83341 7.46411 4.16852 6.47054V4.40991H1.51116C0.376489 6.67043 0.376489 9.33367 1.51116 11.5942L4.16852 9.53356Z",fill:"#FBBC04"}),y.jsx("path",{d:"M8.65974 3.16644C9.80029 3.1488 10.9026 3.57798 11.7286 4.36578L14.0127 2.08174C12.5664 0.72367 10.6469 -0.0229773 8.65974 0.000539111C5.63494 0.000539111 2.86882 1.70548 1.51074 4.40987L4.1681 6.4705C4.8001 4.57449 6.57266 3.16644 8.65974 3.16644Z",fill:"#EA4335"})]}),y.jsx("defs",{children:y.jsx("clipPath",{id:"clip0_1156_824",children:y.jsx("rect",{width:"16",height:"16",fill:"white",transform:"translate(0.5)"})})})]}),y.jsx("span",{children:"Sign in With Google"})]}),y.jsxs(H.Button,{size:"lg",color:"white",className:"flex items-center gap-2 justify-center shadow-md",fullWidth:!0,children:[y.jsx("img",{src:"/img/twitter-logo.svg",height:24,width:24,alt:""}),y.jsx("span",{children:"Sign in With Twitter"})]})]}),y.jsxs(H.Typography,{variant:"paragraph",className:"text-center text-blue-gray-500 font-medium mt-4",children:["Already have an account?",y.jsx(Y5,{to:"/auth/sign-in",className:"text-gray-900 ml-1",children:"Sign in"})]})]})]})]})}function sN(){const e=So(),{logout:t}=Ur(),[r,n]=P.useState("abmelden..."),[o,a]=P.useState(null);return P.useEffect(()=>{let i=!1;return(async()=>{try{n("Abmeldung läuft …"),a(null),await t()}catch(f){i||(console.error("⚠️ [Auth] Logout fehlgeschlagen:",f),a("Abmeldung fehlgeschlagen. Bitte versuche es erneut."))}finally{i||e("/auth/sign-in",{replace:!0})}})(),()=>{i=!0}},[t,e]),y.jsx("section",{className:"m-8 flex min-h-[60vh] items-center justify-center",children:y.jsx(H.Card,{className:"w-full max-w-md border border-blue-gray-100 shadow-sm",children:y.jsxs(H.CardBody,{className:"space-y-4 text-center",children:[y.jsxs("div",{className:"flex items-center justify-center gap-3",children:[y.jsx(H.Spinner,{className:"h-5 w-5 text-blue-gray-500"}),y.jsx(H.Typography,{color:"blue-gray",className:"text-sm font-medium",children:r})]}),o&&y.jsx(H.Typography,{color:"red",className:"text-sm",children:o}),y.jsx(H.Typography,{className:"text-xs text-blue-gray-400",children:"Du wirst automatisch weitergeleitet …"})]})})})}sN.displayName="/src/pages/auth/sign-out.jsx";const Pc=8,lN=e=>String(e||"").trim().toLowerCase(),RV=(e="")=>{const t=String(e||"").replace(/[\r\n\t]+/g," ").trim().toLowerCase();return t?t.split(/\s+/).filter(Boolean):[]},MV=(e=[])=>{const t=e.map(lN).filter(Boolean);return{words:t,canonical:t.join("")}};function IV(){const e=So(),{showToast:t}=zs(),{user:r}=Ur(),[n,o]=P.useState(""),[a,i]=P.useState(Array(Pc).fill("")),[c,f]=P.useState(""),[g,b]=P.useState(""),[S,O]=P.useState(""),[T,C]=P.useState(!1),[x,m]=P.useState(""),[d,s]=P.useState(""),[u,l]=P.useState(""),[h,v]=P.useState(!1),[w,j]=P.useState("");P.useEffect(()=>{r&&e("/dashboard/stacks",{replace:!0})},[r,e]);const N=P.useMemo(()=>g.trim()?RV(g):a.map(lN).filter(Boolean),[g,a]),k=P.useCallback((B,U)=>{i(Y=>{const q=[...Y];return q[B]=U,q})},[]),A=P.useCallback(B=>{const[U]=B.target.files||[];if(!U){f(""),b("");return}f(U.name);const Y=new FileReader;Y.onload=q=>{var $;const z=String((($=q.target)==null?void 0:$.result)||"");b(z),i(Array(Pc).fill(""))},Y.onerror=()=>{f(""),b(""),t({variant:"error",title:"Datei konnte nicht gelesen werden",description:"Bitte lade die Datei erneut hoch."})},Y.readAsText(U)},[t]),M=P.useCallback(async()=>{var z,$,K;O(""),m("");const B=n.trim();if(!B){O("Bitte gib deinen Benutzernamen ein.");return}const U=N,Y=!!g.trim();if(!Y&&U.length!==Pc){O("Bitte gib alle acht Wörter des Sicherheitsschlüssels ein.");return}if(Y&&U.length!==Pc){O("Die hochgeladene Datei enthält nicht genau acht Wörter.");return}const q=MV(U);if(!q.canonical){O("Der Sicherheitsschlüssel ist ungültig oder leer.");return}C(!0);try{const te=(z=(await lt.post("/api/auth/recover/verify",{username:B,phrase:q.canonical,words:q.words})).data)==null?void 0:z.token;if(!te)throw new Error("TOKEN_MISSING");m(te),t({variant:"success",title:"Sicherheitsschlüssel bestätigt",description:"Du kannst jetzt ein neues Passwort festlegen."})}catch(X){const te=(K=($=X.response)==null?void 0:$.data)==null?void 0:K.error;O(te==="USER_NOT_FOUND"?"Der angegebene Benutzer wurde nicht gefunden.":te==="PHRASE_MISMATCH"?"Der Sicherheitsschlüssel passt nicht zum Benutzer.":te==="PHRASE_NOT_INITIALIZED"?"Für diesen Benutzer ist aktuell kein Sicherheitsschlüssel hinterlegt.":te==="PHRASE_REQUIRED"?"Bitte gib den Sicherheitsschlüssel ein.":te==="USERNAME_REQUIRED"?"Der Benutzername darf nicht leer sein.":te==="INVALID_PASSWORD"?"Der Sicherheitsschlüssel ist ungültig.":"Die Sicherheitsprüfung ist fehlgeschlagen. Bitte versuche es erneut.")}finally{C(!1)}},[g,N,t,n]),D=P.useCallback(async()=>{var Y,q;if(j(""),!x){j("Bitte bestätige zuerst deinen Sicherheitsschlüssel.");return}const B=d.trim(),U=u.trim();if(!B||!U){j("Bitte gib das neue Passwort zweimal ein.");return}if(B!==U){j("Die Passwörter stimmen nicht überein.");return}v(!0);try{await lt.post("/api/auth/recover/reset",{token:x,password:B,confirmPassword:U}),t({variant:"success",title:"Passwort aktualisiert",description:"Du kannst dich jetzt mit deinem neuen Passwort anmelden."}),e("/auth/sign-in",{replace:!0})}catch(z){const $=(q=(Y=z.response)==null?void 0:Y.data)==null?void 0:q.error;$==="TOKEN_INVALID_OR_EXPIRED"?(j("Die Wiederherstellungssitzung ist abgelaufen. Bitte starte den Vorgang erneut."),m("")):j($==="PASSWORD_TOO_SHORT"?"Das Passwort muss mindestens 8 Zeichen enthalten.":$==="PASSWORD_REQUIRED"?"Bitte gib ein neues Passwort ein.":$==="PASSWORD_MISMATCH"?"Die Passwörter stimmen nicht überein.":"Das Passwort konnte nicht zurückgesetzt werden. Bitte versuche es erneut.")}finally{v(!1)}},[u,e,d,t,x]),L=!!x;return y.jsx("section",{className:"m-8 flex justify-center",children:y.jsxs(H.Card,{className:"w-full max-w-3xl",children:[y.jsxs(H.CardHeader,{floated:!1,shadow:!1,className:"rounded-none border-b border-blue-gray-50 bg-white px-6 py-5",children:[y.jsx(H.Typography,{variant:"h4",color:"blue-gray",className:"font-semibold",children:"Passwort zurücksetzen"}),y.jsx(H.Typography,{color:"blue-gray",className:"mt-1 text-sm",children:"Gib deinen Benutzernamen und den Sicherheitsschlüssel (8 Wörter) ein oder lade die gespeicherte Schlüsseldatei."})]}),y.jsxs(H.CardBody,{className:"space-y-8",children:[y.jsxs("div",{className:"space-y-4",children:[y.jsx(H.Typography,{variant:"h6",color:"blue-gray",children:"Schritt 1: Sicherheitsschlüssel prüfen"}),y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Benutzername"}),y.jsx(H.Input,{size:"lg",placeholder:"Benutzername",value:n,onChange:B=>o(B.target.value),disabled:L||T,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Sicherheitsschlüssel eingeben"}),y.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-4 min-w-[20px] [&>div]:!min-w-0",children:a.map((B,U)=>y.jsx(H.Input,{placeholder:`Wort ${U+1}`,value:B,onChange:Y=>k(U,Y.target.value),disabled:L||T||!!g.trim(),className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}},`phrase-input-${U}`))})]}),y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Alternativ: Schlüsseldatei (.txt) hochladen"}),y.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center",children:[y.jsx("input",{type:"file",accept:".txt",onChange:A,disabled:L||T,className:"block w-full max-w-xs text-sm text-blue-gray-500 file:mr-4 file:rounded-md file:border-0 file:bg-blue-gray-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-blue-gray-700 hover:file:bg-blue-gray-100"}),c&&y.jsxs(H.Typography,{className:"text-xs text-blue-gray-500",children:["Ausgewählte Datei: ",y.jsx("span",{className:"font-medium text-blue-gray-700",children:c})]})]})]}),S&&y.jsx(H.Alert,{color:"red",className:"border border-red-200 bg-red-50 text-red-700",children:S}),y.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[y.jsx(H.Button,{color:"blue",className:"normal-case",onClick:M,disabled:T||L,children:T?y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx(H.Spinner,{className:"h-4 w-4"})," Prüfe Sicherheitsschlüssel ..."]}):"Sicherheitsschlüssel prüfen"}),L&&y.jsx(H.Typography,{className:"text-sm text-blue-gray-500",children:"Die Wiederherstellung bleibt für kurze Zeit aktiv. Bitte setze dein Passwort zeitnah zurück."})]})]}),y.jsxs("div",{className:"space-y-4",children:[y.jsx(H.Typography,{variant:"h6",color:L?"blue-gray":"gray",children:"Schritt 2: Neues Passwort festlegen"}),!L&&y.jsx(H.Typography,{className:"text-sm text-blue-gray-500",children:"Nach erfolgreicher Prüfung des Sicherheitsschlüssels kannst du hier ein neues Passwort vergeben."}),L&&y.jsxs("div",{className:"space-y-4",children:[y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Neues Passwort"}),y.jsx(H.Input,{type:"password",size:"lg",placeholder:"Neues Passwort",value:d,onChange:B=>s(B.target.value),disabled:h,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),y.jsxs("div",{children:[y.jsx(H.Typography,{className:"mb-2 block text-xs font-semibold uppercase text-blue-gray-500",children:"Passwort bestätigen"}),y.jsx(H.Input,{type:"password",size:"lg",placeholder:"Passwort bestätigen",value:u,onChange:B=>l(B.target.value),disabled:h,className:" !border-t-blue-gray-200 focus:!border-t-gray-900",labelProps:{className:"before:content-none after:content-none"}})]}),w&&y.jsx(H.Alert,{color:"red",className:"border border-red-200 bg-red-50 text-red-700",children:w}),y.jsx(H.Button,{color:"green",className:"normal-case",onClick:D,disabled:h,children:h?y.jsxs("span",{className:"flex items-center gap-2",children:[y.jsx(H.Spinner,{className:"h-4 w-4"})," Speichere Passwort ..."]}):"Neues Passwort speichern"})]})]}),y.jsx("div",{className:"border-t border-blue-gray-50 pt-4",children:y.jsx(H.Typography,{as:"button",type:"button",onClick:()=>e("/auth/sign-in"),className:"text-sm font-medium text-blue-600 transition hover:text-blue-800",children:"Zurück zur Anmeldung"})})]})]})})}function Xa({permission:e,requiredLevel:t="full",loadingFallback:r=null,children:n}){const{initialized:o,loading:a,hasPermission:i}=Ur();return e?!o||a?r??y.jsx("div",{className:"flex min-h-[200px] items-center justify-center",children:y.jsx(H.Typography,{variant:"small",color:"blue-gray",children:"Berechtigungen werden geladen …"})}):i(e,t)?n:y.jsx("div",{className:"mt-12 flex items-center justify-center px-4",children:y.jsx(H.Card,{className:"max-w-xl border border-blue-gray-100 shadow-sm",children:y.jsxs(H.CardBody,{className:"space-y-3 text-center",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Kein Zugriff auf diesen Bereich"}),y.jsxs(H.Typography,{variant:"small",className:"text-blue-gray-500",children:["Für diese Funktion wird die Berechtigung ",y.jsx("code",{children:e})," benötigt."]})]})})}):n}Xa.propTypes={permission:sn.string,requiredLevel:sn.string,loadingFallback:sn.node,children:sn.node.isRequired};const No={className:"w-5 h-5 text-inherit"},mg=[{layout:"dashboard",pages:[{icon:y.jsx(p4,{...No}),name:"stacks",path:"/stacks",element:y.jsx(eV,{}),permission:null},{icon:y.jsx(_4,{...No}),name:"wartung",path:"/maintenance",element:y.jsx(Xa,{permission:"maintenance-access",requiredLevel:"read",children:y.jsx(aV,{})}),permission:{key:"maintenance-access",requiredLevel:"read"}},{icon:y.jsx(o4,{...No}),name:"logs",path:"/logs",element:y.jsx(Xa,{permission:"logs-access",requiredLevel:"full",children:y.jsx(pV,{})}),permission:{key:"logs-access",requiredLevel:"full"}},{icon:y.jsx(y4,{...No}),name:"benutzer",path:"/users",element:y.jsx(Xa,{permission:"users-access",requiredLevel:"read",children:y.jsx(mV,{})}),permission:{key:"users-access",requiredLevel:"read"}},{icon:y.jsx(m4,{...No}),name:"rechtegruppen",path:"/usergroups",element:y.jsx(Xa,{permission:"user-groups-access",requiredLevel:"read",children:y.jsx(vV,{})}),permission:{key:"user-groups-access",requiredLevel:"read"}}]},{title:"auth pages",layout:"auth",pages:[{icon:y.jsx(c4,{...No}),name:"sign in",path:"/sign-in",element:y.jsx(jV,{})},{icon:y.jsx(t4,{...No}),name:"passwort vergessen",path:"/forgot-password",element:y.jsx(IV,{}),hidden:!0},{icon:y.jsx(GI,{...No}),name:"log out",path:"/logout",element:y.jsx(sN,{})},{icon:y.jsx(s4,{...No}),name:"sign up",path:"/sign-up",element:y.jsx(AV,{})}]}];function uN(){const[e,t]=Yf(),{sidenavType:r}=e,n=Ea(),o=So(),[a,i]=P.useState(!1),[c,f]=P.useState(!0),{initialized:g,loading:b,isAuthenticated:S,refreshSession:O,user:T}=Ur(),C=P.useCallback(async()=>{i(!1);try{const m=await fetch("/api/setup/status",{credentials:"include"});if(!m.ok)throw new Error("STATUS_REQUEST_FAILED");const d=await m.json();f(!d.setupComplete)}catch(m){console.error("⚠️ [Setup] Statusprüfung fehlgeschlagen:",m),f(!0)}finally{i(!0)}},[]);if(P.useEffect(()=>{C()},[C]),P.useEffect(()=>{!a||c||g||b||O()},[a,c,g,b,O]),P.useEffect(()=>{if(!a)return;if(c){n.pathname!=="/setup"&&o("/setup",{replace:!0});return}if(!g)return;if(!S){n.pathname!=="/auth/sign-in"&&o("/auth/sign-in",{replace:!0});return}const m=!!(T!=null&&T.requiresSecurityPhraseDownload),d=n.pathname==="/dashboard/security-phrase";if(m&&!d){o("/dashboard/security-phrase",{replace:!0});return}!m&&d&&o("/dashboard/stacks",{replace:!0})},[a,c,g,S,n.pathname,o,T==null?void 0:T.requiresSecurityPhraseDownload]),P.useEffect(()=>{if(!a||c||!g||b)return;if(!S){n.pathname!=="/auth/sign-in"&&o("/auth/sign-in",{replace:!0});return}const m=n.pathname.startsWith("/auth/"),d=n.pathname==="/auth/logout";(n.pathname==="/setup"||m&&!d)&&o("/dashboard/stacks",{replace:!0})},[a,c,g,b,S,n.pathname,o]),!a)return y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Pruefe Systemkonfiguration ..."})});if(c)return y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Setup erforderlich ..."})});if(!g||b)return y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Pruefe Anmeldung ..."})});if(!S)return y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Weiterleitung zur Anmeldung ..."})});const x=n.pathname==="/dashboard/security-phrase";return y.jsxs("div",{className:"min-h-screen bg-blue-gray-50/50",children:[!x&&y.jsx(Qf,{routes:mg,brandImg:r==="dark"?"/img/logo-ct.png":"/img/logo-ct-dark.png"}),y.jsxs("div",{className:x?"":"p-4 xl:ml-80",children:[!x&&y.jsxs(y.Fragment,{children:[y.jsx(Vk,{}),y.jsx(Uk,{}),y.jsx(H.IconButton,{size:"lg",color:"white",className:"fixed bottom-8 right-8 z-40 rounded-full shadow-blue-gray-900/10 xl:hidden",ripple:!1,onClick:()=>Pb(t,!0),children:y.jsx(Q5,{className:"h-5 w-5"})})]}),y.jsxs(_m,{children:[mg.map(({layout:m,pages:d})=>m==="dashboard"&&d.map(({path:s,element:u})=>y.jsx(mo,{exact:!0,path:s,element:u}))),y.jsx(mo,{path:"security-phrase",element:y.jsx(NV,{})}),y.jsx(mo,{path:"users/:userId",element:y.jsx(Xa,{permission:"users-access",requiredLevel:"read",children:y.jsx(SV,{})})}),y.jsx(mo,{path:"usergroups/:groupId",element:y.jsx(Xa,{permission:"user-groups-access",requiredLevel:"read",children:y.jsx(TV,{})})})]}),!x&&y.jsx("div",{className:"text-blue-gray-600",children:y.jsx(Wk,{})})]})]})}uN.displayName="/src/layout/dashboard.jsx";function cN(){return y.jsx("div",{className:"relative min-h-screen w-full",children:y.jsx(_m,{children:mg.map(({layout:e,pages:t})=>e==="auth"&&t.map(({path:r,element:n})=>y.jsx(mo,{exact:!0,path:r,element:n})))})})}cN.displayName="/src/layout/Auth.jsx";const fl=["Willkommen","Superuser","Server & API-Key","Stack auswählen (optional)","Abschluss"],DV=e=>typeof(e==null?void 0:e.Name)=="string"&&e.Name.toLowerCase().includes("stackpulse"),LV={username:"",email:"",password:""},FV={name:"",url:""};function zV(){var Ge,Xe,ht,Ve,ot,_t;const e=So(),[t,r]=P.useState(null),[n,o]=P.useState(!0),[a,i]=P.useState(null),[c,f]=P.useState(LV),[g,b]=P.useState(FV),[S,O]=P.useState(""),[T,C]=P.useState({loading:!1,success:!1,tried:!1,message:""}),[x,m]=P.useState({loading:!1,fetched:!1,error:"",items:[],updatedAt:null}),[d,s]=P.useState(""),[u,l]=P.useState(""),[h,v]=P.useState(0),[w,j]=P.useState(!1),[N,k]=P.useState(null),[A,M]=P.useState(!1);P.useEffect(()=>{let Ne=!0;const at=new AbortController;return(async()=>{var ae,ge,oe;o(!0),i(null);try{const ve=await fetch("/api/setup/status",{signal:at.signal,credentials:"include"});if(!ve.ok)throw new Error("STATUS_REQUEST_FAILED");const se=await ve.json();if(!Ne)return;if(r(se),se.setupComplete){e("/auth/sign-in",{replace:!0});return}f(he=>{var Oe,Ce,Ue,Fe,Ie,Ee;return{username:(Ce=(Oe=se.envDefaults)==null?void 0:Oe.superuserUsername)!=null&&Ce.length?se.envDefaults.superuserUsername:he.username,email:(Fe=(Ue=se.envDefaults)==null?void 0:Ue.superuserEmail)!=null&&Fe.length?se.envDefaults.superuserEmail:he.email,password:(Ee=(Ie=se.envDefaults)==null?void 0:Ie.superuserPassword)!=null&&Ee.length?se.envDefaults.superuserPassword:he.password}}),b(he=>{var Oe,Ce,Ue,Fe;return{name:(Ce=(Oe=se.envDefaults)==null?void 0:Oe.serverName)!=null&&Ce.length?se.envDefaults.serverName:he.name,url:(Fe=(Ue=se.envDefaults)==null?void 0:Ue.serverUrl)!=null&&Fe.length?se.envDefaults.serverUrl:he.url}}),O(he=>{var Oe,Ce;return(Ce=(Oe=se.envDefaults)==null?void 0:Oe.apiKeyValue)!=null&&Ce.length?se.envDefaults.apiKeyValue:he});const ie=((ae=se.selfStack)==null?void 0:ae.current)||((ge=se.envDefaults)==null?void 0:ge.selfStackId)||"";l(ie),s((oe=se.selfStack)!=null&&oe.current?String(se.selfStack.current):""),v(0),C({loading:!1,success:!1,tried:!1,message:""}),m({loading:!1,fetched:!1,error:"",items:[],updatedAt:null}),k(null),M(!1)}catch(ve){if(ve.name==="AbortError")return;console.error("⚠️ [Setup] Status konnte nicht geladen werden:",ve),Ne&&i("Setup-Status konnte nicht geladen werden. Bitte Seite aktualisieren.")}finally{Ne&&o(!1)}})(),()=>{Ne=!1,at.abort()}},[e]);const D=(t==null?void 0:t.envDefaults)||{},L=!!((Ge=t==null?void 0:t.requirements)!=null&&Ge.superuser),B=!!((Xe=t==null?void 0:t.requirements)!=null&&Xe.server),U=!!((ht=t==null?void 0:t.requirements)!=null&&ht.apiKey),Y=!!((Ve=t==null?void 0:t.apiKeys)!=null&&Ve.count),q=!!(D.serverUrl||(ot=t==null?void 0:t.servers)!=null&&ot.envProvided),z=!!(D.apiKeyValue||(_t=t==null?void 0:t.apiKeys)!=null&&_t.envProvided),$=B||q,K=U||!Y||z,X=!!D.superuserUsername,te=!!D.superuserEmail,me=!!D.superuserPassword,de=!!D.serverNameFromEnv,ee=!!D.serverUrl,Se=!!D.apiKeyValue,pe=P.useCallback(()=>{C(Ne=>Ne.loading||!Ne.tried?Ne:{loading:!1,success:!1,tried:!1,message:""})},[]),fe=P.useCallback(Ne=>at=>{const Te=at.target.value;f(ae=>({...ae,[Ne]:Te}))},[]),be=P.useCallback(Ne=>at=>{if(Ne==="name"&&de||Ne==="url"&&ee)return;const Te=at.target.value;b(ae=>({...ae,[Ne]:Te})),pe()},[pe,de,ee]),ye=P.useCallback(Ne=>{Se||(O(Ne.target.value),pe())},[Se,pe]),Pe=P.useCallback(async()=>{const Ne=g.url.trim(),at=S.trim();if(!Ne){C({loading:!1,success:!1,tried:!0,message:"Bitte gib eine Server-URL an."});return}if(!at){C({loading:!1,success:!1,tried:!0,message:"Bitte gib einen API-Key ein."});return}C({loading:!0,success:!1,tried:!0,message:""});try{const Te=await fetch("/api/setup/test-portainer",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({server:{name:g.name.trim()||null,url:Ne},apiKey:at})});if(!Te.ok){const ge=(await Te.json().catch(()=>({}))).message||"Verbindungstest fehlgeschlagen. Bitte Daten prüfen.";throw new Error(ge)}C({loading:!1,success:!0,tried:!0,message:"Verbindung wurde erfolgreich hergestellt."})}catch(Te){console.error("⚠️ [Setup] Verbindungstest fehlgeschlagen:",Te),C({loading:!1,success:!1,tried:!0,message:Te.message||"Verbindungstest fehlgeschlagen."})}},[S,g]),Me=P.useCallback(async({silent:Ne=!1}={})=>{if(!T.success){m(ae=>({...ae,error:"Bitte teste zuerst die Verbindung."}));return}const at=g.url.trim(),Te=S.trim();if(!(!at||!Te)){m(ae=>({...ae,loading:!Ne,error:"",fetched:!0}));try{const ae=await fetch("/api/setup/portainer-stacks",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({server:{name:g.name.trim()||null,url:at},apiKey:Te})});if(!ae.ok){const ie=(await ae.json().catch(()=>({}))).message||"Stacks konnten nicht geladen werden.";throw new Error(ie)}const ge=await ae.json().catch(()=>({stacks:[]})),ve=(Array.isArray(ge.stacks)?ge.stacks:[]).filter(DV);m({loading:!1,fetched:!0,error:ve.length?"":"Es wurden keine passenden Stacks gefunden.",items:ve,updatedAt:new Date})}catch(ae){console.error("⚠️ [Setup] Stack-Abruf fehlgeschlagen:",ae),m({loading:!1,fetched:!0,error:ae.message||"Stacks konnten nicht geladen werden.",items:[],updatedAt:new Date})}}},[S,T.success,g]);P.useEffect(()=>{h===3&&T.success&&!x.loading&&!x.fetched&&Me({silent:!0})},[h,T.success,Me,x.fetched,x.loading]),P.useEffect(()=>{T.success||(m(Ne=>({...Ne,items:[],fetched:!1,error:""})),s(""))},[T.success]);const ke=(d||u||"").trim(),ce=P.useMemo(()=>{switch(h){case 0:return!0;case 1:return L?c.username.trim()&&c.email.trim()&&c.password.trim():!0;case 2:{const Ne=$?!!g.url.trim():!0,at=K?!!S.trim():!0,Te=$||K?T.success:!0;return Ne&&at&&Te}case 3:return!0;case 4:return!0;default:return!1}},[h,S,T.success,L,K,$,c.email,c.password,c.username,g.url]),je=P.useCallback(()=>{h>=fl.length-1||v(Ne=>Math.min(Ne+1,fl.length-1))},[h]),He=P.useCallback(()=>{v(Ne=>Math.max(Ne-1,0))},[]),qe=P.useCallback(async()=>{if(!(!t||w)){k(null),M(!1),j(!0);try{const Ne={};L&&(Ne.superuser={username:c.username.trim(),email:c.email.trim(),password:c.password}),$&&(Ne.server={name:g.name.trim(),url:g.url.trim()}),(K||S.trim())&&(Ne.apiKey={value:S.trim()}),ke&&(Ne.selfStackId=ke);const at=await fetch("/api/setup/complete",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(Ne)});if(!at.ok){const ae=await at.json().catch(()=>({})),ge=(()=>{switch(ae.error){case"SERVER_DETAILS_REQUIRED":return"Bitte gib eine gültige Server-URL an.";case"API_KEY_REQUIRED":return"Bitte gib einen gültigen API-Key an.";case"USERNAME_REQUIRED":return"Benutzername wird benötigt.";case"EMAIL_INVALID":return"Bitte gib eine gültige E-Mail-Adresse an.";case"PASSWORD_TOO_SHORT":return"Passwort muss mindestens 8 Zeichen enthalten.";case"INVALID_PASSWORD":return"Das Passwort ist ungültig.";case"API_KEY_ENCRYPT_FAILED":return"API-Key konnte nicht verschlüsselt werden.";case"SUPERUSER_EXISTS":return"Der Superuser wurde bereits angelegt.";default:return"Setup konnte nicht abgeschlossen werden."}})();throw new Error(ge)}const Te=await at.json().catch(()=>({}));r(Te.status),M(!0),setTimeout(()=>{e("/auth/sign-in",{replace:!0})},1500)}catch(Ne){console.error("⚠️ [Setup] Abschluss fehlgeschlagen:",Ne),k(Ne.message||"Setup fehlgeschlagen.")}finally{j(!1)}}},[S,ke,w,e,L,K,$,t,c.email,c.password,c.username,g.name,g.url]),Je=P.useMemo(()=>x.items,[x.items]),Qe=()=>{switch(h){case 0:return y.jsxs("div",{className:"space-y-6",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Willkommen bei StackPulse"}),y.jsx(H.Typography,{className:"text-sm text-blue-gray-600",children:"Dieser Assistent führt dich durch fünf Schritte:"}),y.jsxs("ol",{className:"list-decimal space-y-2 pl-5 text-sm text-blue-gray-600",children:[y.jsx("li",{children:"Superuser-Zugang anlegen"}),y.jsx("li",{children:"Server-URL und Portainer API-Key hinterlegen und testen"}),y.jsx("li",{children:"Den eigenen Stack in Portainer identifizieren"}),y.jsx("li",{children:"Alle Angaben überprüfen und Setup abschließen"})]}),y.jsx(H.Alert,{color:"blue",className:"bg-blue-50 text-blue-800",children:"Du kannst jederzeit zum vorherigen Schritt zurückkehren. Vorwärts geht es, sobald alle Pflichtangaben eines Schritts erledigt sind."})]});case 1:return L?y.jsxs("div",{className:"space-y-4",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Superuser anlegen"}),y.jsx(H.Typography,{className:"text-sm text-blue-gray-600",children:"Dieser Benutzer hat Zugriff auf alle Funktionen."}),y.jsxs("div",{className:"grid gap-4",children:[y.jsx(H.Input,{label:"Benutzername",value:c.username,onChange:fe("username"),readOnly:X}),y.jsx(H.Input,{label:"E-Mail-Adresse",type:"email",value:c.email,onChange:fe("email"),readOnly:te}),y.jsx(H.Input,{label:"Passwort",type:"password",value:c.password,onChange:fe("password"),readOnly:me})]})]}):y.jsx(H.Alert,{color:"green",className:"bg-green-50 text-green-800",children:"Superuser ist bereits vorhanden. Du kannst direkt zum nächsten Schritt gehen."});case 2:return y.jsxs("div",{className:"space-y-6",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Server und Portainer-Zugriff"}),y.jsx(H.Typography,{className:"text-sm text-blue-gray-600",children:"Gib die URL zu deiner Portainer-Instanz sowie den dazugehörigen Business-API-Key ein und teste anschließend die Verbindung."}),y.jsxs("div",{className:"grid gap-4",children:[y.jsx(H.Input,{label:"Server-Name",value:g.name,onChange:be("name"),readOnly:de}),y.jsx(H.Input,{label:"Server-URL",required:$,value:g.url,onChange:be("url"),readOnly:ee}),y.jsx(H.Input,{label:"Portainer API-Key",type:"password",required:K,value:S,onChange:ye,readOnly:Se}),y.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[y.jsx(H.Button,{color:"blue",onClick:Pe,disabled:T.loading,className:"w-full sm:w-auto",children:T.loading?"Teste Verbindung…":"Verbindung testen"}),T.tried&&y.jsx("span",{className:`text-sm ${T.success?"text-green-600":"text-red-600"}`,children:T.message||(T.success?"Verbindung erfolgreich":"Verbindungstest fehlgeschlagen")})]})]})]});case 3:return y.jsxs("div",{className:"space-y-6",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Eigenen Stack wählen (optional)"}),y.jsx(H.Typography,{className:"text-sm text-blue-gray-600",children:"StackPulse kann deinen eigenen Stack hinterlegen, um spätere Wartungsschritte zu erleichtern. Wir versuchen, passende Stacks automatisch zu finden."}),y.jsx(H.Alert,{color:"blue",className:"bg-blue-50 text-blue-800",children:"Dieser Schritt ist optional. Du kannst die Self-Stack-ID später jederzeit im Bereich „Wartung > Server & API-Keys“ hinterlegen oder anpassen."}),y.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Button,{color:"blue",variant:"outlined",onClick:()=>Me({silent:!1}),disabled:!T.success||x.loading,className:"w-full sm:w-auto",children:x.loading?"Lade…":"Stacks neu laden"}),x.updatedAt&&y.jsxs("span",{className:"text-xs text-blue-gray-500",children:["Stand: ",x.updatedAt.toLocaleTimeString("de-DE")]})]}),x.error&&y.jsx(H.Alert,{color:"red",className:"bg-red-50 text-red-700",children:x.error}),y.jsx("div",{className:"space-y-3",children:Je.length===0&&!x.loading?y.jsx("p",{className:"text-sm text-blue-gray-500",children:'Es wurden keine Stacks gefunden, die "stackpulse" im Namen enthalten. Bitte die ID manuell eingeben oder die Suche erneut ausführen.'}):Je.map(Ne=>y.jsxs("label",{className:"flex cursor-pointer items-center justify-between rounded-md border border-blue-gray-100 p-3",children:[y.jsxs("div",{children:[y.jsx("p",{className:"text-sm font-medium text-blue-gray-900",children:Ne.Name||"Ohne Namen"}),y.jsxs("p",{className:"text-xs text-blue-gray-500",children:["ID: ",Ne.Id]})]}),y.jsx(H.Radio,{name:"stack-selection",value:String(Ne.Id),checked:d===String(Ne.Id),onChange:()=>{s(String(Ne.Id)),l("")},ripple:!1})]},Ne.Id))}),y.jsxs("div",{className:"space-y-2",children:[y.jsx(H.Typography,{className:"text-sm font-semibold text-blue-gray-700",children:"Alternative: Stack-ID manuell eintragen (optional)"}),y.jsx(H.Input,{label:"Stack-ID (optional)",value:u,onChange:Ne=>{l(Ne.target.value),s("")},placeholder:"z. B. 42"})]})]});case 4:return y.jsxs("div",{className:"space-y-6",children:[y.jsx(H.Typography,{variant:"h5",color:"blue-gray",children:"Zusammenfassung"}),y.jsxs("div",{className:"space-y-4 rounded-md border border-blue-gray-100 p-4 text-sm text-blue-gray-700",children:[y.jsxs("div",{children:[y.jsx("p",{className:"font-semibold",children:"Superuser"}),y.jsx("p",{children:L?`${c.username||"-"} (${c.email||"ohne E-Mail"})`:"Bereits vorhanden"})]}),y.jsxs("div",{children:[y.jsx("p",{className:"font-semibold",children:"Server"}),y.jsx("p",{children:g.url||"-"})]}),y.jsxs("div",{children:[y.jsx("p",{className:"font-semibold",children:"API-Key"}),y.jsx("p",{children:S?"(ausgefüllt)":"nicht angegeben"})]}),y.jsxs("div",{children:[y.jsx("p",{className:"font-semibold",children:"Self-Stack-ID"}),y.jsx("p",{children:ke||"nicht ausgewählt"})]})]}),N&&y.jsx(H.Alert,{color:"red",className:"bg-red-50 text-red-700",children:N}),A&&y.jsx(H.Alert,{color:"green",className:"bg-green-50 text-green-800",children:"Setup abgeschlossen. Du wirst zum Login weitergeleitet …"})]});default:return null}};return n?y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx("span",{className:"text-blue-gray-500",children:"Lade Setup-Status …"})}):a?y.jsx("div",{className:"flex min-h-screen items-center justify-center bg-blue-gray-50/50",children:y.jsx(H.Alert,{color:"red",className:"w-full max-w-lg border border-red-200 bg-red-50 text-red-700",children:a})}):t?y.jsx("div",{className:"flex min-h-screen w-full items-center justify-center py-10",children:y.jsxs(H.Card,{className:"w-full max-w-3xl border border-blue-gray-100 shadow-sm",children:[y.jsxs(H.CardHeader,{floated:!1,shadow:!1,className:"grid gap-1 rounded-none bg-transparent p-6 text-left",children:[y.jsx(H.Typography,{variant:"h4",color:"blue-gray",children:"System Setup"}),y.jsx(H.Typography,{color:"gray",className:"text-sm",children:"Folge den Schritten, um StackPulse mit deiner Portainer-Instanz zu verbinden."})]}),y.jsxs(H.CardBody,{className:"pt-0",children:[y.jsx(H.Stepper,{activeStep:h,className:"w-full py-6",children:fl.map((Ne,at)=>y.jsx(H.Step,{onClick:()=>v(at),className:"cursor-pointer",activeClassName:"bg-blue-600 text-white",completedClassName:"bg-blue-600 text-white",children:at+1},Ne))}),y.jsx("div",{className:"mt-4 grid grid-cols-1 gap-2 text-center text-xs font-medium text-blue-gray-600 sm:grid-cols-5",children:fl.map(Ne=>y.jsx("span",{children:Ne},Ne))}),y.jsx("div",{className:"mt-6 min-h-[260px] space-y-6",children:Qe()}),y.jsxs("div",{className:"mt-10 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[y.jsx(H.Button,{variant:"text",color:"blue",onClick:He,disabled:h===0||w,className:"w-full sm:w-auto",children:"Zurück"}),h:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-amber-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(255 179 0 / var(--tw-divide-opacity))}.divide-blue-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 136 229 / var(--tw-divide-opacity))}.divide-blue-gray-50>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(236 239 241 / var(--tw-divide-opacity))}.divide-blue-gray-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(84 110 122 / var(--tw-divide-opacity))}.divide-brown-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(109 76 65 / var(--tw-divide-opacity))}.divide-cyan-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(0 172 193 / var(--tw-divide-opacity))}.divide-deep-orange-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(244 81 30 / var(--tw-divide-opacity))}.divide-deep-purple-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(94 53 177 / var(--tw-divide-opacity))}.divide-gray-800>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(66 66 66 / var(--tw-divide-opacity))}.divide-green-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(22 163 74 / var(--tw-divide-opacity))}.divide-indigo-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(57 73 171 / var(--tw-divide-opacity))}.divide-light-blue-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(3 155 229 / var(--tw-divide-opacity))}.divide-light-green-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(124 179 66 / var(--tw-divide-opacity))}.divide-lime-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(192 202 51 / var(--tw-divide-opacity))}.divide-orange-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(234 88 12 / var(--tw-divide-opacity))}.divide-pink-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(216 27 96 / var(--tw-divide-opacity))}.divide-purple-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(142 36 170 / var(--tw-divide-opacity))}.divide-red-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 57 53 / var(--tw-divide-opacity))}.divide-teal-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(0 137 123 / var(--tw-divide-opacity))}.divide-yellow-600>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(253 216 53 / var(--tw-divide-opacity))}.self-start{align-self:flex-start}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.\!overflow-visible{overflow:visible!important}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-full{border-radius:9999px!important}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[7px\]{border-radius:7px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-tl-none{border-top-left-radius:0}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r-0{border-right-width:0px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(255 224 130 / var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.border-arcticBlue-400{--tw-border-opacity: 1;border-color:rgb(102 182 231 / var(--tw-border-opacity))}.border-arcticBlue-500{--tw-border-opacity: 1;border-color:rgb(51 158 222 / var(--tw-border-opacity))}.border-arcticBlue-600{--tw-border-opacity: 1;border-color:rgb(31 134 195 / var(--tw-border-opacity))}.border-arcticBlue-800{--tw-border-opacity: 1;border-color:rgb(15 75 111 / var(--tw-border-opacity))}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.border-blue-gray-100{--tw-border-opacity: 1;border-color:rgb(207 216 220 / var(--tw-border-opacity))}.border-blue-gray-200{--tw-border-opacity: 1;border-color:rgb(176 190 197 / var(--tw-border-opacity))}.border-blue-gray-400{--tw-border-opacity: 1;border-color:rgb(120 144 156 / var(--tw-border-opacity))}.border-blue-gray-50{--tw-border-opacity: 1;border-color:rgb(236 239 241 / var(--tw-border-opacity))}.border-blue-gray-500{--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.border-blue-gray-700{--tw-border-opacity: 1;border-color:rgb(69 90 100 / var(--tw-border-opacity))}.border-brown-500{--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.border-cyan-500{--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.border-cyan-500\/60{border-color:#00bcd499}.border-deep-orange-500{--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.border-deep-purple-500{--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(238 238 238 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(117 117 117 / var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(97 97 97 / var(--tw-border-opacity))}.border-gray-700\/20{border-color:#61616133}.border-gray-900{--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.border-light-blue-500{--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.border-light-green-500{--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.border-lime-500{--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.border-mossGreen-500\/80{border-color:#60b240cc}.border-mossGreen-700{--tw-border-opacity: 1;border-color:rgb(59 107 39 / var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(239 154 154 / var(--tw-border-opacity))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity))}.border-sunsetCoral-500{--tw-border-opacity: 1;border-color:rgb(255 106 93 / var(--tw-border-opacity))}.border-sunsetCoral-500\/40{border-color:#ff6a5d66}.border-sunsetCoral-500\/60{border-color:#ff6a5d99}.border-sunsetCoral-500\/80{border-color:#ff6a5dcc}.border-sunsetCoral-600{--tw-border-opacity: 1;border-color:rgb(230 80 72 / var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-warmAmberGlow-500\/80{border-color:#ff8f00cc}.border-warmAmberGlow-600{--tw-border-opacity: 1;border-color:rgb(230 118 0 / var(--tw-border-opacity))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.border-white\/80{border-color:#fffc}.border-yellow-500{--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.\!border-t-blue-gray-200{--tw-border-opacity: 1 !important;border-top-color:rgb(176 190 197 / var(--tw-border-opacity))!important}.\!border-t-transparent{border-top-color:transparent!important}.border-b-blue-gray-100{--tw-border-opacity: 1;border-bottom-color:rgb(207 216 220 / var(--tw-border-opacity))}.border-l-transparent{border-left-color:transparent}.border-r-transparent{border-right-color:transparent}.border-t-blue-gray-100{--tw-border-opacity: 1;border-top-color:rgb(207 216 220 / var(--tw-border-opacity))}.border-t-transparent{border-top-color:transparent}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 248 225 / var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(255 193 7 / var(--tw-bg-opacity))}.bg-amber-500\/10{background-color:#ffc1071a}.bg-amber-500\/20{background-color:#ffc10733}.bg-arcticBlue-400{--tw-bg-opacity: 1;background-color:rgb(102 182 231 / var(--tw-bg-opacity))}.bg-arcticBlue-500{--tw-bg-opacity: 1;background-color:rgb(51 158 222 / var(--tw-bg-opacity))}.bg-arcticBlue-600{--tw-bg-opacity: 1;background-color:rgb(31 134 195 / var(--tw-bg-opacity))}.bg-arcticBlue-700{--tw-bg-opacity: 1;background-color:rgb(22 105 155 / var(--tw-bg-opacity))}.bg-arcticBlue-900{--tw-bg-opacity: 1;background-color:rgb(8 45 67 / var(--tw-bg-opacity))}.bg-arcticBlue-900\/90{background-color:#082d43e6}.bg-auroraTeal-500{--tw-bg-opacity: 1;background-color:rgb(56 198 204 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(227 242 253 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(33 150 243 / var(--tw-bg-opacity))}.bg-blue-500\/10{background-color:#2196f31a}.bg-blue-500\/20{background-color:#2196f333}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(30 136 229 / var(--tw-bg-opacity))}.bg-blue-gray-100{--tw-bg-opacity: 1;background-color:rgb(207 216 220 / var(--tw-bg-opacity))}.bg-blue-gray-50{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.bg-blue-gray-50\/40{background-color:#eceff166}.bg-blue-gray-50\/50{background-color:#eceff180}.bg-blue-gray-50\/60{background-color:#eceff199}.bg-blue-gray-500{--tw-bg-opacity: 1;background-color:rgb(96 125 139 / var(--tw-bg-opacity))}.bg-blue-gray-500\/10{background-color:#607d8b1a}.bg-blue-gray-500\/20{background-color:#607d8b33}.bg-blue-gray-500\/80{background-color:#607d8bcc}.bg-brown-500{--tw-bg-opacity: 1;background-color:rgb(121 85 72 / var(--tw-bg-opacity))}.bg-brown-500\/10{background-color:#7955481a}.bg-brown-500\/20{background-color:#79554833}.bg-citrusPunch-500{--tw-bg-opacity: 1;background-color:rgb(255 214 51 / var(--tw-bg-opacity))}.bg-citrusPunch-600\/80{background-color:#e6bd00cc}.bg-copperRust-500{--tw-bg-opacity: 1;background-color:rgb(141 77 85 / var(--tw-bg-opacity))}.bg-copperRust-600\/80{background-color:#7a444bcc}.bg-current{background-color:currentColor}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(0 188 212 / var(--tw-bg-opacity))}.bg-cyan-500\/10{background-color:#00bcd41a}.bg-cyan-500\/20{background-color:#00bcd433}.bg-cyan-900\/30{background-color:#0060644d}.bg-deep-orange-500{--tw-bg-opacity: 1;background-color:rgb(255 87 34 / var(--tw-bg-opacity))}.bg-deep-orange-500\/10{background-color:#ff57221a}.bg-deep-orange-500\/20{background-color:#ff572233}.bg-deep-purple-500{--tw-bg-opacity: 1;background-color:rgb(103 58 183 / var(--tw-bg-opacity))}.bg-deep-purple-500\/10{background-color:#673ab71a}.bg-deep-purple-500\/20{background-color:#673ab733}.bg-emeraldMist-500{--tw-bg-opacity: 1;background-color:rgb(63 181 134 / var(--tw-bg-opacity))}.bg-emeraldMist-500\/80{background-color:#3fb586cc}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(224 224 224 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(158 158 158 / var(--tw-bg-opacity))}.bg-gray-800\/60{background-color:#42424299}.bg-gray-800\/70{background-color:#424242b3}.bg-gray-800\/80{background-color:#424242cc}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity))}.bg-gray-900\/10{background-color:#2121211a}.bg-gray-900\/40{background-color:#21212166}.bg-gray-900\/75{background-color:#212121bf}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/20{background-color:#22c55e33}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(63 81 181 / var(--tw-bg-opacity))}.bg-indigo-500\/10{background-color:#3f51b51a}.bg-indigo-500\/20{background-color:#3f51b533}.bg-indigo-600\/80{background-color:#3949abcc}.bg-lavenderSmoke-500{--tw-bg-opacity: 1;background-color:rgb(150 112 184 / var(--tw-bg-opacity))}.bg-lavenderSmoke-600\/80{background-color:#7a5894cc}.bg-light-blue-500{--tw-bg-opacity: 1;background-color:rgb(3 169 244 / var(--tw-bg-opacity))}.bg-light-blue-500\/10{background-color:#03a9f41a}.bg-light-blue-500\/20{background-color:#03a9f433}.bg-light-green-500{--tw-bg-opacity: 1;background-color:rgb(139 195 74 / var(--tw-bg-opacity))}.bg-light-green-500\/10{background-color:#8bc34a1a}.bg-light-green-500\/20{background-color:#8bc34a33}.bg-lime-500{--tw-bg-opacity: 1;background-color:rgb(205 220 57 / var(--tw-bg-opacity))}.bg-lime-500\/10{background-color:#cddc391a}.bg-lime-500\/20{background-color:#cddc3933}.bg-mintTea-400{--tw-bg-opacity: 1;background-color:rgb(102 207 201 / var(--tw-bg-opacity))}.bg-mossGreen-400{--tw-bg-opacity: 1;background-color:rgb(140 197 111 / var(--tw-bg-opacity))}.bg-mossGreen-500{--tw-bg-opacity: 1;background-color:rgb(96 178 64 / var(--tw-bg-opacity))}.bg-mossGreen-600{--tw-bg-opacity: 1;background-color:rgb(77 143 51 / var(--tw-bg-opacity))}.bg-mossGreen-800{--tw-bg-opacity: 1;background-color:rgb(42 73 29 / var(--tw-bg-opacity))}.bg-mossGreen-900\/90{background-color:#1c3012e6}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity))}.bg-orange-500\/10{background-color:#f973161a}.bg-orange-500\/20{background-color:#f9731633}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(233 30 99 / var(--tw-bg-opacity))}.bg-pink-500\/10{background-color:#e91e631a}.bg-pink-500\/20{background-color:#e91e6333}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(156 39 176 / var(--tw-bg-opacity))}.bg-purple-500\/10{background-color:#9c27b01a}.bg-purple-500\/20{background-color:#9c27b033}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(255 235 238 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(244 67 54 / var(--tw-bg-opacity))}.bg-red-500\/10{background-color:#f443361a}.bg-red-500\/20{background-color:#f4433633}.bg-roseQuartz-500{--tw-bg-opacity: 1;background-color:rgb(212 91 137 / var(--tw-bg-opacity))}.bg-stormGrey-200\/20{background-color:#d9dce233}.bg-stormGrey-700{--tw-bg-opacity: 1;background-color:rgb(62 68 86 / var(--tw-bg-opacity))}.bg-stormGrey-700\/60{background-color:#3e445699}.bg-sunsetCoral-400{--tw-bg-opacity: 1;background-color:rgb(255 145 137 / var(--tw-bg-opacity))}.bg-sunsetCoral-500{--tw-bg-opacity: 1;background-color:rgb(255 106 93 / var(--tw-bg-opacity))}.bg-sunsetCoral-600{--tw-bg-opacity: 1;background-color:rgb(230 80 72 / var(--tw-bg-opacity))}.bg-sunsetCoral-600\/80{background-color:#e65048cc}.bg-sunsetCoral-900\/20{background-color:#5c1c1a33}.bg-sunsetCoral-900\/40{background-color:#5c1c1a66}.bg-sunsetCoral-900\/90{background-color:#5c1c1ae6}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(0 150 136 / var(--tw-bg-opacity))}.bg-teal-500\/10{background-color:#0096881a}.bg-teal-500\/20{background-color:#00968833}.bg-transparent{background-color:transparent}.bg-warmAmberGlow-400{--tw-bg-opacity: 1;background-color:rgb(255 173 77 / var(--tw-bg-opacity))}.bg-warmAmberGlow-700{--tw-bg-opacity: 1;background-color:rgb(179 90 0 / var(--tw-bg-opacity))}.bg-warmAmberGlow-900\/90{background-color:#4d2600e6}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/50{background-color:#ffffff80}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(255 235 59 / var(--tw-bg-opacity))}.bg-yellow-500\/10{background-color:#ffeb3b1a}.bg-yellow-500\/20{background-color:#ffeb3b33}.bg-opacity-60{--tw-bg-opacity: .6}.bg-opacity-80{--tw-bg-opacity: .8}.bg-\[url\(\'\/img\/background-image\.png\'\)\]{background-image:url(/img/background-image.png)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-amber-600{--tw-gradient-from: #ffb300 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 179 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-black{--tw-gradient-from: #000000 var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #1e88e5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 136 229 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-gray-600{--tw-gradient-from: #546e7a var(--tw-gradient-from-position);--tw-gradient-to: rgb(84 110 122 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-gray-800{--tw-gradient-from: #37474f var(--tw-gradient-from-position);--tw-gradient-to: rgb(55 71 79 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-brown-600{--tw-gradient-from: #6d4c41 var(--tw-gradient-from-position);--tw-gradient-to: rgb(109 76 65 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-600{--tw-gradient-from: #00acc1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 172 193 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-deep-orange-600{--tw-gradient-from: #f4511e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 81 30 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-deep-purple-600{--tw-gradient-from: #5e35b1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(94 53 177 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-600{--tw-gradient-from: #757575 var(--tw-gradient-from-position);--tw-gradient-to: rgb(117 117 117 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-800{--tw-gradient-from: #424242 var(--tw-gradient-from-position);--tw-gradient-to: rgb(66 66 66 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-900{--tw-gradient-from: #212121 var(--tw-gradient-from-position);--tw-gradient-to: rgb(33 33 33 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-400{--tw-gradient-from: #4ade80 var(--tw-gradient-from-position);--tw-gradient-to: rgb(74 222 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-600{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-600{--tw-gradient-from: #3949ab var(--tw-gradient-from-position);--tw-gradient-to: rgb(57 73 171 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-light-blue-600{--tw-gradient-from: #039be5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(3 155 229 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-light-green-600{--tw-gradient-from: #7cb342 var(--tw-gradient-from-position);--tw-gradient-to: rgb(124 179 66 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-lime-600{--tw-gradient-from: #c0ca33 var(--tw-gradient-from-position);--tw-gradient-to: rgb(192 202 51 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-400{--tw-gradient-from: #fb923c var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-600{--tw-gradient-from: #ea580c var(--tw-gradient-from-position);--tw-gradient-to: rgb(234 88 12 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-pink-400{--tw-gradient-from: #ec407a var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 64 122 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-pink-600{--tw-gradient-from: #d81b60 var(--tw-gradient-from-position);--tw-gradient-to: rgb(216 27 96 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-600{--tw-gradient-from: #8e24aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(142 36 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-400{--tw-gradient-from: #ef5350 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 83 80 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-600{--tw-gradient-from: #e53935 var(--tw-gradient-from-position);--tw-gradient-to: rgb(229 57 53 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-600{--tw-gradient-from: #00897b var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 137 123 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-600{--tw-gradient-from: #fdd835 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 216 53 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-amber-400{--tw-gradient-to: #ffca28 var(--tw-gradient-to-position)}.to-black{--tw-gradient-to: #000000 var(--tw-gradient-to-position)}.to-blue-400{--tw-gradient-to: #42a5f5 var(--tw-gradient-to-position)}.to-blue-gray-400{--tw-gradient-to: #78909c var(--tw-gradient-to-position)}.to-blue-gray-900{--tw-gradient-to: #263238 var(--tw-gradient-to-position)}.to-brown-400{--tw-gradient-to: #8d6e63 var(--tw-gradient-to-position)}.to-cyan-400{--tw-gradient-to: #26c6da var(--tw-gradient-to-position)}.to-deep-orange-400{--tw-gradient-to: #ff7043 var(--tw-gradient-to-position)}.to-deep-purple-400{--tw-gradient-to: #7e57c2 var(--tw-gradient-to-position)}.to-gray-400{--tw-gradient-to: #bdbdbd var(--tw-gradient-to-position)}.to-gray-800{--tw-gradient-to: #424242 var(--tw-gradient-to-position)}.to-gray-900{--tw-gradient-to: #212121 var(--tw-gradient-to-position)}.to-green-400{--tw-gradient-to: #4ade80 var(--tw-gradient-to-position)}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position)}.to-indigo-400{--tw-gradient-to: #5c6bc0 var(--tw-gradient-to-position)}.to-light-blue-400{--tw-gradient-to: #29b6f6 var(--tw-gradient-to-position)}.to-light-green-400{--tw-gradient-to: #9ccc65 var(--tw-gradient-to-position)}.to-lime-400{--tw-gradient-to: #d4e157 var(--tw-gradient-to-position)}.to-orange-400{--tw-gradient-to: #fb923c var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-pink-400{--tw-gradient-to: #ec407a var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to: #d81b60 var(--tw-gradient-to-position)}.to-purple-400{--tw-gradient-to: #ab47bc var(--tw-gradient-to-position)}.to-red-400{--tw-gradient-to: #ef5350 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to: #e53935 var(--tw-gradient-to-position)}.to-teal-400{--tw-gradient-to: #26a69a var(--tw-gradient-to-position)}.to-yellow-400{--tw-gradient-to: #ffee58 var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-clip-border{background-clip:border-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.px-px{padding-left:1px;padding-right:1px}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.\!pr-7{padding-right:1.75rem!important}.\!pr-9{padding-right:2.25rem!important}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-6{padding-bottom:1.5rem}.pl-5{padding-left:1.25rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-8{padding-top:2rem}.pt-\[9px\]{padding-top:9px}.pt-px{padding-top:1px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-sans{font-family:Roboto,sans-serif}.\!text-\[11px\]{font-size:11px!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.\!leading-tight{line-height:1.25!important}.leading-5{line-height:1.25rem}.leading-\[1\.3\]{line-height:1.3}.leading-\[3\.75\]{line-height:3.75}.leading-\[4\.1\]{line-height:4.1}.leading-\[4\.25\]{line-height:4.25}.leading-\[4\.875\]{line-height:4.875}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-normal{letter-spacing:0em}.tracking-wide{letter-spacing:.025em}.\!text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity))!important}.\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.text-amber-200{--tw-text-opacity: 1;color:rgb(255 224 130 / var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity: 1;color:rgb(255 193 7 / var(--tw-text-opacity))}.text-amber-600{--tw-text-opacity: 1;color:rgb(255 179 0 / var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity: 1;color:rgb(255 160 0 / var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity: 1;color:rgb(255 143 0 / var(--tw-text-opacity))}.text-amber-900{--tw-text-opacity: 1;color:rgb(255 111 0 / var(--tw-text-opacity))}.text-arcticBlue-100{--tw-text-opacity: 1;color:rgb(230 243 251 / var(--tw-text-opacity))}.text-arcticBlue-400{--tw-text-opacity: 1;color:rgb(102 182 231 / var(--tw-text-opacity))}.text-arcticBlue-500{--tw-text-opacity: 1;color:rgb(51 158 222 / var(--tw-text-opacity))}.text-arcticBlue-700{--tw-text-opacity: 1;color:rgb(22 105 155 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-300{--tw-text-opacity: 1;color:rgb(100 181 246 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(33 150 243 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(30 136 229 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(25 118 210 / var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity: 1;color:rgb(21 101 192 / var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity: 1;color:rgb(13 71 161 / var(--tw-text-opacity))}.text-blue-gray-200{--tw-text-opacity: 1;color:rgb(176 190 197 / var(--tw-text-opacity))}.text-blue-gray-300{--tw-text-opacity: 1;color:rgb(144 164 174 / var(--tw-text-opacity))}.text-blue-gray-400{--tw-text-opacity: 1;color:rgb(120 144 156 / var(--tw-text-opacity))}.text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.text-blue-gray-600{--tw-text-opacity: 1;color:rgb(84 110 122 / var(--tw-text-opacity))}.text-blue-gray-700{--tw-text-opacity: 1;color:rgb(69 90 100 / var(--tw-text-opacity))}.text-blue-gray-800{--tw-text-opacity: 1;color:rgb(55 71 79 / var(--tw-text-opacity))}.text-blue-gray-900{--tw-text-opacity: 1;color:rgb(38 50 56 / var(--tw-text-opacity))}.text-brown-500{--tw-text-opacity: 1;color:rgb(121 85 72 / var(--tw-text-opacity))}.text-brown-700{--tw-text-opacity: 1;color:rgb(93 64 55 / var(--tw-text-opacity))}.text-brown-900{--tw-text-opacity: 1;color:rgb(62 39 35 / var(--tw-text-opacity))}.text-current{color:currentColor}.text-cyan-500{--tw-text-opacity: 1;color:rgb(0 188 212 / var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(0 151 167 / var(--tw-text-opacity))}.text-cyan-900{--tw-text-opacity: 1;color:rgb(0 96 100 / var(--tw-text-opacity))}.text-deep-orange-500{--tw-text-opacity: 1;color:rgb(255 87 34 / var(--tw-text-opacity))}.text-deep-orange-700{--tw-text-opacity: 1;color:rgb(230 74 25 / var(--tw-text-opacity))}.text-deep-orange-900{--tw-text-opacity: 1;color:rgb(191 54 12 / var(--tw-text-opacity))}.text-deep-purple-500{--tw-text-opacity: 1;color:rgb(103 58 183 / var(--tw-text-opacity))}.text-deep-purple-700{--tw-text-opacity: 1;color:rgb(81 45 168 / var(--tw-text-opacity))}.text-deep-purple-900{--tw-text-opacity: 1;color:rgb(49 27 146 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(245 245 245 / var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(224 224 224 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(189 189 189 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(158 158 158 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(97 97 97 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(33 33 33 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(63 81 181 / var(--tw-text-opacity))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(48 63 159 / var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity: 1;color:rgb(26 35 126 / var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lavenderSmoke-200{--tw-text-opacity: 1;color:rgb(236 226 243 / var(--tw-text-opacity))}.text-lavenderSmoke-700{--tw-text-opacity: 1;color:rgb(93 67 115 / var(--tw-text-opacity))}.text-light-blue-500{--tw-text-opacity: 1;color:rgb(3 169 244 / var(--tw-text-opacity))}.text-light-blue-700{--tw-text-opacity: 1;color:rgb(2 136 209 / var(--tw-text-opacity))}.text-light-blue-900{--tw-text-opacity: 1;color:rgb(1 87 155 / var(--tw-text-opacity))}.text-light-green-500{--tw-text-opacity: 1;color:rgb(139 195 74 / var(--tw-text-opacity))}.text-light-green-700{--tw-text-opacity: 1;color:rgb(104 159 56 / var(--tw-text-opacity))}.text-light-green-900{--tw-text-opacity: 1;color:rgb(51 105 30 / var(--tw-text-opacity))}.text-lime-500{--tw-text-opacity: 1;color:rgb(205 220 57 / var(--tw-text-opacity))}.text-lime-700{--tw-text-opacity: 1;color:rgb(175 180 43 / var(--tw-text-opacity))}.text-lime-900{--tw-text-opacity: 1;color:rgb(130 119 23 / var(--tw-text-opacity))}.text-mossGreen-100{--tw-text-opacity: 1;color:rgb(235 245 229 / var(--tw-text-opacity))}.text-mossGreen-500{--tw-text-opacity: 1;color:rgb(96 178 64 / var(--tw-text-opacity))}.text-mossGreen-600{--tw-text-opacity: 1;color:rgb(77 143 51 / var(--tw-text-opacity))}.text-mossGreen-700{--tw-text-opacity: 1;color:rgb(59 107 39 / var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity: 1;color:rgb(233 30 99 / var(--tw-text-opacity))}.text-pink-700{--tw-text-opacity: 1;color:rgb(194 24 91 / var(--tw-text-opacity))}.text-pink-900{--tw-text-opacity: 1;color:rgb(136 14 79 / var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity: 1;color:rgb(156 39 176 / var(--tw-text-opacity))}.text-purple-700{--tw-text-opacity: 1;color:rgb(123 31 162 / var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity: 1;color:rgb(74 20 140 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(239 83 80 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(244 67 54 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(229 57 53 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(211 47 47 / var(--tw-text-opacity))}.text-red-800{--tw-text-opacity: 1;color:rgb(198 40 40 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity: 1;color:rgb(183 28 28 / var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity))}.text-stormGrey-300{--tw-text-opacity: 1;color:rgb(182 187 200 / var(--tw-text-opacity))}.text-stormGrey-400{--tw-text-opacity: 1;color:rgb(139 145 164 / var(--tw-text-opacity))}.text-stormGrey-500{--tw-text-opacity: 1;color:rgb(96 103 128 / var(--tw-text-opacity))}.text-stormGrey-600{--tw-text-opacity: 1;color:rgb(79 85 107 / var(--tw-text-opacity))}.text-stormGrey-700{--tw-text-opacity: 1;color:rgb(62 68 86 / var(--tw-text-opacity))}.text-stormGrey-900{--tw-text-opacity: 1;color:rgb(27 30 41 / var(--tw-text-opacity))}.text-sunsetCoral-500{--tw-text-opacity: 1;color:rgb(255 106 93 / var(--tw-text-opacity))}.text-sunsetCoral-600{--tw-text-opacity: 1;color:rgb(230 80 72 / var(--tw-text-opacity))}.text-sunsetCoral-700{--tw-text-opacity: 1;color:rgb(185 61 56 / var(--tw-text-opacity))}.text-sunsetCoral-800{--tw-text-opacity: 1;color:rgb(138 44 40 / var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity: 1;color:rgb(0 150 136 / var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity: 1;color:rgb(0 121 107 / var(--tw-text-opacity))}.text-teal-900{--tw-text-opacity: 1;color:rgb(0 77 64 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-warmAmberGlow-500{--tw-text-opacity: 1;color:rgb(255 143 0 / var(--tw-text-opacity))}.text-warmAmberGlow-600{--tw-text-opacity: 1;color:rgb(230 118 0 / var(--tw-text-opacity))}.text-warmAmberGlow-700{--tw-text-opacity: 1;color:rgb(179 90 0 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-white\/60{color:#fff9}.text-white\/80{color:#fffc}.text-yellow-500{--tw-text-opacity: 1;color:rgb(255 235 59 / var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(251 192 45 / var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity: 1;color:rgb(245 127 23 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 rgb(0, 0 / 0, 0);--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-amber-500\/20{--tw-shadow-color: rgb(255 193 7 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-amber-500\/40{--tw-shadow-color: rgb(255 193 7 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-500\/20{--tw-shadow-color: rgb(33 150 243 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-500\/40{--tw-shadow-color: rgb(33 150 243 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-500\/10{--tw-shadow-color: rgb(96 125 139 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-500\/20{--tw-shadow-color: rgb(96 125 139 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-500\/25{--tw-shadow-color: rgb(96 125 139 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-500\/40{--tw-shadow-color: rgb(96 125 139 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-500\/5{--tw-shadow-color: rgb(96 125 139 / .05);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-gray-900\/10{--tw-shadow-color: rgb(38 50 56 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-brown-500\/20{--tw-shadow-color: rgb(121 85 72 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-brown-500\/40{--tw-shadow-color: rgb(121 85 72 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-500\/20{--tw-shadow-color: rgb(0 188 212 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-500\/40{--tw-shadow-color: rgb(0 188 212 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-deep-orange-500\/20{--tw-shadow-color: rgb(255 87 34 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-deep-orange-500\/40{--tw-shadow-color: rgb(255 87 34 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-deep-purple-500\/20{--tw-shadow-color: rgb(103 58 183 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-deep-purple-500\/40{--tw-shadow-color: rgb(103 58 183 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-gray-900\/10{--tw-shadow-color: rgb(33 33 33 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-gray-900\/20{--tw-shadow-color: rgb(33 33 33 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-green-500\/20{--tw-shadow-color: rgb(34 197 94 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-green-500\/40{--tw-shadow-color: rgb(34 197 94 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-indigo-500\/20{--tw-shadow-color: rgb(63 81 181 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-indigo-500\/40{--tw-shadow-color: rgb(63 81 181 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-light-blue-500\/20{--tw-shadow-color: rgb(3 169 244 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-light-blue-500\/40{--tw-shadow-color: rgb(3 169 244 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-light-green-500\/20{--tw-shadow-color: rgb(139 195 74 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-light-green-500\/40{--tw-shadow-color: rgb(139 195 74 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-lime-500\/20{--tw-shadow-color: rgb(205 220 57 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-lime-500\/40{--tw-shadow-color: rgb(205 220 57 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-orange-500\/20{--tw-shadow-color: rgb(249 115 22 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-orange-500\/40{--tw-shadow-color: rgb(249 115 22 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-pink-500\/20{--tw-shadow-color: rgb(233 30 99 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-pink-500\/40{--tw-shadow-color: rgb(233 30 99 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-purple-500\/20{--tw-shadow-color: rgb(156 39 176 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-purple-500\/40{--tw-shadow-color: rgb(156 39 176 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-red-500\/20{--tw-shadow-color: rgb(244 67 54 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-red-500\/40{--tw-shadow-color: rgb(244 67 54 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-teal-500\/20{--tw-shadow-color: rgb(0 150 136 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-teal-500\/40{--tw-shadow-color: rgb(0 150 136 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-yellow-500\/20{--tw-shadow-color: rgb(255 235 59 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-yellow-500\/40{--tw-shadow-color: rgb(255 235 59 / .4);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-0{outline-width:0px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-purple-500\/40{--tw-ring-color: rgb(156 39 176 / .4)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-2xl{--tw-backdrop-blur: blur(40px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-saturate-200{--tw-backdrop-saturate: saturate(2);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.content-\[\'\'\]{--tw-content: "";content:var(--tw-content)}.\[-webkit-appearance\:none\]{-webkit-appearance:none}.file\:mr-4::file-selector-button{margin-right:1rem}.file\:rounded-md::file-selector-button{border-radius:.375rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-blue-gray-50::file-selector-button{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.file\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.file\:py-2::file-selector-button{padding-top:.5rem;padding-bottom:.5rem}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-semibold::file-selector-button{font-weight:600}.file\:text-blue-gray-700::file-selector-button{--tw-text-opacity: 1;color:rgb(69 90 100 / var(--tw-text-opacity))}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:left-2\/4:before{content:var(--tw-content);left:50%}.before\:top-2\/4:before{content:var(--tw-content);top:50%}.before\:mr-1:before{content:var(--tw-content);margin-right:.25rem}.before\:mt-\[6\.5px\]:before{content:var(--tw-content);margin-top:6.5px}.before\:box-border:before{content:var(--tw-content);box-sizing:border-box}.before\:block:before{content:var(--tw-content);display:block}.before\:h-1:before{content:var(--tw-content);height:.25rem}.before\:h-1\.5:before{content:var(--tw-content);height:.375rem}.before\:h-10:before{content:var(--tw-content);height:2.5rem}.before\:h-12:before{content:var(--tw-content);height:3rem}.before\:w-10:before{content:var(--tw-content);width:2.5rem}.before\:w-12:before{content:var(--tw-content);width:3rem}.before\:w-2:before{content:var(--tw-content);width:.5rem}.before\:w-2\.5:before{content:var(--tw-content);width:.625rem}.before\:-translate-x-2\/4:before{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:-translate-y-2\/4:before{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:rounded-tl-md:before{content:var(--tw-content);border-top-left-radius:.375rem}.before\:border-l:before{content:var(--tw-content);border-left-width:1px}.before\:border-l-2:before{content:var(--tw-content);border-left-width:2px}.before\:border-t:before{content:var(--tw-content);border-top-width:1px}.before\:border-t-2:before{content:var(--tw-content);border-top-width:2px}.before\:\!border-blue-gray-200:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(176 190 197 / var(--tw-border-opacity))!important}.before\:border-amber-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.before\:border-black:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.before\:border-blue-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.before\:border-blue-gray-200:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(176 190 197 / var(--tw-border-opacity))}.before\:border-blue-gray-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.before\:border-brown-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.before\:border-cyan-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.before\:border-deep-orange-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.before\:border-deep-purple-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.before\:border-gray-900:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.before\:border-green-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.before\:border-indigo-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.before\:border-light-blue-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.before\:border-light-green-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.before\:border-lime-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.before\:border-orange-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.before\:border-pink-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.before\:border-purple-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.before\:border-red-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.before\:border-teal-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.before\:border-transparent:before{content:var(--tw-content);border-color:transparent}.before\:border-white:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.before\:border-yellow-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.before\:border-l-transparent:before{content:var(--tw-content);border-left-color:transparent}.before\:border-t-transparent:before{content:var(--tw-content);border-top-color:transparent}.before\:bg-blue-gray-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(96 125 139 / var(--tw-bg-opacity))}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:transition-all:before{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.before\:transition-opacity:before{content:var(--tw-content);transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.before\:content-none:before{--tw-content: none;content:var(--tw-content)}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-bottom-0:after{content:var(--tw-content);bottom:-0px}.after\:-bottom-1:after{content:var(--tw-content);bottom:-.25rem}.after\:-bottom-1\.5:after{content:var(--tw-content);bottom:-.375rem}.after\:-bottom-2:after{content:var(--tw-content);bottom:-.5rem}.after\:-bottom-2\.5:after{content:var(--tw-content);bottom:-.625rem}.after\:-bottom-6:after{content:var(--tw-content);bottom:-1.5rem}.after\:left-2\/4:after{content:var(--tw-content);left:50%}.after\:ml-1:after{content:var(--tw-content);margin-left:.25rem}.after\:mt-\[6\.5px\]:after{content:var(--tw-content);margin-top:6.5px}.after\:box-border:after{content:var(--tw-content);box-sizing:border-box}.after\:block:after{content:var(--tw-content);display:block}.after\:h-0:after{content:var(--tw-content);height:0px}.after\:h-1:after{content:var(--tw-content);height:.25rem}.after\:h-1\.5:after{content:var(--tw-content);height:.375rem}.after\:h-4\/6:after{content:var(--tw-content);height:66.666667%}.after\:w-0:after{content:var(--tw-content);width:0px}.after\:w-0\.5:after{content:var(--tw-content);width:.125rem}.after\:w-2:after{content:var(--tw-content);width:.5rem}.after\:w-2\.5:after{content:var(--tw-content);width:.625rem}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:flex-grow:after{content:var(--tw-content);flex-grow:1}.after\:-translate-x-2\/4:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:scale-x-0:after{content:var(--tw-content);--tw-scale-x: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:scale-x-100:after{content:var(--tw-content);--tw-scale-x: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-tr-md:after{content:var(--tw-content);border-top-right-radius:.375rem}.after\:border-b-2:after{content:var(--tw-content);border-bottom-width:2px}.after\:border-r:after{content:var(--tw-content);border-right-width:1px}.after\:border-r-2:after{content:var(--tw-content);border-right-width:2px}.after\:border-t:after{content:var(--tw-content);border-top-width:1px}.after\:border-t-2:after{content:var(--tw-content);border-top-width:2px}.after\:\!border-blue-gray-200:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(176 190 197 / var(--tw-border-opacity))!important}.after\:border-amber-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.after\:border-black:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.after\:border-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.after\:border-blue-gray-200:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(176 190 197 / var(--tw-border-opacity))}.after\:border-blue-gray-50:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(236 239 241 / var(--tw-border-opacity))}.after\:border-blue-gray-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.after\:border-brown-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.after\:border-cyan-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.after\:border-deep-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.after\:border-deep-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.after\:border-gray-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(158 158 158 / var(--tw-border-opacity))}.after\:border-gray-900:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.after\:border-green-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.after\:border-indigo-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.after\:border-light-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.after\:border-light-green-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.after\:border-lime-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.after\:border-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.after\:border-pink-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.after\:border-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.after\:border-red-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.after\:border-teal-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.after\:border-yellow-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.after\:border-r-transparent:after{content:var(--tw-content);border-right-color:transparent}.after\:border-t-transparent:after{content:var(--tw-content);border-top-color:transparent}.after\:bg-blue-gray-50:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:transition-transform:after{content:var(--tw-content);transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.after\:content-none:after{--tw-content: none;content:var(--tw-content)}.last\:mb-0:last-child{margin-bottom:0}.checked\:border-amber-500:checked{--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.checked\:border-blue-500:checked{--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.checked\:border-blue-gray-500:checked{--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.checked\:border-brown-500:checked{--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.checked\:border-cyan-500:checked{--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.checked\:border-deep-orange-500:checked{--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.checked\:border-deep-purple-500:checked{--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.checked\:border-gray-900:checked{--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.checked\:border-green-500:checked{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.checked\:border-indigo-500:checked{--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.checked\:border-light-blue-500:checked{--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.checked\:border-light-green-500:checked{--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.checked\:border-lime-500:checked{--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.checked\:border-orange-500:checked{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.checked\:border-pink-500:checked{--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.checked\:border-purple-500:checked{--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.checked\:border-red-500:checked{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.checked\:border-teal-500:checked{--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.checked\:border-yellow-500:checked{--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.checked\:bg-amber-500:checked{--tw-bg-opacity: 1;background-color:rgb(255 193 7 / var(--tw-bg-opacity))}.checked\:bg-blue-500:checked{--tw-bg-opacity: 1;background-color:rgb(33 150 243 / var(--tw-bg-opacity))}.checked\:bg-blue-gray-500:checked{--tw-bg-opacity: 1;background-color:rgb(96 125 139 / var(--tw-bg-opacity))}.checked\:bg-brown-500:checked{--tw-bg-opacity: 1;background-color:rgb(121 85 72 / var(--tw-bg-opacity))}.checked\:bg-cyan-500:checked{--tw-bg-opacity: 1;background-color:rgb(0 188 212 / var(--tw-bg-opacity))}.checked\:bg-deep-orange-500:checked{--tw-bg-opacity: 1;background-color:rgb(255 87 34 / var(--tw-bg-opacity))}.checked\:bg-deep-purple-500:checked{--tw-bg-opacity: 1;background-color:rgb(103 58 183 / var(--tw-bg-opacity))}.checked\:bg-gray-900:checked{--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity))}.checked\:bg-green-500:checked{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.checked\:bg-indigo-500:checked{--tw-bg-opacity: 1;background-color:rgb(63 81 181 / var(--tw-bg-opacity))}.checked\:bg-light-blue-500:checked{--tw-bg-opacity: 1;background-color:rgb(3 169 244 / var(--tw-bg-opacity))}.checked\:bg-light-green-500:checked{--tw-bg-opacity: 1;background-color:rgb(139 195 74 / var(--tw-bg-opacity))}.checked\:bg-lime-500:checked{--tw-bg-opacity: 1;background-color:rgb(205 220 57 / var(--tw-bg-opacity))}.checked\:bg-orange-500:checked{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity))}.checked\:bg-pink-500:checked{--tw-bg-opacity: 1;background-color:rgb(233 30 99 / var(--tw-bg-opacity))}.checked\:bg-purple-500:checked{--tw-bg-opacity: 1;background-color:rgb(156 39 176 / var(--tw-bg-opacity))}.checked\:bg-red-500:checked{--tw-bg-opacity: 1;background-color:rgb(244 67 54 / var(--tw-bg-opacity))}.checked\:bg-teal-500:checked{--tw-bg-opacity: 1;background-color:rgb(0 150 136 / var(--tw-bg-opacity))}.checked\:bg-yellow-500:checked{--tw-bg-opacity: 1;background-color:rgb(255 235 59 / var(--tw-bg-opacity))}.checked\:before\:bg-amber-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 193 7 / var(--tw-bg-opacity))}.checked\:before\:bg-blue-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(33 150 243 / var(--tw-bg-opacity))}.checked\:before\:bg-blue-gray-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(96 125 139 / var(--tw-bg-opacity))}.checked\:before\:bg-brown-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(121 85 72 / var(--tw-bg-opacity))}.checked\:before\:bg-cyan-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 188 212 / var(--tw-bg-opacity))}.checked\:before\:bg-deep-orange-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 87 34 / var(--tw-bg-opacity))}.checked\:before\:bg-deep-purple-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(103 58 183 / var(--tw-bg-opacity))}.checked\:before\:bg-gray-900:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity))}.checked\:before\:bg-green-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.checked\:before\:bg-indigo-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(63 81 181 / var(--tw-bg-opacity))}.checked\:before\:bg-light-blue-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(3 169 244 / var(--tw-bg-opacity))}.checked\:before\:bg-light-green-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(139 195 74 / var(--tw-bg-opacity))}.checked\:before\:bg-lime-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(205 220 57 / var(--tw-bg-opacity))}.checked\:before\:bg-orange-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity))}.checked\:before\:bg-pink-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(233 30 99 / var(--tw-bg-opacity))}.checked\:before\:bg-purple-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(156 39 176 / var(--tw-bg-opacity))}.checked\:before\:bg-red-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(244 67 54 / var(--tw-bg-opacity))}.checked\:before\:bg-teal-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 150 136 / var(--tw-bg-opacity))}.checked\:before\:bg-yellow-500:checked:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 235 59 / var(--tw-bg-opacity))}.placeholder-shown\:border:-moz-placeholder-shown{border-width:1px}.placeholder-shown\:border:placeholder-shown{border-width:1px}.placeholder-shown\:border-blue-gray-200:-moz-placeholder-shown{--tw-border-opacity: 1;border-color:rgb(176 190 197 / var(--tw-border-opacity))}.placeholder-shown\:border-blue-gray-200:placeholder-shown{--tw-border-opacity: 1;border-color:rgb(176 190 197 / var(--tw-border-opacity))}.placeholder-shown\:border-green-500:-moz-placeholder-shown{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.placeholder-shown\:border-green-500:placeholder-shown{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.placeholder-shown\:border-red-500:-moz-placeholder-shown{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.placeholder-shown\:border-red-500:placeholder-shown{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.placeholder-shown\:border-t-blue-gray-200:-moz-placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(176 190 197 / var(--tw-border-opacity))}.placeholder-shown\:border-t-blue-gray-200:placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(176 190 197 / var(--tw-border-opacity))}.placeholder-shown\:border-t-green-500:-moz-placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(34 197 94 / var(--tw-border-opacity))}.placeholder-shown\:border-t-green-500:placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(34 197 94 / var(--tw-border-opacity))}.placeholder-shown\:border-t-red-500:-moz-placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(244 67 54 / var(--tw-border-opacity))}.placeholder-shown\:border-t-red-500:placeholder-shown{--tw-border-opacity: 1;border-top-color:rgb(244 67 54 / var(--tw-border-opacity))}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-slate-800:hover{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity))}.hover\:bg-amber-500\/10:hover{background-color:#ffc1071a}.hover\:bg-arcticBlue-600:hover{--tw-bg-opacity: 1;background-color:rgb(31 134 195 / var(--tw-bg-opacity))}.hover\:bg-arcticBlue-800:hover{--tw-bg-opacity: 1;background-color:rgb(15 75 111 / var(--tw-bg-opacity))}.hover\:bg-blue-500\/10:hover{background-color:#2196f31a}.hover\:bg-blue-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.hover\:bg-blue-gray-50\/60:hover{background-color:#eceff199}.hover\:bg-blue-gray-500\/10:hover{background-color:#607d8b1a}.hover\:bg-brown-500\/10:hover{background-color:#7955481a}.hover\:bg-citrusPunch-600\/90:hover{background-color:#e6bd00e6}.hover\:bg-copperRust-600\/90:hover{background-color:#7a444be6}.hover\:bg-cyan-500\/10:hover{background-color:#00bcd41a}.hover\:bg-deep-orange-500\/10:hover{background-color:#ff57221a}.hover\:bg-deep-purple-500\/10:hover{background-color:#673ab71a}.hover\:bg-emeraldMist-500\/90:hover{background-color:#3fb586e6}.hover\:bg-gray-900\/10:hover{background-color:#2121211a}.hover\:bg-green-500\/10:hover{background-color:#22c55e1a}.hover\:bg-indigo-500\/10:hover{background-color:#3f51b51a}.hover\:bg-indigo-600\/90:hover{background-color:#3949abe6}.hover\:bg-lavenderSmoke-600\/90:hover{background-color:#7a5894e6}.hover\:bg-light-blue-500\/10:hover{background-color:#03a9f41a}.hover\:bg-light-green-500\/10:hover{background-color:#8bc34a1a}.hover\:bg-lime-500\/10:hover{background-color:#cddc391a}.hover\:bg-orange-500\/10:hover{background-color:#f973161a}.hover\:bg-pink-500\/10:hover{background-color:#e91e631a}.hover\:bg-purple-500\/10:hover{background-color:#9c27b01a}.hover\:bg-red-500\/10:hover{background-color:#f443361a}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}.hover\:bg-sunsetCoral-600:hover{--tw-bg-opacity: 1;background-color:rgb(230 80 72 / var(--tw-bg-opacity))}.hover\:bg-sunsetCoral-600\/20:hover{background-color:#e6504833}.hover\:bg-sunsetCoral-600\/90:hover{background-color:#e65048e6}.hover\:bg-teal-500\/10:hover{background-color:#0096881a}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-yellow-500\/10:hover{background-color:#ffeb3b1a}.hover\:bg-opacity-80:hover{--tw-bg-opacity: .8}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(21 101 192 / var(--tw-text-opacity))}.hover\:text-blue-gray-500:hover{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.hover\:text-blue-gray-900:hover{--tw-text-opacity: 1;color:rgb(38 50 56 / var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(33 33 33 / var(--tw-text-opacity))}.hover\:text-light-blue-500:hover{--tw-text-opacity: 1;color:rgb(3 169 244 / var(--tw-text-opacity))}.hover\:text-warmAmberGlow-600:hover{--tw-text-opacity: 1;color:rgb(230 118 0 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:text-white\/90:hover{color:#ffffffe6}.hover\:opacity-75:hover{opacity:.75}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-amber-500\/40:hover{--tw-shadow-color: rgb(255 193 7 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-blue-500\/40:hover{--tw-shadow-color: rgb(33 150 243 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-blue-gray-500\/20:hover{--tw-shadow-color: rgb(96 125 139 / .2);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-blue-gray-500\/40:hover{--tw-shadow-color: rgb(96 125 139 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-brown-500\/40:hover{--tw-shadow-color: rgb(121 85 72 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-cyan-500\/40:hover{--tw-shadow-color: rgb(0 188 212 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-deep-orange-500\/40:hover{--tw-shadow-color: rgb(255 87 34 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-deep-purple-500\/40:hover{--tw-shadow-color: rgb(103 58 183 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-gray-900\/20:hover{--tw-shadow-color: rgb(33 33 33 / .2);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-green-500\/40:hover{--tw-shadow-color: rgb(34 197 94 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-indigo-500\/40:hover{--tw-shadow-color: rgb(63 81 181 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-light-blue-500\/40:hover{--tw-shadow-color: rgb(3 169 244 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-light-green-500\/40:hover{--tw-shadow-color: rgb(139 195 74 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-lime-500\/40:hover{--tw-shadow-color: rgb(205 220 57 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-orange-500\/40:hover{--tw-shadow-color: rgb(249 115 22 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-pink-500\/40:hover{--tw-shadow-color: rgb(233 30 99 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-purple-500\/40:hover{--tw-shadow-color: rgb(156 39 176 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-red-500\/40:hover{--tw-shadow-color: rgb(244 67 54 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-teal-500\/40:hover{--tw-shadow-color: rgb(0 150 136 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-yellow-500\/40:hover{--tw-shadow-color: rgb(255 235 59 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:file\:bg-blue-gray-100::file-selector-button:hover{--tw-bg-opacity: 1;background-color:rgb(207 216 220 / var(--tw-bg-opacity))}.hover\:before\:opacity-0:hover:before{content:var(--tw-content);opacity:0}.hover\:before\:opacity-10:hover:before{content:var(--tw-content);opacity:.1}.focus\:scale-110:focus{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.focus\:border-2:focus{border-width:2px}.focus\:border-amber-500:focus{--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.focus\:border-black:focus{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.focus\:border-blue-gray-500:focus{--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.focus\:border-blue-gray-900:focus{--tw-border-opacity: 1;border-color:rgb(38 50 56 / var(--tw-border-opacity))}.focus\:border-brown-500:focus{--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.focus\:border-deep-orange-500:focus{--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.focus\:border-deep-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.focus\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgb(158 158 158 / var(--tw-border-opacity))}.focus\:border-gray-900:focus{--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.focus\:border-green-500:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.focus\:border-light-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.focus\:border-light-green-500:focus{--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.focus\:border-lime-500:focus{--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.focus\:border-orange-500:focus{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.focus\:border-pink-500:focus{--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.focus\:border-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.focus\:border-slate-800:focus{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity))}.focus\:border-teal-500:focus{--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.focus\:border-white:focus{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.focus\:border-yellow-500:focus{--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.focus\:\!border-t-gray-900:focus{--tw-border-opacity: 1 !important;border-top-color:rgb(33 33 33 / var(--tw-border-opacity))!important}.focus\:border-t-transparent:focus{border-top-color:transparent}.focus\:bg-blue-gray-50:focus{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.focus\:bg-slate-800:focus{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}.focus\:bg-transparent:focus{background-color:transparent}.focus\:bg-opacity-80:focus{--tw-bg-opacity: .8}.focus\:text-blue-gray-500:focus{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.focus\:text-blue-gray-900:focus{--tw-text-opacity: 1;color:rgb(38 50 56 / var(--tw-text-opacity))}.focus\:text-white:focus{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.focus\:opacity-\[0\.85\]:focus{opacity:.85}.focus\:shadow-none:focus{--tw-shadow: 0 0 rgb(0, 0 / 0, 0);--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-0:focus{outline-width:0px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-amber-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 224 130 / var(--tw-ring-opacity))}.focus\:ring-arcticBlue-300:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(153 206 239 / var(--tw-ring-opacity))}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(144 202 249 / var(--tw-ring-opacity))}.focus\:ring-blue-gray-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(176 190 197 / var(--tw-ring-opacity))}.focus\:ring-brown-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(188 170 164 / var(--tw-ring-opacity))}.focus\:ring-citrusPunch-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 224 102 / var(--tw-ring-opacity))}.focus\:ring-copperRust-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(178 138 134 / var(--tw-ring-opacity))}.focus\:ring-cyan-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(128 222 234 / var(--tw-ring-opacity))}.focus\:ring-deep-orange-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 171 145 / var(--tw-ring-opacity))}.focus\:ring-deep-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(179 157 219 / var(--tw-ring-opacity))}.focus\:ring-emeraldMist-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(110 200 163 / var(--tw-ring-opacity))}.focus\:ring-gray-300:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(224 224 224 / var(--tw-ring-opacity))}.focus\:ring-green-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(187 247 208 / var(--tw-ring-opacity))}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(159 168 218 / var(--tw-ring-opacity))}.focus\:ring-indigo-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(92 107 192 / var(--tw-ring-opacity))}.focus\:ring-lavenderSmoke-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(184 138 207 / var(--tw-ring-opacity))}.focus\:ring-light-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(129 212 250 / var(--tw-ring-opacity))}.focus\:ring-light-green-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(197 225 165 / var(--tw-ring-opacity))}.focus\:ring-lime-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(230 238 156 / var(--tw-ring-opacity))}.focus\:ring-orange-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 215 170 / var(--tw-ring-opacity))}.focus\:ring-pink-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(244 143 177 / var(--tw-ring-opacity))}.focus\:ring-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(206 147 216 / var(--tw-ring-opacity))}.focus\:ring-purple-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(171 71 188 / var(--tw-ring-opacity))}.focus\:ring-red-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 154 154 / var(--tw-ring-opacity))}.focus\:ring-sunsetCoral-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 145 137 / var(--tw-ring-opacity))}.focus\:ring-teal-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(128 203 196 / var(--tw-ring-opacity))}.focus\:ring-white\/50:focus{--tw-ring-color: rgb(255 255 255 / .5)}.focus\:ring-yellow-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 245 157 / var(--tw-ring-opacity))}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(33 150 243 / var(--tw-ring-opacity))}.active\:scale-100:active{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:border-slate-800:active{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity))}.active\:bg-amber-500\/30:active{background-color:#ffc1074d}.active\:bg-blue-500\/30:active{background-color:#2196f34d}.active\:bg-blue-gray-50:active{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.active\:bg-blue-gray-500\/30:active{background-color:#607d8b4d}.active\:bg-brown-500\/30:active{background-color:#7955484d}.active\:bg-cyan-500\/30:active{background-color:#00bcd44d}.active\:bg-deep-orange-500\/30:active{background-color:#ff57224d}.active\:bg-deep-purple-500\/30:active{background-color:#673ab74d}.active\:bg-gray-900\/20:active{background-color:#21212133}.active\:bg-green-500\/30:active{background-color:#22c55e4d}.active\:bg-indigo-500\/30:active{background-color:#3f51b54d}.active\:bg-light-blue-500\/30:active{background-color:#03a9f44d}.active\:bg-light-green-500\/30:active{background-color:#8bc34a4d}.active\:bg-lime-500\/30:active{background-color:#cddc394d}.active\:bg-orange-500\/30:active{background-color:#f973164d}.active\:bg-pink-500\/30:active{background-color:#e91e634d}.active\:bg-purple-500\/30:active{background-color:#9c27b04d}.active\:bg-red-500\/30:active{background-color:#f443364d}.active\:bg-slate-800:active{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}.active\:bg-teal-500\/30:active{background-color:#0096884d}.active\:bg-transparent:active{background-color:transparent}.active\:bg-white\/30:active{background-color:#ffffff4d}.active\:bg-yellow-500\/30:active{background-color:#ffeb3b4d}.active\:bg-opacity-80:active{--tw-bg-opacity: .8}.active\:text-blue-gray-500:active{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.active\:text-blue-gray-900:active{--tw-text-opacity: 1;color:rgb(38 50 56 / var(--tw-text-opacity))}.active\:text-white:active{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.active\:opacity-\[0\.85\]:active{opacity:.85}.active\:shadow-none:active{--tw-shadow: 0 0 rgb(0, 0 / 0, 0);--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:resize-none:disabled{resize:none}.disabled\:border-0:disabled{border-width:0px}.disabled\:bg-blue-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:shadow-none:disabled{--tw-shadow: 0 0 rgb(0, 0 / 0, 0);--tw-shadow-colored: 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:border-amber-500{--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-blue-500{--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-blue-gray-500{--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-brown-500{--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-cyan-500{--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-deep-orange-500{--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-deep-purple-500{--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-gray-900{--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-indigo-500{--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-light-blue-500{--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-light-green-500{--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-lime-500{--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-pink-500{--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-purple-500{--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-red-500{--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-teal-500{--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:border-yellow-500{--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.peer:checked~.peer-checked\:opacity-100{opacity:1}.peer:checked~.peer-checked\:before\:bg-amber-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 193 7 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-blue-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(33 150 243 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-blue-gray-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(96 125 139 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-brown-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(121 85 72 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-cyan-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 188 212 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-deep-orange-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 87 34 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-deep-purple-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(103 58 183 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-gray-900:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-green-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-indigo-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(63 81 181 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-light-blue-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(3 169 244 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-light-green-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(139 195 74 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-lime-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(205 220 57 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-orange-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-pink-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(233 30 99 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-purple-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(156 39 176 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-red-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(244 67 54 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-teal-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 150 136 / var(--tw-bg-opacity))}.peer:checked~.peer-checked\:before\:bg-yellow-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 235 59 / var(--tw-bg-opacity))}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:text-sm{font-size:.875rem;line-height:1.25rem}.peer:placeholder-shown~.peer-placeholder-shown\:text-sm{font-size:.875rem;line-height:1.25rem}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:leading-\[3\.75\]{line-height:3.75}.peer:placeholder-shown~.peer-placeholder-shown\:leading-\[3\.75\]{line-height:3.75}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:leading-\[4\.1\]{line-height:4.1}.peer:placeholder-shown~.peer-placeholder-shown\:leading-\[4\.1\]{line-height:4.1}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:leading-\[4\.25\]{line-height:4.25}.peer:placeholder-shown~.peer-placeholder-shown\:leading-\[4\.25\]{line-height:4.25}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:leading-\[4\.875\]{line-height:4.875}.peer:placeholder-shown~.peer-placeholder-shown\:leading-\[4\.875\]{line-height:4.875}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:leading-tight{line-height:1.25}.peer:placeholder-shown~.peer-placeholder-shown\:leading-tight{line-height:1.25}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.peer:placeholder-shown~.peer-placeholder-shown\:text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.peer:placeholder-shown~.peer-placeholder-shown\:text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:text-red-500{--tw-text-opacity: 1;color:rgb(244 67 54 / var(--tw-text-opacity))}.peer:placeholder-shown~.peer-placeholder-shown\:text-red-500{--tw-text-opacity: 1;color:rgb(244 67 54 / var(--tw-text-opacity))}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:before\:border-transparent:before{content:var(--tw-content);border-color:transparent}.peer:placeholder-shown~.peer-placeholder-shown\:before\:border-transparent:before{content:var(--tw-content);border-color:transparent}.peer:-moz-placeholder-shown~.peer-placeholder-shown\:after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.peer:placeholder-shown~.peer-placeholder-shown\:after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.peer:focus~.peer-focus\:text-\[11px\]{font-size:11px}.peer:focus~.peer-focus\:text-sm{font-size:.875rem;line-height:1.25rem}.peer:focus~.peer-focus\:leading-tight{line-height:1.25}.peer:focus~.peer-focus\:text-amber-500{--tw-text-opacity: 1;color:rgb(255 193 7 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-blue-500{--tw-text-opacity: 1;color:rgb(33 150 243 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-brown-500{--tw-text-opacity: 1;color:rgb(121 85 72 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-cyan-500{--tw-text-opacity: 1;color:rgb(0 188 212 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-deep-orange-500{--tw-text-opacity: 1;color:rgb(255 87 34 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-deep-purple-500{--tw-text-opacity: 1;color:rgb(103 58 183 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-gray-900{--tw-text-opacity: 1;color:rgb(33 33 33 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-indigo-500{--tw-text-opacity: 1;color:rgb(63 81 181 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-light-blue-500{--tw-text-opacity: 1;color:rgb(3 169 244 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-light-green-500{--tw-text-opacity: 1;color:rgb(139 195 74 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-lime-500{--tw-text-opacity: 1;color:rgb(205 220 57 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-pink-500{--tw-text-opacity: 1;color:rgb(233 30 99 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-purple-500{--tw-text-opacity: 1;color:rgb(156 39 176 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-red-500{--tw-text-opacity: 1;color:rgb(244 67 54 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-teal-500{--tw-text-opacity: 1;color:rgb(0 150 136 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-yellow-500{--tw-text-opacity: 1;color:rgb(255 235 59 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:before\:border-l-2:before{content:var(--tw-content);border-left-width:2px}.peer:focus~.peer-focus\:before\:border-t-2:before{content:var(--tw-content);border-top-width:2px}.peer:focus~.peer-focus\:before\:\!border-amber-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 193 7 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-black:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-blue-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(33 150 243 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-blue-gray-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(96 125 139 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-brown-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(121 85 72 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-cyan-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 188 212 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-deep-orange-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 87 34 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-deep-purple-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(103 58 183 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-gray-900:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(33 33 33 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-green-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(34 197 94 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-indigo-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(63 81 181 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-light-blue-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(3 169 244 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-light-green-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(139 195 74 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-lime-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(205 220 57 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-orange-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(249 115 22 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-pink-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(233 30 99 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-purple-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(156 39 176 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-red-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(244 67 54 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-teal-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 150 136 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-white:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:\!border-yellow-500:before{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 235 59 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:before\:border-green-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:before\:border-red-500:before{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:scale-x-100:after{content:var(--tw-content);--tw-scale-x: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:after\:border-r-2:after{content:var(--tw-content);border-right-width:2px}.peer:focus~.peer-focus\:after\:border-t-2:after{content:var(--tw-content);border-top-width:2px}.peer:focus~.peer-focus\:after\:\!border-amber-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 193 7 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-black:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(33 150 243 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-blue-gray-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(96 125 139 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-brown-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(121 85 72 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-cyan-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 188 212 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-deep-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 87 34 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-deep-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(103 58 183 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-gray-900:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(33 33 33 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-green-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(34 197 94 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-indigo-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(63 81 181 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-light-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(3 169 244 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-light-green-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(139 195 74 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-lime-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(205 220 57 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(249 115 22 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-pink-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(233 30 99 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(156 39 176 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-red-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(244 67 54 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-teal-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(0 150 136 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-white:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:\!border-yellow-500:after{content:var(--tw-content);--tw-border-opacity: 1 !important;border-color:rgb(255 235 59 / var(--tw-border-opacity))!important}.peer:focus~.peer-focus\:after\:border-amber-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 193 7 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-black:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 150 243 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-blue-gray-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(96 125 139 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-brown-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(121 85 72 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-cyan-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 188 212 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-deep-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 87 34 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-deep-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(103 58 183 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-gray-900:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-green-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-indigo-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(63 81 181 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-light-blue-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(3 169 244 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-light-green-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(139 195 74 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-lime-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(205 220 57 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-orange-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-pink-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(233 30 99 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(156 39 176 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-red-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(244 67 54 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-teal-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(0 150 136 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.peer:focus~.peer-focus\:after\:border-yellow-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 235 59 / var(--tw-border-opacity))}.peer:disabled~.peer-disabled\:text-blue-gray-400{--tw-text-opacity: 1;color:rgb(120 144 156 / var(--tw-text-opacity))}.peer:disabled~.peer-disabled\:text-transparent{color:transparent}.peer:disabled~.peer-disabled\:before\:border-transparent:before{content:var(--tw-content);border-color:transparent}.peer:disabled~.peer-disabled\:after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.peer:disabled:-moz-placeholder-shown~.peer-disabled\:peer-placeholder-shown\:text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}.peer:disabled:placeholder-shown~.peer-disabled\:peer-placeholder-shown\:text-blue-gray-500{--tw-text-opacity: 1;color:rgb(96 125 139 / var(--tw-text-opacity))}@media (min-width: 540px){.sm\:w-auto{width:auto}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:.5rem}.sm\:text-right{text-align:right}}@media (min-width: 720px){.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:ml-auto{margin-left:auto}.md\:mt-0{margin-top:0}.md\:w-1\/2{width:50%}.md\:w-1\/4{width:25%}.md\:w-2\/3{width:66.666667%}.md\:w-3\/4{width:75%}.md\:w-3\/5{width:60%}.md\:w-5\/6{width:83.333333%}.md\:w-auto{width:auto}.md\:min-w-\[60\%\]{min-width:60%}.md\:min-w-\[66\.666667\%\]{min-width:66.666667%}.md\:min-w-\[75\%\]{min-width:75%}.md\:min-w-\[83\.333333\%\]{min-width:83.333333%}.md\:max-w-\[60\%\]{max-width:60%}.md\:max-w-\[66\.666667\%\]{max-width:66.666667%}.md\:max-w-\[75\%\]{max-width:75%}.md\:max-w-\[83\.333333\%\]{max-width:83.333333%}.md\:max-w-xs{max-width:20rem}.md\:flex-1{flex:1 1 0%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-nowrap{flex-wrap:nowrap}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:justify-between{justify-content:space-between}.md\:gap-3{gap:.75rem}.md\:gap-6{gap:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 960px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:mx-4{margin-left:1rem;margin-right:1rem}.lg\:mb-0{margin-bottom:0}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:hidden{display:none}.lg\:w-1\/2,.lg\:w-2\/4{width:50%}.lg\:w-2\/5{width:40%}.lg\:w-3\/4{width:75%}.lg\:w-3\/5{width:60%}.lg\:min-w-\[40\%\]{min-width:40%}.lg\:min-w-\[50\%\]{min-width:50%}.lg\:min-w-\[60\%\]{min-width:60%}.lg\:min-w-\[75\%\]{min-width:75%}.lg\:max-w-\[40\%\]{max-width:40%}.lg\:max-w-\[50\%\]{max-width:50%}.lg\:max-w-\[60\%\]{max-width:60%}.lg\:max-w-\[75\%\]{max-width:75%}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:gap-6{gap:1.5rem}}@media (min-width: 1140px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:ml-80{margin-left:20rem}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1320px){.\32xl\:w-1\/3{width:33.333333%}.\32xl\:w-1\/4{width:25%}.\32xl\:w-2\/5{width:40%}.\32xl\:w-3\/4{width:75%}.\32xl\:w-3\/5{width:60%}.\32xl\:min-w-\[25\%\]{min-width:25%}.\32xl\:min-w-\[33\.333333\%\]{min-width:33.333333%}.\32xl\:min-w-\[40\%\]{min-width:40%}.\32xl\:min-w-\[60\%\]{min-width:60%}.\32xl\:min-w-\[75\%\]{min-width:75%}.\32xl\:max-w-\[25\%\]{max-width:25%}.\32xl\:max-w-\[33\.333333\%\]{max-width:33.333333%}.\32xl\:max-w-\[40\%\]{max-width:40%}.\32xl\:max-w-\[60\%\]{max-width:60%}.\32xl\:max-w-\[75\%\]{max-width:75%}}.\[\&\:\:-moz-range-thumb\]\:relative::-moz-range-thumb{position:relative}.\[\&\:\:-moz-range-thumb\]\:z-20::-moz-range-thumb{z-index:20}.\[\&\:\:-moz-range-thumb\]\:-mt-1::-moz-range-thumb{margin-top:-.25rem}.\[\&\:\:-moz-range-thumb\]\:-mt-\[3px\]::-moz-range-thumb{margin-top:-3px}.\[\&\:\:-moz-range-thumb\]\:h-2\.5::-moz-range-thumb{height:.625rem}.\[\&\:\:-moz-range-thumb\]\:h-3\.5::-moz-range-thumb{height:.875rem}.\[\&\:\:-moz-range-thumb\]\:h-5::-moz-range-thumb{height:1.25rem}.\[\&\:\:-moz-range-thumb\]\:w-2\.5::-moz-range-thumb{width:.625rem}.\[\&\:\:-moz-range-thumb\]\:w-3\.5::-moz-range-thumb{width:.875rem}.\[\&\:\:-moz-range-thumb\]\:w-5::-moz-range-thumb{width:1.25rem}.\[\&\:\:-moz-range-thumb\]\:appearance-none::-moz-range-thumb{-moz-appearance:none;-webkit-appearance:none;appearance:none}.\[\&\:\:-moz-range-thumb\]\:rounded-full::-moz-range-thumb{border-radius:9999px}.\[\&\:\:-moz-range-thumb\]\:border-0::-moz-range-thumb{border-width:0px}.\[\&\:\:-moz-range-thumb\]\:bg-white::-moz-range-thumb{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.\[\&\:\:-moz-range-thumb\]\:ring-2::-moz-range-thumb{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.\[\&\:\:-moz-range-thumb\]\:ring-current::-moz-range-thumb{--tw-ring-color: currentColor}.\[\&\:\:-moz-range-thumb\]\:\[-webkit-appearance\:none\]::-moz-range-thumb{-webkit-appearance:none}.\[\&\:\:-moz-range-track\]\:h-full::-moz-range-track{height:100%}.\[\&\:\:-moz-range-track\]\:rounded-full::-moz-range-track{border-radius:9999px}.\[\&\:\:-moz-range-track\]\:bg-blue-gray-100::-moz-range-track{--tw-bg-opacity: 1;background-color:rgb(207 216 220 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-slider-runnable-track\]\:h-full::-webkit-slider-runnable-track{height:100%}.\[\&\:\:-webkit-slider-runnable-track\]\:rounded-full::-webkit-slider-runnable-track{border-radius:9999px}.\[\&\:\:-webkit-slider-runnable-track\]\:bg-blue-gray-100::-webkit-slider-runnable-track{--tw-bg-opacity: 1;background-color:rgb(207 216 220 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-slider-thumb\]\:relative::-webkit-slider-thumb{position:relative}.\[\&\:\:-webkit-slider-thumb\]\:z-20::-webkit-slider-thumb{z-index:20}.\[\&\:\:-webkit-slider-thumb\]\:-mt-1::-webkit-slider-thumb{margin-top:-.25rem}.\[\&\:\:-webkit-slider-thumb\]\:-mt-\[3px\]::-webkit-slider-thumb{margin-top:-3px}.\[\&\:\:-webkit-slider-thumb\]\:h-2\.5::-webkit-slider-thumb{height:.625rem}.\[\&\:\:-webkit-slider-thumb\]\:h-3\.5::-webkit-slider-thumb{height:.875rem}.\[\&\:\:-webkit-slider-thumb\]\:h-5::-webkit-slider-thumb{height:1.25rem}.\[\&\:\:-webkit-slider-thumb\]\:w-2\.5::-webkit-slider-thumb{width:.625rem}.\[\&\:\:-webkit-slider-thumb\]\:w-3\.5::-webkit-slider-thumb{width:.875rem}.\[\&\:\:-webkit-slider-thumb\]\:w-5::-webkit-slider-thumb{width:1.25rem}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:9999px}.\[\&\:\:-webkit-slider-thumb\]\:border-0::-webkit-slider-thumb{border-width:0px}.\[\&\:\:-webkit-slider-thumb\]\:bg-white::-webkit-slider-thumb{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-slider-thumb\]\:ring-2::-webkit-slider-thumb{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.\[\&\:\:-webkit-slider-thumb\]\:ring-current::-webkit-slider-thumb{--tw-ring-color: currentColor}.\[\&\:\:-webkit-slider-thumb\]\:\[-webkit-appearance\:none\]::-webkit-slider-thumb{-webkit-appearance:none}.\[\&\>div\]\:\!min-w-0>div{min-width:0px!important} diff --git a/backend/public/assets/pattern-68ea7609.png b/backend/public/assets/pattern-68ea7609.png new file mode 100644 index 0000000..2b34e46 Binary files /dev/null and b/backend/public/assets/pattern-68ea7609.png differ diff --git a/backend/public/index.html b/backend/public/index.html index 86bfdfc..d89bdc0 100644 --- a/backend/public/index.html +++ b/backend/public/index.html @@ -32,8 +32,10 @@ - - + + + +
diff --git a/backend/setup/index.js b/backend/setup/index.js new file mode 100644 index 0000000..97da8d6 --- /dev/null +++ b/backend/setup/index.js @@ -0,0 +1,373 @@ +import crypto from 'crypto'; +import { db } from '../db/index.js'; +import { hasSuperuser } from '../auth/superuser.js'; + +const selectAllServers = db.prepare('SELECT * FROM servers ORDER BY id ASC'); +const selectServerById = db.prepare('SELECT * FROM servers WHERE id = ?'); +const selectServerByUrl = db.prepare('SELECT * FROM servers WHERE url = ?'); +const insertServer = db.prepare(` + INSERT INTO servers (name, url) + VALUES (?, ?) +`); +const updateServer = db.prepare(` + UPDATE servers + SET name = ?, url = ?, updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const deleteServerStmt = db.prepare('DELETE FROM servers WHERE id = ?'); + +const selectApiKeyByServerId = db.prepare('SELECT * FROM server_api_keys WHERE server_id = ?'); +const countApiKeysStmt = db.prepare('SELECT COUNT(*) as count FROM server_api_keys'); +const selectAllApiKeys = db.prepare('SELECT server_id, created_at, updated_at FROM server_api_keys'); +const upsertApiKey = db.prepare(` + INSERT INTO server_api_keys (server_id, key_cipher, key_iv, key_tag, created_at, updated_at) + VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) + ON CONFLICT(server_id) DO UPDATE SET + key_cipher = excluded.key_cipher, + key_iv = excluded.key_iv, + key_tag = excluded.key_tag, + updated_at = CURRENT_TIMESTAMP +`); +const deleteApiKeyByServerId = db.prepare('DELETE FROM server_api_keys WHERE server_id = ?'); + +const countServersStmt = db.prepare('SELECT COUNT(*) as count FROM servers'); +const selectFirstServerStmt = db.prepare('SELECT * FROM servers ORDER BY id ASC LIMIT 1'); + +const API_KEY_SECRET = crypto.createHash('sha256') + .update(process.env.PORTAINER_API_SECRET || process.env.PORTAINER_API_KEY || 'stackpulse-portainer-api-key') + .digest(); + +function encryptApiKey(apiKey) { + if (!apiKey || typeof apiKey !== 'string') return null; + const trimmed = apiKey.trim(); + if (!trimmed) return null; + const iv = crypto.randomBytes(12); + const cipher = crypto.createCipheriv('aes-256-gcm', API_KEY_SECRET, iv); + const encrypted = Buffer.concat([cipher.update(trimmed, 'utf8'), cipher.final()]); + const tag = cipher.getAuthTag(); + return { + iv: iv.toString('base64'), + content: encrypted.toString('base64'), + tag: tag.toString('base64') + }; +} + +function decryptApiKey(row) { + if (!row) return ''; + try { + const iv = Buffer.from(row.key_iv, 'base64'); + const content = Buffer.from(row.key_cipher, 'base64'); + const tag = Buffer.from(row.key_tag, 'base64'); + const decipher = crypto.createDecipheriv('aes-256-gcm', API_KEY_SECRET, iv); + decipher.setAuthTag(tag); + const decrypted = Buffer.concat([decipher.update(content), decipher.final()]); + return decrypted.toString('utf8'); + } catch (error) { + console.warn('⚠️ [Setup] API-Key konnte nicht entschlüsselt werden:', error.message); + return ''; + } +} + +function normalizeUrl(url) { + if (!url || typeof url !== 'string') return null; + const trimmed = url.trim(); + if (!trimmed) return null; + try { + const hasProtocol = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed); + const candidate = hasProtocol ? trimmed : `https://${trimmed}`; + const normalized = new URL(candidate); + const pathname = normalized.pathname.replace(/\/+$/, ''); + normalized.pathname = pathname || '/'; + normalized.hash = ''; + return normalized.toString().replace(/\/$/, ''); + } catch (err) { + return ''; + } +} + +function deriveServerName(url) { + try { + const parsed = new URL(url); + return parsed.hostname || url; + } catch (err) { + return url; + } +} + +function ensureServer({ name, url }) { + const normalizedUrl = normalizeUrl(url); + if (!normalizedUrl) { + const error = new Error('SERVER_URL_REQUIRED'); + error.code = 'SERVER_URL_REQUIRED'; + throw error; + } + const normalizedName = (name || deriveServerName(normalizedUrl)).trim(); + if (!normalizedName) { + const error = new Error('SERVER_NAME_REQUIRED'); + error.code = 'SERVER_NAME_REQUIRED'; + throw error; + } + + const existing = selectServerByUrl.get(normalizedUrl); + if (existing) { + if (existing.name !== normalizedName) { + updateServer.run(normalizedName, normalizedUrl, existing.id); + const updated = selectServerById.get(existing.id); + console.log(`ℹ️ [Setup] Server aktualisiert: ${updated.name} (${updated.id})`); + return updated; + } + return existing; + } + + const result = insertServer.run(normalizedName, normalizedUrl); + const created = selectServerById.get(result.lastInsertRowid); + console.log(`✅ [Setup] Server angelegt: ${created.name} (${created.id})`); + return created; +} + +function setServerApiKey({ serverId, apiKey }) { + const id = Number(serverId); + if (!Number.isFinite(id)) { + const error = new Error('SERVER_ID_INVALID'); + error.code = 'SERVER_ID_INVALID'; + throw error; + } + + const server = selectServerById.get(id); + if (!server) { + const error = new Error('SERVER_NOT_FOUND'); + error.code = 'SERVER_NOT_FOUND'; + throw error; + } + + const normalizedKey = typeof apiKey === 'string' ? apiKey.trim() : ''; + if (!normalizedKey) { + const error = new Error('API_KEY_REQUIRED'); + error.code = 'API_KEY_REQUIRED'; + throw error; + } + + const encrypted = encryptApiKey(normalizedKey); + if (!encrypted) { + const error = new Error('API_KEY_ENCRYPT_FAILED'); + error.code = 'API_KEY_ENCRYPT_FAILED'; + throw error; + } + + const existing = selectApiKeyByServerId.get(id); + upsertApiKey.run(id, encrypted.content, encrypted.iv, encrypted.tag); + console.log(`${existing ? 'ℹ️' : '🔐'} [Setup] API-Key ${existing ? 'aktualisiert' : 'angelegt'}: Server ${server.name} (${server.id})`); + + return { + serverId: server.id, + updatedAt: new Date().toISOString() + }; +} + +function getActiveApiKey() { + const firstServer = selectFirstServerStmt.get(); + if (firstServer) { + const row = selectApiKeyByServerId.get(firstServer.id); + const key = decryptApiKey(row); + if (key) return key; + } + + const envKey = process.env.PORTAINER_API_KEY ? process.env.PORTAINER_API_KEY.trim() : ''; + return envKey || ''; +} + +function getActiveServerUrl() { + const firstServer = selectFirstServerStmt.get(); + if (firstServer?.url) { + const normalizedUrl = normalizeUrl(firstServer.url); + if (normalizedUrl) { + return normalizedUrl; + } + } + + const envUrl = process.env.PORTAINER_URL ? process.env.PORTAINER_URL.trim() : ''; + const normalizedEnvUrl = envUrl ? normalizeUrl(envUrl) : ''; + return normalizedEnvUrl || ''; +} + +function hasServer() { + const { count } = countServersStmt.get(); + return count > 0; +} + +function removeServer(serverId) { + const id = Number(serverId); + if (!Number.isFinite(id)) { + const error = new Error('SERVER_ID_INVALID'); + error.code = 'SERVER_ID_INVALID'; + throw error; + } + + const server = selectServerById.get(id); + if (!server) { + const error = new Error('SERVER_NOT_FOUND'); + error.code = 'SERVER_NOT_FOUND'; + throw error; + } + + const existingApiKey = selectApiKeyByServerId.get(id); + + deleteServerStmt.run(id); + + if (existingApiKey) { + console.log(`🗑️ [Setup] API-Key entfernt: Server ${server.name} (${server.id})`); + } + + console.log(`🗑️ [Setup] Server entfernt: ${server.name} (${server.id})`); + + return { + server, + removed: true + }; +} + +function hasApiKey() { + const { count } = countApiKeysStmt.get(); + return count > 0; +} + +function hasCompleteSetup() { + return hasSuperuser() && hasServer() && hasApiKey(); +} + +function ensureDefaultsFromEnv() { + const envServerUrlRaw = process.env.PORTAINER_URL; + const envServerName = process.env.PORTAINER_SERVER_NAME; + let server = null; + if (envServerUrlRaw) { + try { + server = ensureServer({ name: envServerName, url: envServerUrlRaw }); + } catch (error) { + console.error('⚠️ [Setup] Konnte Server aus Umgebungsvariablen nicht anlegen:', error.message); + } + } + + const envApiKeyRaw = typeof process.env.PORTAINER_API_KEY === 'string' ? process.env.PORTAINER_API_KEY : ''; + if (envApiKeyRaw.trim()) { + const targetServer = server || selectFirstServerStmt.get(); + if (targetServer) { + try { + setServerApiKey({ serverId: targetServer.id, apiKey: envApiKeyRaw.trim() }); + } catch (error) { + console.error('⚠️ [Setup] Konnte API-Key aus Umgebungsvariablen nicht speichern:', error.message); + } + } + } +} + +function getSetupStatus() { + const servers = selectAllServers.all(); + const apiKeyRecords = selectAllApiKeys.all(); + const apiKeyMap = new Map(apiKeyRecords.map((entry) => [entry.server_id, entry])); + + const rawEnvServerName = typeof process.env.PORTAINER_SERVER_NAME === 'string' ? process.env.PORTAINER_SERVER_NAME : ''; + const envServerName = rawEnvServerName.trim(); + const rawEnvServerUrl = typeof process.env.PORTAINER_URL === 'string' ? process.env.PORTAINER_URL : ''; + const envServerUrl = rawEnvServerUrl.trim(); + const rawEnvApiKey = typeof process.env.PORTAINER_API_KEY === 'string' ? process.env.PORTAINER_API_KEY : ''; + const envApiKeyTrimmed = rawEnvApiKey.trim(); + const envApiKeyProvided = Boolean(envApiKeyTrimmed); + const envSuperuserUsernameRaw = typeof process.env.SUPERUSER_USERNAME === 'string' ? process.env.SUPERUSER_USERNAME : ''; + const envSuperuserEmailRaw = typeof process.env.SUPERUSER_EMAIL === 'string' ? process.env.SUPERUSER_EMAIL : ''; + const envSuperuserPasswordRaw = typeof process.env.SUPERUSER_PASSWORD === 'string' ? process.env.SUPERUSER_PASSWORD : ''; + const envSuperuserUsername = envSuperuserUsernameRaw.trim(); + const envSuperuserEmail = envSuperuserEmailRaw.trim(); + + const serverRequired = servers.length === 0; + + const apiKeyItems = servers.map((server) => { + const keyMeta = apiKeyMap.get(server.id) || null; + return { + serverId: server.id, + serverName: server.name, + hasKey: Boolean(keyMeta), + updatedAt: keyMeta?.updated_at ?? null + }; + }); + const apiKeyCount = apiKeyItems.filter((item) => item.hasKey).length; + const apiKeyRequired = servers.length > 0 && apiKeyCount === 0; + + const superuserExists = hasSuperuser(); + const setupComplete = superuserExists && !serverRequired && !apiKeyRequired; + + return { + superuser: { + exists: superuserExists, + envProvided: Boolean(envSuperuserUsername || envSuperuserEmail || envSuperuserPasswordRaw), + env: { + username: envSuperuserUsernameRaw, + email: envSuperuserEmailRaw, + password: envSuperuserPasswordRaw + } + }, + servers: { + count: servers.length, + items: servers, + requireInput: serverRequired, + envProvided: Boolean(envServerUrl) + }, + apiKeys: { + count: apiKeyCount, + items: apiKeyItems, + requireInput: apiKeyRequired, + envProvided: envApiKeyProvided, + envValue: rawEnvApiKey + }, + requirements: { + superuser: !superuserExists, + server: serverRequired, + apiKey: apiKeyRequired + }, + setupComplete, + envDefaults: { + serverName: envServerName || (envServerUrl ? deriveServerName(envServerUrl) : ''), + serverNameFromEnv: rawEnvServerName, + serverUrl: envServerUrl, + apiKeyProvided: envApiKeyProvided, + apiKeyValue: rawEnvApiKey, + superuserUsername: envSuperuserUsernameRaw, + superuserEmail: envSuperuserEmailRaw, + superuserPassword: envSuperuserPasswordRaw + } + }; +} + +function completeSetup({ server: serverInput }) { + let serverRecord = null; + + if (serverInput && typeof serverInput.url === 'string' && serverInput.url.trim()) { + serverRecord = ensureServer(serverInput); + } else { + serverRecord = selectFirstServerStmt.get(); + } + + if (!serverRecord) { + const error = new Error('SERVER_DETAILS_REQUIRED'); + error.code = 'SERVER_DETAILS_REQUIRED'; + throw error; + } + + return { + server: serverRecord + }; +} + +export { + ensureDefaultsFromEnv, + ensureServer, + setServerApiKey, + getActiveApiKey, + getActiveServerUrl, + hasServer, + hasApiKey, + hasCompleteSetup, + getSetupStatus, + completeSetup, + removeServer +}; diff --git a/backend/users/index.js b/backend/users/index.js new file mode 100644 index 0000000..5ee9f09 --- /dev/null +++ b/backend/users/index.js @@ -0,0 +1,987 @@ +import { db } from '../db/index.js'; +import { logEvent } from '../logging/eventLogs.js'; +import { + generateSecurityPhraseWords, + encryptSecurityPhrase, + decryptSecurityPhrase, + canonicalizeWords, + canonicalizePhraseInput +} from './securityPhrase.js'; +import { + hashPassword, + normalizeAvatarColor, + pickRandomAvatarColor, + DEFAULT_AVATAR_COLOR, + SUPERUSER_GROUP_NAME +} from '../auth/superuser.js'; + +const selectUsersWithGroups = db.prepare(` + SELECT + u.id, + u.username, + u.email, + u.is_active, + u.avatar_color, + u.last_login, + u.created_at, + u.updated_at, + u.security_phrase_downloaded_at, + GROUP_CONCAT(g.id || '::' || g.name, '|||') AS group_pairs + FROM users u + LEFT JOIN user_group_memberships m ON m.user_id = u.id + LEFT JOIN user_groups g ON g.id = m.group_id + GROUP BY u.id + ORDER BY u.username COLLATE NOCASE +`); + +const selectUserWithGroupsById = db.prepare(` + SELECT + u.id, + u.username, + u.email, + u.is_active, + u.avatar_color, + u.last_login, + u.created_at, + u.updated_at, + u.security_phrase_content, + u.security_phrase_iv, + u.security_phrase_tag, + u.security_phrase_downloaded_at, + GROUP_CONCAT(g.id || '::' || g.name, '|||') AS group_pairs + FROM users u + LEFT JOIN user_group_memberships m ON m.user_id = u.id + LEFT JOIN user_groups g ON g.id = m.group_id + WHERE u.id = ? + GROUP BY u.id +`); + +const selectUserCredentialsById = db.prepare(` + SELECT id, username, email, password_hash, password_salt, avatar_color + FROM users + WHERE id = ? +`); + +const selectUserByUsername = db.prepare('SELECT id FROM users WHERE username = ?'); +const selectUserByEmail = db.prepare('SELECT id FROM users WHERE email = ?'); + +const deleteMembershipsByUser = db.prepare(` + DELETE FROM user_group_memberships + WHERE user_id = ? +`); + +const insertMembershipForUser = db.prepare(` + INSERT OR IGNORE INTO user_group_memberships (user_id, group_id) + VALUES (?, ?) +`); + +const selectSecurityPhraseByUsername = db.prepare(` + SELECT + id, + username, + is_active, + security_phrase_content AS content, + security_phrase_iv AS iv, + security_phrase_tag AS tag, + security_phrase_downloaded_at AS downloaded_at + FROM users + WHERE lower(username) = lower(?) + LIMIT 1 +`); + +const selectGroupById = db.prepare('SELECT id, name FROM user_groups WHERE id = ?'); +const selectGroupIdByName = db.prepare('SELECT id FROM user_groups WHERE lower(name) = lower(?) LIMIT 1'); + +const isUserInGroupStatement = db.prepare(` + SELECT 1 AS has_membership + FROM user_group_memberships m + INNER JOIN user_groups g ON g.id = m.group_id + WHERE m.user_id = ? AND lower(g.name) = lower(?) + LIMIT 1 +`); + +const insertUserStatement = db.prepare(` + INSERT INTO users ( + username, + email, + password_hash, + password_salt, + avatar_color, + is_active, + security_phrase_content, + security_phrase_iv, + security_phrase_tag, + security_phrase_downloaded_at, + created_at, + updated_at + ) + VALUES (?, ?, ?, ?, ?, 1, ?, ?, ?, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +`); + +const updateUserCoreStatement = db.prepare(` + UPDATE users + SET username = ?, + email = ?, + password_hash = ?, + password_salt = ?, + avatar_color = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const updateUserActiveStatement = db.prepare(` + UPDATE users + SET is_active = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const updateUserPasswordStatement = db.prepare(` + UPDATE users + SET password_hash = ?, + password_salt = ?, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const parseGroupPairs = (rawPairs) => { + if (!rawPairs) { + return []; + } + return rawPairs + .split('|||') + .map((entry) => { + const [idPart, namePart] = entry.split('::'); + const groupName = String(namePart || '').trim(); + if (!groupName) { + return null; + } + const numericId = Number(idPart); + return { + id: Number.isFinite(numericId) ? numericId : null, + name: groupName + }; + }) + .filter(Boolean); +}; + +const sanitizeUserRecord = (row) => ({ + id: row.id, + username: row.username, + email: row.email || null, + isActive: Boolean(row.is_active), + avatarColor: row.avatar_color || null, + lastLogin: row.last_login || null, + createdAt: row.created_at || null, + updatedAt: row.updated_at || null, + groups: parseGroupPairs(row.group_pairs), + securityPhraseDownloadedAt: row.security_phrase_downloaded_at || null +}); + +export function listUsers() { + const rows = selectUsersWithGroups.all(); + return rows.map(sanitizeUserRecord); +} + +export function getUserById(userId) { + const row = selectUserWithGroupsById.get(userId); + return row ? sanitizeUserRecord(row) : null; +} + +const applyUserGroupAssignments = db.transaction((userId, groupIds) => { + deleteMembershipsByUser.run(userId); + groupIds.forEach((groupId) => { + insertMembershipForUser.run(userId, groupId); + }); +}); + +const insertUserWithGroups = db.transaction(({ + username, + email, + passwordHash, + passwordSalt, + avatarColor, + groupId, + securityPhrase +}) => { + const phraseToPersist = securityPhrase && typeof securityPhrase === 'object' + ? { + content: securityPhrase.content ?? null, + iv: securityPhrase.iv ?? null, + tag: securityPhrase.tag ?? null + } + : { content: null, iv: null, tag: null }; + + const result = insertUserStatement.run( + username, + email, + passwordHash, + passwordSalt, + avatarColor, + phraseToPersist.content, + phraseToPersist.iv, + phraseToPersist.tag + ); + const userId = Number(result.lastInsertRowid); + applyUserGroupAssignments(userId, [groupId]); + return userId; +}); + +const selectSecurityPhraseByUserId = db.prepare(` + SELECT + id, + username, + security_phrase_content AS content, + security_phrase_iv AS iv, + security_phrase_tag AS tag, + security_phrase_downloaded_at AS downloaded_at + FROM users + WHERE id = ? +`); + +const updateSecurityPhraseStatement = db.prepare(` + UPDATE users + SET + security_phrase_content = ?, + security_phrase_iv = ?, + security_phrase_tag = ?, + security_phrase_downloaded_at = NULL, + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const markSecurityPhraseDownloadedStatement = db.prepare(` + UPDATE users + SET security_phrase_downloaded_at = COALESCE(security_phrase_downloaded_at, CURRENT_TIMESTAMP), + updated_at = CURRENT_TIMESTAMP + WHERE id = ? +`); + +const selectUsersMissingSecurityPhraseStatement = db.prepare(` + SELECT id + FROM users + WHERE security_phrase_content IS NULL + OR security_phrase_iv IS NULL + OR security_phrase_tag IS NULL +`); + +const resolveActorFields = (actor) => { + if (!actor || actor.id === undefined || actor.id === null) { + return {}; + } + const name = actor.username || actor.email || `User ${actor.id}`; + return { + actorType: 'user', + actorId: String(actor.id), + actorName: name + }; +}; + +const normalizeEmail = (value) => { + if (!value) return null; + const trimmed = String(value).trim(); + if (!trimmed) { + return null; + } + return trimmed.toLowerCase(); +}; + +export function getUserSecurityPhrase(userId, options = {}) { + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const { actor = null, allowAutoGenerate = true } = options; + + const record = selectSecurityPhraseByUserId.get(numericUserId); + if (!record) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const words = decryptSecurityPhrase(record); + + if (allowAutoGenerate && (!Array.isArray(words) || words.length === 0)) { + return renewUserSecurityPhrase(numericUserId, { actor, suppressLog: true }); + } + + return { + userId: numericUserId, + username: record.username, + words, + downloadedAt: record.downloaded_at || null + }; +} + +export function renewUserSecurityPhrase(userId, options = {}) { + const actor = options.actor || null; + const suppressLog = Boolean(options.suppressLog); + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = selectUserCredentialsById.get(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const previousPhraseRecord = selectSecurityPhraseByUserId.get(numericUserId); + + const words = generateSecurityPhraseWords(8); + const { encrypted: encryptedPhrase } = encryptSecurityPhrase(words); + + updateSecurityPhraseStatement.run( + encryptedPhrase.content, + encryptedPhrase.iv, + encryptedPhrase.tag, + numericUserId + ); + + if (!suppressLog) { + logEvent({ + category: 'benutzer', + eventType: 'benutzer-sicherheitsschluessel-erneuert', + action: 'sicherheitsschluessel-erneuern', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: existingUser.username ?? `ID ${numericUserId}`, + message: `Sicherheitsschlüssel für Benutzer "${existingUser.username ?? numericUserId}" erneuert`, + metadata: { + previousDownloadedAt: previousPhraseRecord?.downloaded_at ?? null + }, + ...resolveActorFields(actor) + }); + } + + return { + userId: numericUserId, + username: existingUser.username, + words, + downloadedAt: null + }; +} + +export function markSecurityPhraseDownloaded(userId, options = {}) { + const actor = options.actor || null; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const record = selectSecurityPhraseByUserId.get(numericUserId); + if (!record) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + markSecurityPhraseDownloadedStatement.run(numericUserId); + + const updatedRecord = selectSecurityPhraseByUserId.get(numericUserId) || record; + const downloadedAt = updatedRecord?.downloaded_at || null; + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-sicherheitsschluessel-heruntergeladen', + action: 'sicherheitsschluessel-herunterladen', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: record.username ?? `ID ${numericUserId}`, + message: `Sicherheitsschlüssel für Benutzer "${record.username ?? numericUserId}" heruntergeladen`, + metadata: { + downloadedAt + }, + ...resolveActorFields(actor) + }); + + return { + userId: numericUserId, + username: record.username, + downloadedAt + }; +} + +export function verifySecurityPhraseForUsername(username, phraseInput) { + const normalizedUsername = typeof username === 'string' ? username.trim() : ''; + if (!normalizedUsername) { + const error = new Error('USERNAME_REQUIRED'); + error.code = 'USERNAME_REQUIRED'; + throw error; + } + + const record = selectSecurityPhraseByUsername.get(normalizedUsername); + if (!record) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const candidateCanonical = canonicalizePhraseInput(phraseInput); + if (!candidateCanonical) { + const error = new Error('PHRASE_REQUIRED'); + error.code = 'PHRASE_REQUIRED'; + throw error; + } + + const words = decryptSecurityPhrase(record); + if (!Array.isArray(words) || words.length === 0) { + const error = new Error('PHRASE_NOT_INITIALIZED'); + error.code = 'PHRASE_NOT_INITIALIZED'; + throw error; + } + + const storedCanonical = canonicalizeWords(words); + if (!storedCanonical) { + const error = new Error('PHRASE_NOT_INITIALIZED'); + error.code = 'PHRASE_NOT_INITIALIZED'; + throw error; + } + + if (storedCanonical !== candidateCanonical) { + const error = new Error('PHRASE_MISMATCH'); + error.code = 'PHRASE_MISMATCH'; + throw error; + } + + return { + userId: record.id, + username: record.username, + isActive: Boolean(record.is_active), + words + }; +} + +export function setUserPassword(userId, newPassword, options = {}) { + const actor = options.actor || null; + const resetMethod = options.resetMethod || 'security-phrase'; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = selectUserCredentialsById.get(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + let passwordHash; + let passwordSalt; + try { + const hashed = hashPassword(newPassword); + passwordHash = hashed.hash; + passwordSalt = hashed.salt; + } catch (err) { + if (err && err.code) { + throw err; + } + const error = new Error('INVALID_PASSWORD'); + error.code = 'INVALID_PASSWORD'; + throw error; + } + + updateUserPasswordStatement.run(passwordHash, passwordSalt, numericUserId); + const updated = getUserById(numericUserId); + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-passwort-zurueckgesetzt', + action: 'passwort-zuruecksetzen', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: updated?.username ?? existingUser.username ?? `ID ${numericUserId}`, + message: `Passwort für Benutzer "${updated?.username ?? existingUser.username ?? numericUserId}" zurückgesetzt`, + metadata: { + resetMethod + }, + ...resolveActorFields(actor) + }); + + return updated; +} + +export function ensureSecurityPhrasesForExistingUsers() { + const rows = selectUsersMissingSecurityPhraseStatement.all(); + if (!Array.isArray(rows) || rows.length === 0) { + return 0; + } + + let processed = 0; + const initialize = db.transaction((users) => { + users.forEach((entry) => { + if (!entry || entry.id === undefined || entry.id === null) { + return; + } + const words = generateSecurityPhraseWords(8); + const { encrypted: encryptedPhrase } = encryptSecurityPhrase(words); + updateSecurityPhraseStatement.run( + encryptedPhrase.content, + encryptedPhrase.iv, + encryptedPhrase.tag, + entry.id + ); + processed += 1; + }); + }); + + initialize(rows); + return processed; +} + +export function createUser({ username, email, password, groupId, avatarColor }, options = {}) { + const actor = options.actor || null; + const normalizedUsername = typeof username === 'string' ? username.trim() : ''; + if (!normalizedUsername) { + const error = new Error('USERNAME_REQUIRED'); + error.code = 'USERNAME_REQUIRED'; + throw error; + } + + const numericGroupId = Number(groupId); + if (!Number.isFinite(numericGroupId) || numericGroupId <= 0) { + const error = new Error('INVALID_GROUP_ID'); + error.code = 'INVALID_GROUP_ID'; + throw error; + } + + const groupRow = selectGroupById.get(numericGroupId); + if (!groupRow) { + const error = new Error('GROUP_NOT_FOUND'); + error.code = 'GROUP_NOT_FOUND'; + throw error; + } + + if ((groupRow.name || '').toLowerCase() === SUPERUSER_GROUP_NAME) { + const error = new Error('GROUP_SUPERUSER_PROTECTED'); + error.code = 'GROUP_SUPERUSER_PROTECTED'; + throw error; + } + + const normalizedEmail = normalizeEmail(email); + if (normalizedEmail && !normalizedEmail.includes('@')) { + const error = new Error('INVALID_EMAIL'); + error.code = 'INVALID_EMAIL'; + throw error; + } + + const existingUsername = selectUserByUsername.get(normalizedUsername); + if (existingUsername) { + const error = new Error('USERNAME_TAKEN'); + error.code = 'USERNAME_TAKEN'; + throw error; + } + + if (normalizedEmail) { + const existingEmail = selectUserByEmail.get(normalizedEmail); + if (existingEmail) { + const error = new Error('EMAIL_TAKEN'); + error.code = 'EMAIL_TAKEN'; + throw error; + } + } + + let passwordHash; + let passwordSalt; + try { + const hashed = hashPassword(password); + passwordHash = hashed.hash; + passwordSalt = hashed.salt; + } catch (err) { + if (err && err.code) { + throw err; + } + const error = new Error('INVALID_PASSWORD'); + error.code = 'INVALID_PASSWORD'; + throw error; + } + + const normalizedAvatarColor = normalizeAvatarColor(avatarColor); + const avatarColorToPersist = normalizedAvatarColor || pickRandomAvatarColor() || DEFAULT_AVATAR_COLOR; + + const securityPhraseWords = generateSecurityPhraseWords(8); + const { encrypted: encryptedPhrase } = encryptSecurityPhrase(securityPhraseWords); + const securityPhrasePayload = { + content: encryptedPhrase.content, + iv: encryptedPhrase.iv, + tag: encryptedPhrase.tag + }; + + const userId = insertUserWithGroups({ + username: normalizedUsername, + email: normalizedEmail, + passwordHash, + passwordSalt, + avatarColor: avatarColorToPersist, + groupId: numericGroupId, + securityPhrase: securityPhrasePayload + }); + + const userRecord = getUserById(userId); + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-angelegt', + action: 'anlegen', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(userRecord?.id ?? userId), + entityName: userRecord?.username ?? normalizedUsername, + message: `Benutzer "${normalizedUsername}" angelegt`, + metadata: { + email: userRecord?.email ?? normalizedEmail ?? null, + primaryGroupId: numericGroupId, + primaryGroupName: groupRow.name + }, + ...resolveActorFields(actor) + }); + + return userRecord; +} + +export function updateUserGroups(userId, groupIds, options = {}) { + const actor = options.actor || null; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = getUserById(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const normalizedGroupIds = Array.isArray(groupIds) + ? Array.from( + new Set( + groupIds + .map((value) => Number(value)) + .filter((value) => Number.isFinite(value) && value > 0) + ) + ) + : []; + + const missingGroupIds = []; + const groupDetails = []; + normalizedGroupIds.forEach((groupId) => { + const groupRow = selectGroupById.get(groupId); + if (!groupRow) { + missingGroupIds.push(groupId); + } else { + groupDetails.push({ + id: groupId, + name: groupRow.name + }); + } + }); + + if (missingGroupIds.length > 0) { + const error = new Error('GROUP_NOT_FOUND'); + error.code = 'GROUP_NOT_FOUND'; + error.missingGroupIds = missingGroupIds; + throw error; + } + + applyUserGroupAssignments(numericUserId, normalizedGroupIds); + const updated = getUserById(numericUserId); + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-gruppen-aktualisiert', + action: 'gruppe-aktualisieren', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: updated?.username ?? existingUser.username ?? `ID ${numericUserId}`, + message: `Gruppenzuordnung für Benutzer "${updated?.username ?? existingUser.username ?? numericUserId}" aktualisiert`, + metadata: { + previousGroups: (existingUser.groups || []).map((group) => ({ id: group.id, name: group.name })), + groups: updated?.groups?.map((group) => ({ id: group.id, name: group.name })) ?? groupDetails + }, + ...resolveActorFields(actor) + }); + + return updated; +} + +export function updateUserDetails(userId, { username, email, password, avatarColor, groupId, groupIds } = {}, options = {}) { + const actor = options.actor || null; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = selectUserCredentialsById.get(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const previousUserRecord = getUserById(numericUserId); + + const normalizedUsername = typeof username === 'string' ? username.trim() : existingUser.username; + if (!normalizedUsername) { + const error = new Error('USERNAME_REQUIRED'); + error.code = 'USERNAME_REQUIRED'; + throw error; + } + + const usernameRow = selectUserByUsername.get(normalizedUsername); + if (usernameRow && Number(usernameRow.id) !== numericUserId) { + const error = new Error('USERNAME_TAKEN'); + error.code = 'USERNAME_TAKEN'; + throw error; + } + + const normalizedEmail = email === undefined ? existingUser.email : normalizeEmail(email); + if (normalizedEmail && !normalizedEmail.includes('@')) { + const error = new Error('INVALID_EMAIL'); + error.code = 'INVALID_EMAIL'; + throw error; + } + + if (normalizedEmail) { + const emailRow = selectUserByEmail.get(normalizedEmail); + if (emailRow && Number(emailRow.id) !== numericUserId) { + const error = new Error('EMAIL_TAKEN'); + error.code = 'EMAIL_TAKEN'; + throw error; + } + } + + let passwordHash = existingUser.password_hash; + let passwordSalt = existingUser.password_salt; + if (typeof password === 'string') { + const trimmedPassword = password.trim(); + if (trimmedPassword.length > 0) { + const hashed = hashPassword(trimmedPassword); + passwordHash = hashed.hash; + passwordSalt = hashed.salt; + } + } else if (password !== undefined && password !== null) { + const error = new Error('INVALID_PASSWORD'); + error.code = 'INVALID_PASSWORD'; + throw error; + } + + let colorToPersist = existingUser.avatar_color || DEFAULT_AVATAR_COLOR; + if (avatarColor !== undefined) { + const candidate = String(avatarColor || '').trim(); + if (!candidate) { + colorToPersist = DEFAULT_AVATAR_COLOR; + } else { + const normalizedColor = normalizeAvatarColor(candidate); + if (!normalizedColor) { + const error = new Error('INVALID_AVATAR_COLOR'); + error.code = 'INVALID_AVATAR_COLOR'; + throw error; + } + colorToPersist = normalizedColor; + } + } + + const shouldUpdateGroups = groupId !== undefined || groupIds !== undefined; + let normalizedGroupIds = null; + let nextGroups = null; + if (shouldUpdateGroups) { + const incomingGroupIds = Array.isArray(groupIds) + ? groupIds + : groupId !== undefined && groupId !== null + ? [groupId] + : []; + + normalizedGroupIds = Array.from( + new Set( + incomingGroupIds + .map((value) => Number(value)) + .filter((value) => Number.isFinite(value) && value > 0) + ) + ); + + const missingGroupIds = []; + nextGroups = []; + normalizedGroupIds.forEach((value) => { + const groupRow = selectGroupById.get(value); + if (!groupRow) { + missingGroupIds.push(value); + } else { + nextGroups.push({ id: value, name: groupRow.name }); + } + }); + + if (missingGroupIds.length > 0) { + const error = new Error('GROUP_NOT_FOUND'); + error.code = 'GROUP_NOT_FOUND'; + error.missingGroupIds = missingGroupIds; + throw error; + } + } + + const performUpdate = db.transaction(() => { + updateUserCoreStatement.run( + normalizedUsername, + normalizedEmail, + passwordHash, + passwordSalt, + colorToPersist, + numericUserId + ); + + if (normalizedGroupIds !== null) { + applyUserGroupAssignments(numericUserId, normalizedGroupIds); + } + }); + + performUpdate(); + const updatedUser = getUserById(numericUserId); + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-aktualisiert', + action: 'aktualisieren', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: updatedUser?.username ?? normalizedUsername, + message: `Benutzer "${updatedUser?.username ?? normalizedUsername}" aktualisiert`, + metadata: { + email: updatedUser?.email ?? normalizedEmail ?? null, + groupsUpdated: normalizedGroupIds !== null + ? (updatedUser?.groups?.map((group) => ({ id: group.id, name: group.name })) ?? nextGroups) + : undefined, + previousGroups: normalizedGroupIds !== null + ? (previousUserRecord?.groups || []).map((group) => ({ id: group.id, name: group.name })) + : undefined, + avatarColor: updatedUser?.avatarColor ?? colorToPersist + }, + ...resolveActorFields(actor) + }); + + return updatedUser; +} + +const deleteMembershipsStatement = db.prepare(` + DELETE FROM user_group_memberships + WHERE user_id = ? +`); + +const deleteUserStatement = db.prepare(` + DELETE FROM users + WHERE id = ? +`); + +export function deleteUser(userId, options = {}) { + const actor = options.actor || null; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = selectUserCredentialsById.get(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const superuserMembership = isUserInGroupStatement.get(numericUserId, SUPERUSER_GROUP_NAME); + if (superuserMembership && superuserMembership.has_membership) { + const error = new Error('USER_SUPERUSER_PROTECTED'); + error.code = 'USER_SUPERUSER_PROTECTED'; + throw error; + } + + const performDelete = db.transaction(() => { + deleteMembershipsStatement.run(numericUserId); + deleteUserStatement.run(numericUserId); + }); + + performDelete(); + + logEvent({ + category: 'benutzer', + eventType: 'benutzer-gelöscht', + action: 'gelöscht', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: existingUser.username ?? `ID ${numericUserId}`, + message: `Benutzer "${existingUser.username ?? numericUserId}" gelöscht`, + metadata: { + email: existingUser.email ?? null + }, + ...resolveActorFields(actor) + }); +} + +export function updateUserActiveStatus(userId, isActive, options = {}) { + const actor = options.actor || null; + const numericUserId = Number(userId); + if (!Number.isFinite(numericUserId) || numericUserId <= 0) { + const error = new Error('INVALID_USER_ID'); + error.code = 'INVALID_USER_ID'; + throw error; + } + + const existingUser = selectUserCredentialsById.get(numericUserId); + if (!existingUser) { + const error = new Error('USER_NOT_FOUND'); + error.code = 'USER_NOT_FOUND'; + throw error; + } + + const superuserMembership = isUserInGroupStatement.get(numericUserId, SUPERUSER_GROUP_NAME); + if (superuserMembership && superuserMembership.has_membership && !isActive) { + const error = new Error('USER_SUPERUSER_PROTECTED'); + error.code = 'USER_SUPERUSER_PROTECTED'; + throw error; + } + + const normalizedIsActive = isActive ? 1 : 0; + updateUserActiveStatement.run(normalizedIsActive, numericUserId); + const updated = getUserById(numericUserId); + + logEvent({ + category: 'benutzer', + eventType: normalizedIsActive ? 'benutzer-aktiviert' : 'benutzer-deaktiviert', + action: 'status-aktualisieren', + status: 'erfolgreich', + entityType: 'benutzer', + entityId: String(numericUserId), + entityName: updated?.username ?? existingUser.username ?? `ID ${numericUserId}`, + message: normalizedIsActive + ? `Benutzer "${updated?.username ?? existingUser.username ?? numericUserId}" aktiviert` + : `Benutzer "${updated?.username ?? existingUser.username ?? numericUserId}" deaktiviert`, + metadata: { + isActive: Boolean(normalizedIsActive) + }, + ...resolveActorFields(actor) + }); + + return updated; +} diff --git a/backend/users/securityPhrase.js b/backend/users/securityPhrase.js new file mode 100644 index 0000000..2be8d5e --- /dev/null +++ b/backend/users/securityPhrase.js @@ -0,0 +1,136 @@ +import crypto from 'crypto'; +import { wordlist as englishWordlist } from '@scure/bip39/wordlists/english.js'; + +const FALLBACK_SECRET = 'stackpulse-security-phrase-secret'; + +const WORD_LIST = englishWordlist; + + +const SECURITY_PHRASE_KEY = crypto + .createHash('sha256') + .update(String(process.env.SECURITY_PHRASE_SECRET || FALLBACK_SECRET)) + .digest(); + +const encryptValue = (value) => { + const iv = crypto.randomBytes(12); + const cipher = crypto.createCipheriv('aes-256-gcm', SECURITY_PHRASE_KEY, iv); + const encrypted = Buffer.concat([cipher.update(value, 'utf8'), cipher.final()]); + const tag = cipher.getAuthTag(); + return { + iv: iv.toString('base64'), + content: encrypted.toString('base64'), + tag: tag.toString('base64') + }; +}; + +const decryptValue = ({ content, iv, tag }) => { + if (!content || !iv || !tag) { + return ''; + } + const decipher = crypto.createDecipheriv('aes-256-gcm', SECURITY_PHRASE_KEY, Buffer.from(iv, 'base64')); + decipher.setAuthTag(Buffer.from(tag, 'base64')); + const decrypted = Buffer.concat([ + decipher.update(Buffer.from(content, 'base64')), + decipher.final() + ]); + return decrypted.toString('utf8'); +}; + +export const generateSecurityPhraseWords = (count = 8) => { + const words = []; + for (let i = 0; i < count; i += 1) { + const index = crypto.randomInt(0, WORD_LIST.length); + words.push(WORD_LIST[index]); + } + return words; +}; + +export const encodeWords = (words = []) => { + return words + .map((word) => { + const index = WORD_LIST.indexOf(word); + if (index === -1) { + throw new Error(`SECURITY_PHRASE_WORD_UNKNOWN:${word}`); + } + return String(index); + }) + .join('-'); +}; + +export const decodeWords = (encoded) => { + if (!encoded) { + return []; + } + return encoded.split('-').map((entry) => { + const index = Number(entry); + if (!Number.isFinite(index) || index < 0 || index >= WORD_LIST.length) { + throw new Error('SECURITY_PHRASE_DECODE_FAILED'); + } + return WORD_LIST[index]; + }); +}; + +export const encryptSecurityPhrase = (words) => { + const encoded = encodeWords(words); + const encrypted = encryptValue(encoded); + return { + encrypted, + encoded + }; +}; + +export const decryptSecurityPhrase = (record) => { + if (!record) { + return []; + } + const encoded = decryptValue(record); + if (!encoded) { + return []; + } + return decodeWords(encoded); +}; + +export const formatPhraseForDisplay = (words) => { + const rows = []; + for (let i = 0; i < words.length; i += 4) { + rows.push(words.slice(i, i + 4)); + } + return rows; +}; + +const normalizeWord = (value) => { + if (!value && value !== 0) { + return ''; + } + return String(value).trim().toLowerCase(); +}; + +export const canonicalizeWords = (words = []) => { + return words + .map(normalizeWord) + .filter((word) => word.length > 0) + .join(''); +}; + +export const extractWordsFromString = (input) => { + if (!input && input !== 0) { + return []; + } + const normalized = String(input) + .replace(/[\r\n\t]+/g, ' ') + .trim() + .toLowerCase(); + if (!normalized) { + return []; + } + return normalized.split(/\s+/).filter(Boolean); +}; + +export const canonicalizePhraseInput = (input) => { + if (Array.isArray(input)) { + return canonicalizeWords(input); + } + return canonicalizeWords(extractWordsFromString(input)); +}; + +export default WORD_LIST; diff --git a/docker-compose.yml b/docker-compose.yml index 0bbde2c..509af22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,12 +8,13 @@ services: - "4001:4001" volumes: - stackpulse_data:/app/backend/data - environment: - PORTAINER_URL: "Your_Portainer_Server_Address" - PORTAINER_API_KEY: "Your_Portainer_API_Key" - PORTAINER_ENDPOINT_ID: "Your_Portainer_Endpoint_ID" - SELF_STACK_ID: "Stackpulse ID" restart: unless-stopped - + environment: + - PORTAINER_URL=Your_Portainer_Server_Adress (optional) + - PORTAINER_API_KEY=Your_Portainer_API_Key (optional) + - SUPERUSER_USERNAME=Your_Superuser_Username (optional) + - SUPERUSER_EMAIL=Your_Superuser_Email (optional) + - SUPERUSER_PASSWORD=Your_Superuser_Password (optional) + - SELF_STACK_ID=Your_StackPulse_Stack_ID (optional) volumes: stackpulse_data: diff --git a/frontend/index.html b/frontend/index.html index 844e594..8db8041 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -32,6 +32,8 @@ + +
diff --git a/frontend/reproduce.mjs b/frontend/reproduce.mjs new file mode 100644 index 0000000..13ccfa8 --- /dev/null +++ b/frontend/reproduce.mjs @@ -0,0 +1,17 @@ +import React from 'react'; +import { renderToString } from 'react-dom/server'; +import pkg from '@material-tailwind/react'; +const { Select, Option } = pkg; + +const element = React.createElement(Select, { + label: 'Test', + value: 'b', + selected: (el) => el?.props.children, + onChange: () => {}, + children: [ + React.createElement(Option, { key: 'a', value: 'a' }, 'Alpha'), + React.createElement(Option, { key: 'b', value: 'b' }, 'Beta') + ] +}); + +console.log(renderToString(element)); diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index c76d7af..b6a01ca 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,11 +1,13 @@ import { Routes, Route, Navigate } from "react-router-dom"; import { Dashboard, Auth } from "@/layouts"; +import Setup from "@/pages/setup/setup"; function App() { return ( } /> } /> + } /> } /> ); diff --git a/frontend/src/assets/images/pattern.png b/frontend/src/assets/images/pattern.png new file mode 100644 index 0000000..2b34e46 Binary files /dev/null and b/frontend/src/assets/images/pattern.png differ diff --git a/frontend/src/components/AuthProvider.jsx b/frontend/src/components/AuthProvider.jsx new file mode 100644 index 0000000..dd2a5ec --- /dev/null +++ b/frontend/src/components/AuthProvider.jsx @@ -0,0 +1,172 @@ +import React, { createContext, useCallback, useContext, useMemo, useState } from "react"; + +const LEVEL_PRIORITY = { + none: 0, + read: 1, + full: 2, +}; + +const AuthContext = createContext(null); +AuthContext.displayName = "AuthContext"; + +const normalizePermissions = (raw) => { + if (!raw || typeof raw !== "object" || Array.isArray(raw)) { + return {}; + } + return Object.entries(raw).reduce((acc, [key, value]) => { + if (typeof key !== "string" || !key) { + return acc; + } + const normalizedValue = typeof value === "string" ? value : String(value ?? "").trim(); + acc[key] = normalizedValue || "none"; + return acc; + }, {}); +}; + +export function AuthProvider({ children }) { + const [state, setState] = useState({ + user: null, + permissions: {}, + loading: false, + error: null, + lastErrorCode: null, + initialized: false, + }); + + const setSession = useCallback((payload) => { + const user = payload?.user ?? null; + const permissions = normalizePermissions(payload?.permissions); + setState({ + user, + permissions, + loading: false, + error: null, + lastErrorCode: null, + initialized: true, + }); + }, []); + + const clearSession = useCallback(() => { + setState((prev) => ({ + user: null, + permissions: {}, + loading: false, + error: null, + lastErrorCode: null, + initialized: prev.initialized || true, + })); + }, []); + + const refreshSession = useCallback(async () => { + setState((prev) => ({ + ...prev, + loading: true, + error: null, + lastErrorCode: null, + })); + + try { + const response = await fetch("/api/auth/session", { + credentials: "include", + }); + + const payload = await response.json().catch(() => ({})); + + if (!response.ok) { + setState({ + user: null, + permissions: {}, + loading: false, + error: payload?.error ?? null, + lastErrorCode: payload?.error ?? null, + initialized: true, + }); + return { ok: false, status: response.status, error: payload?.error ?? null }; + } + + setSession(payload); + return { ok: true, data: payload }; + } catch (err) { + const message = err?.message || "NETWORK_ERROR"; + setState({ + user: null, + permissions: {}, + loading: false, + error: message, + lastErrorCode: "NETWORK_ERROR", + initialized: true, + }); + return { ok: false, error: message }; + } + }, [setSession]); + + const logout = useCallback(async () => { + let capturedError = null; + try { + const response = await fetch("/api/auth/logout", { + method: "POST", + credentials: "include", + headers: { "Content-Type": "application/json" }, + }); + if (!response.ok) { + const payload = await response.json().catch(() => ({})); + const logoutError = new Error(payload?.error || "LOGOUT_FAILED"); + logoutError.code = payload?.error || `STATUS_${response.status}`; + throw logoutError; + } + } catch (err) { + capturedError = err; + } finally { + clearSession(); + } + if (capturedError) { + throw capturedError; + } + }, [clearSession]); + + const hasPermission = useCallback( + (permissionKey, requiredLevel = "full") => { + if (!permissionKey) { + return true; + } + if (state.user?.isSuperuser) { + return true; + } + const current = state.permissions?.[permissionKey] ?? "none"; + const currentPriority = LEVEL_PRIORITY[current] ?? 0; + const requiredPriority = LEVEL_PRIORITY[requiredLevel] ?? LEVEL_PRIORITY.full; + return currentPriority >= requiredPriority; + }, + [state.permissions, state.user] + ); + + const value = useMemo( + () => ({ + user: state.user, + permissions: state.permissions, + loading: state.loading, + error: state.error, + lastErrorCode: state.lastErrorCode, + initialized: state.initialized, + isAuthenticated: Boolean(state.user), + refreshSession, + setSession, + clearSession, + logout, + hasPermission, + }), + [state, refreshSession, setSession, clearSession, logout, hasPermission] + ); + + return {children}; +} + +export function useAuth() { + const context = useContext(AuthContext); + if (!context) { + throw new Error("useAuth must be used within an AuthProvider"); + } + return context; +} + +export const AuthContextDisplayName = "/src/components/AuthProvider.jsx"; diff --git a/frontend/src/components/MaintenanceProvider.jsx b/frontend/src/components/MaintenanceProvider.jsx index 0e11a00..ae006eb 100644 --- a/frontend/src/components/MaintenanceProvider.jsx +++ b/frontend/src/components/MaintenanceProvider.jsx @@ -1,5 +1,6 @@ import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; import axios from "axios"; +import { useAuth } from "@/components/AuthProvider.jsx"; const MaintenanceContext = createContext(null); @@ -14,6 +15,8 @@ const INITIAL_STATE = { }; export default function MaintenanceProvider({ children }) { + const { isAuthenticated, hasPermission, user } = useAuth(); + const canAccessMaintenance = Boolean(isAuthenticated && (user?.isSuperuser || hasPermission("maintenance-access", "read"))); const [state, setState] = useState(INITIAL_STATE); const pollingRef = useRef(null); const wasRunningRef = useRef(false); @@ -26,6 +29,10 @@ export default function MaintenanceProvider({ children }) { }, []); const fetchConfig = useCallback(async () => { + if (!canAccessMaintenance) { + applyState({ loading: false, error: "" }); + return null; + } applyState({ loading: true, error: "" }); try { const response = await axios.get("/api/maintenance/config"); @@ -43,9 +50,12 @@ export default function MaintenanceProvider({ children }) { const message = err.response?.data?.error || err.message || "Fehler beim Laden der Wartungsdaten"; applyState({ loading: false, error: message }); } - }, [applyState]); + }, [applyState, canAccessMaintenance]); const refreshUpdateStatus = useCallback(async () => { + if (!canAccessMaintenance) { + return; + } try { const response = await axios.get("/api/maintenance/update-status"); const data = response.data ?? {}; @@ -59,13 +69,20 @@ export default function MaintenanceProvider({ children }) { const message = err.response?.data?.error || err.message || "Fehler beim Aktualisieren des Wartungsstatus"; setState((prev) => ({ ...prev, error: message })); } - }, []); + }, [canAccessMaintenance]); useEffect(() => { + if (!canAccessMaintenance) { + applyState({ loading: false, error: "" }); + return; + } fetchConfig(); - }, [fetchConfig]); + }, [applyState, fetchConfig, canAccessMaintenance]); useEffect(() => { + if (!canAccessMaintenance) { + return undefined; + } if (state.update?.running) { refreshUpdateStatus(); const intervalId = setInterval(() => { @@ -79,15 +96,15 @@ export default function MaintenanceProvider({ children }) { pollingRef.current = null; } return undefined; - }, [state.update?.running, refreshUpdateStatus]); + }, [canAccessMaintenance, state.update?.running, refreshUpdateStatus]); useEffect(() => { const currentlyRunning = Boolean(state.update?.running); - if (!currentlyRunning && wasRunningRef.current) { + if (canAccessMaintenance && !currentlyRunning && wasRunningRef.current) { fetchConfig(); } wasRunningRef.current = currentlyRunning; - }, [state.update?.running, fetchConfig]); + }, [canAccessMaintenance, state.update?.running, fetchConfig]); const triggerUpdate = useCallback(async (payload = {}) => { await axios.post("/api/maintenance/portainer-update", payload); @@ -131,6 +148,40 @@ export default function MaintenanceProvider({ children }) { return response.data; }, []); + const fetchSuperuserStatus = useCallback(async () => { + const response = await axios.get("/api/auth/superuser/status"); + const data = response.data ?? {}; + return { + exists: Boolean(data.exists), + user: data.user ?? null + }; + }, []); + + const fetchSetupStatus = useCallback(async () => { + const response = await axios.get("/api/setup/status"); + return response.data ?? {}; + }, []); + + const deleteSetupServer = useCallback(async (serverId) => { + const response = await axios.delete(`/api/setup/servers/${serverId}`); + return response.data ?? { success: false }; + }, []); + + const updateSetupApiKey = useCallback(async (serverId, apiKey) => { + const response = await axios.put(`/api/setup/servers/${serverId}/api-key`, { apiKey }); + return response.data ?? { success: false }; + }, []); + + const updateSelfStackId = useCallback(async (selfStackId) => { + const response = await axios.put("/api/setup/self-stack", { selfStackId }); + return response.data ?? { success: false }; + }, []); + + const removeSuperuserAccount = useCallback(async () => { + const response = await axios.delete("/api/auth/superuser"); + return response.data ?? { success: false }; + }, []); + const value = useMemo(() => ({ maintenance: state.maintenance, update: state.update, @@ -147,8 +198,14 @@ export default function MaintenanceProvider({ children }) { resetScript, saveSshConfig, deleteSshConfig, - testSshConnection - }), [state, fetchConfig, refreshUpdateStatus, setMaintenanceMode, triggerUpdate, saveScript, resetScript, saveSshConfig, deleteSshConfig, testSshConnection]); + testSshConnection, + fetchSuperuserStatus, + fetchSetupStatus, + deleteSetupServer, + updateSetupApiKey, + updateSelfStackId, + removeSuperuserAccount + }), [state, fetchConfig, refreshUpdateStatus, setMaintenanceMode, triggerUpdate, saveScript, resetScript, saveSshConfig, deleteSshConfig, testSshConnection, fetchSuperuserStatus, fetchSetupStatus, deleteSetupServer, updateSetupApiKey, updateSelfStackId, removeSuperuserAccount]); return ( diff --git a/frontend/src/components/PermissionGate.jsx b/frontend/src/components/PermissionGate.jsx new file mode 100644 index 0000000..ac75083 --- /dev/null +++ b/frontend/src/components/PermissionGate.jsx @@ -0,0 +1,58 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { Typography, Card, CardBody } from "@material-tailwind/react"; +import { useAuth } from "@/components/AuthProvider.jsx"; + +export function PermissionGate({ + permission, + requiredLevel = "full", + loadingFallback = null, + children, +}) { + const { initialized, loading, hasPermission } = useAuth(); + + if (!permission) { + return children; + } + + if (!initialized || loading) { + return ( + loadingFallback ?? ( +
+ + Berechtigungen werden geladen … + +
+ ) + ); + } + + if (hasPermission(permission, requiredLevel)) { + return children; + } + + return ( +
+ + + + Kein Zugriff auf diesen Bereich + + + Für diese Funktion wird die Berechtigung {permission} benötigt. + + + +
+ ); +} + +PermissionGate.propTypes = { + permission: PropTypes.string, + requiredLevel: PropTypes.string, + loadingFallback: PropTypes.node, + children: PropTypes.node.isRequired, +}; + +export default PermissionGate; + diff --git a/frontend/src/data/avatarColors.js b/frontend/src/data/avatarColors.js new file mode 100644 index 0000000..96060e6 --- /dev/null +++ b/frontend/src/data/avatarColors.js @@ -0,0 +1,14 @@ +export const AVATAR_COLORS = [ + "bg-arcticBlue-600", + "bg-copperRust-500", + "bg-sunsetCoral-600", + "bg-mintTea-400", + "bg-lavenderSmoke-500", + "bg-emeraldMist-500", + "bg-roseQuartz-500", + "bg-auroraTeal-500", + "bg-citrusPunch-500", + "bg-mossGreen-400" +]; + +export const DEFAULT_AVATAR_COLOR = "bg-mossGreen-500"; diff --git a/frontend/src/layouts/auth.jsx b/frontend/src/layouts/auth.jsx index c7a2116..96e00f3 100644 --- a/frontend/src/layouts/auth.jsx +++ b/frontend/src/layouts/auth.jsx @@ -7,7 +7,6 @@ import { } from "@heroicons/react/24/solid"; import { Navbar, Footer } from "@/widgets/layout"; import routes from "@/routes"; - export function Auth() { const navbarRoutes = [ { diff --git a/frontend/src/layouts/dashboard.jsx b/frontend/src/layouts/dashboard.jsx index bab6f89..8b76115 100644 --- a/frontend/src/layouts/dashboard.jsx +++ b/frontend/src/layouts/dashboard.jsx @@ -1,4 +1,5 @@ -import { Routes, Route } from "react-router-dom"; +import { useEffect, useState, useCallback } from "react"; +import { Routes, Route, useLocation, useNavigate } from "react-router-dom"; import { Cog6ToothIcon } from "@heroicons/react/24/solid"; import { IconButton } from "@material-tailwind/react"; import { @@ -8,32 +9,182 @@ import { Footer, } from "@/widgets/layout"; import routes from "@/routes"; +import { UserDetails } from "@/pages/dashboard/userDetails.jsx"; +import { UserGroupDetail } from "@/pages/dashboard/userGroupDetail.jsx"; +import { SecurityPhrase } from "@/pages/dashboard/securityPhrase.jsx"; import { useMaterialTailwindController, setOpenConfigurator } from "@/components"; +import { useAuth } from "@/components/AuthProvider.jsx"; +import PermissionGate from "@/components/PermissionGate.jsx"; export function Dashboard() { const [controller, dispatch] = useMaterialTailwindController(); const { sidenavType } = controller; + const location = useLocation(); + const navigate = useNavigate(); + const [setupChecked, setSetupChecked] = useState(false); + const [setupIncomplete, setSetupIncomplete] = useState(true); + const { + initialized: authInitialized, + loading: authLoading, + isAuthenticated, + refreshSession, + user + } = useAuth(); + + const checkSetupStatus = useCallback(async () => { + setSetupChecked(false); + try { + const response = await fetch("/api/setup/status", { credentials: "include" }); + if (!response.ok) { + throw new Error("STATUS_REQUEST_FAILED"); + } + const data = await response.json(); + setSetupIncomplete(!data.setupComplete); + } catch (error) { + console.error("⚠️ [Setup] Statusprüfung fehlgeschlagen:", error); + setSetupIncomplete(true); + } finally { + setSetupChecked(true); + } + }, []); + + useEffect(() => { + checkSetupStatus(); + }, [checkSetupStatus]); + + useEffect(() => { + if (!setupChecked || setupIncomplete) return; + if (authInitialized || authLoading) return; + refreshSession(); + }, [setupChecked, setupIncomplete, authInitialized, authLoading, refreshSession]); + + useEffect(() => { + if (!setupChecked) return; + + if (setupIncomplete) { + if (location.pathname !== "/setup") { + navigate("/setup", { replace: true }); + } + return; + } + + if (!authInitialized) return; + + if (!isAuthenticated) { + if (location.pathname !== "/auth/sign-in") { + navigate("/auth/sign-in", { replace: true }); + } + return; + } + + const requiresSecurityPhrase = Boolean(user?.requiresSecurityPhraseDownload); + const isSecurityPhrasePath = location.pathname === "/dashboard/security-phrase"; + + if (requiresSecurityPhrase && !isSecurityPhrasePath) { + navigate("/dashboard/security-phrase", { replace: true }); + return; + } + + if (!requiresSecurityPhrase && isSecurityPhrasePath) { + navigate("/dashboard/stacks", { replace: true }); + } + }, [ + setupChecked, + setupIncomplete, + authInitialized, + isAuthenticated, + location.pathname, + navigate, + user?.requiresSecurityPhraseDownload + ]); + + useEffect(() => { + if (!setupChecked || setupIncomplete) return; + if (!authInitialized || authLoading) return; + + if (!isAuthenticated) { + if (location.pathname !== "/auth/sign-in") { + navigate("/auth/sign-in", { replace: true }); + } + return; + } + + const isAuthPath = location.pathname.startsWith("/auth/"); + const isLogoutPath = location.pathname === "/auth/logout"; + + if (location.pathname === "/setup" || (isAuthPath && !isLogoutPath)) { + navigate("/dashboard/stacks", { replace: true }); + } + }, [ + setupChecked, + setupIncomplete, + authInitialized, + authLoading, + isAuthenticated, + location.pathname, + navigate + ]); + + if (!setupChecked) { + return ( +
+ Pruefe Systemkonfiguration ... +
+ ); + } + + if (setupIncomplete) { + return ( +
+ Setup erforderlich ... +
+ ); + } + + if (!authInitialized || authLoading) { + return ( +
+ Pruefe Anmeldung ... +
+ ); + } + + if (!isAuthenticated) { + return ( +
+ Weiterleitung zur Anmeldung ... +
+ ); + } + + const isSecurityPhraseRoute = location.pathname === "/dashboard/security-phrase"; return (
- -
- - - setOpenConfigurator(dispatch, true)} - > - - + {!isSecurityPhraseRoute && ( + + )} +
+ {!isSecurityPhraseRoute && ( + <> + + + setOpenConfigurator(dispatch, true)} + > + + + + )} {routes.map( ({ layout, pages }) => @@ -42,10 +193,29 @@ export function Dashboard() { )) )} + } /> + + + + } + /> + + + + } + /> -
-
-
+ {!isSecurityPhraseRoute && ( +
+
+
+ )}
); diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 7afb7e0..47615c3 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -10,6 +10,7 @@ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. */ import React from "react"; +import axios from "axios"; import ReactDOM from "react-dom/client"; import App from "./App"; import { BrowserRouter } from "react-router-dom"; @@ -19,21 +20,26 @@ import "./tailwind.css"; import ToastProvider from "@/components/ToastProvider.jsx"; import MaintenanceProvider from "@/components/MaintenanceProvider.jsx"; import PageProvider from "@/components/PageProvider.jsx"; +import { AuthProvider } from "@/components/AuthProvider.jsx"; + +axios.defaults.withCredentials = true; ReactDOM.createRoot(document.getElementById("root")).render( - - - - - - - - - - - + + + + + + + + + + + + + ); diff --git a/frontend/src/pages/auth/forgot-password.jsx b/frontend/src/pages/auth/forgot-password.jsx new file mode 100644 index 0000000..2db1169 --- /dev/null +++ b/frontend/src/pages/auth/forgot-password.jsx @@ -0,0 +1,408 @@ +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import axios from "axios"; +import { + Card, + CardBody, + CardHeader, + Typography, + Input, + Button, + Spinner, + Alert +} from "@material-tailwind/react"; +import { useNavigate } from "react-router-dom"; +import { useToast } from "@/components/ToastProvider.jsx"; +import { useAuth } from "@/components/AuthProvider.jsx"; + +const PHRASE_WORD_COUNT = 8; + +const normalizeWord = (value) => String(value || "").trim().toLowerCase(); + +const extractWordsFromText = (text = "") => { + const normalized = String(text || "").replace(/[\r\n\t]+/g, " ").trim().toLowerCase(); + if (!normalized) { + return []; + } + return normalized.split(/\s+/).filter(Boolean); +}; + +const buildPhrasePayload = (words = []) => { + const normalized = words.map(normalizeWord).filter(Boolean); + return { + words: normalized, + canonical: normalized.join("") + }; +}; + +export function ForgotPassword() { + const navigate = useNavigate(); + const { showToast } = useToast(); + const { user } = useAuth(); + + const [username, setUsername] = useState(""); + const [phraseInputs, setPhraseInputs] = useState(Array(PHRASE_WORD_COUNT).fill("")); + const [fileName, setFileName] = useState(""); + const [fileContent, setFileContent] = useState(""); + const [verificationError, setVerificationError] = useState(""); + const [verifying, setVerifying] = useState(false); + const [verificationToken, setVerificationToken] = useState(""); + + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [resetting, setResetting] = useState(false); + const [resetError, setResetError] = useState(""); + + useEffect(() => { + if (user) { + navigate("/dashboard/stacks", { replace: true }); + } + }, [user, navigate]); + + const phraseWords = useMemo(() => { + if (fileContent.trim()) { + return extractWordsFromText(fileContent); + } + return phraseInputs.map(normalizeWord).filter(Boolean); + }, [fileContent, phraseInputs]); + + const handlePhraseInputChange = useCallback((index, value) => { + setPhraseInputs((prev) => { + const next = [...prev]; + next[index] = value; + return next; + }); + }, []); + + const handleFileUpload = useCallback((event) => { + const [file] = event.target.files || []; + if (!file) { + setFileName(""); + setFileContent(""); + return; + } + setFileName(file.name); + const reader = new FileReader(); + reader.onload = (loadEvent) => { + const text = String(loadEvent.target?.result || ""); + setFileContent(text); + setPhraseInputs(Array(PHRASE_WORD_COUNT).fill("")); + }; + reader.onerror = () => { + setFileName(""); + setFileContent(""); + showToast({ + variant: "error", + title: "Datei konnte nicht gelesen werden", + description: "Bitte lade die Datei erneut hoch." + }); + }; + reader.readAsText(file); + }, [showToast]); + + const handleVerifyPhrase = useCallback(async () => { + setVerificationError(""); + setVerificationToken(""); + + const trimmedUsername = username.trim(); + if (!trimmedUsername) { + setVerificationError("Bitte gib deinen Benutzernamen ein."); + return; + } + + const words = phraseWords; + const hasFile = Boolean(fileContent.trim()); + + if (!hasFile && words.length !== PHRASE_WORD_COUNT) { + setVerificationError("Bitte gib alle acht Wörter des Sicherheitsschlüssels ein."); + return; + } + + if (hasFile && words.length !== PHRASE_WORD_COUNT) { + setVerificationError("Die hochgeladene Datei enthält nicht genau acht Wörter."); + return; + } + + const payload = buildPhrasePayload(words); + if (!payload.canonical) { + setVerificationError("Der Sicherheitsschlüssel ist ungültig oder leer."); + return; + } + + setVerifying(true); + try { + const response = await axios.post("/api/auth/recover/verify", { + username: trimmedUsername, + phrase: payload.canonical, + words: payload.words + }); + + const responseToken = response.data?.token; + if (!responseToken) { + throw new Error("TOKEN_MISSING"); + } + setVerificationToken(responseToken); + showToast({ + variant: "success", + title: "Sicherheitsschlüssel bestätigt", + description: "Du kannst jetzt ein neues Passwort festlegen." + }); + } catch (error) { + const serverError = error.response?.data?.error; + if (serverError === "USER_NOT_FOUND") { + setVerificationError("Der angegebene Benutzer wurde nicht gefunden."); + } else if (serverError === "PHRASE_MISMATCH") { + setVerificationError("Der Sicherheitsschlüssel passt nicht zum Benutzer."); + } else if (serverError === "PHRASE_NOT_INITIALIZED") { + setVerificationError("Für diesen Benutzer ist aktuell kein Sicherheitsschlüssel hinterlegt."); + } else if (serverError === "PHRASE_REQUIRED") { + setVerificationError("Bitte gib den Sicherheitsschlüssel ein."); + } else if (serverError === "USERNAME_REQUIRED") { + setVerificationError("Der Benutzername darf nicht leer sein."); + } else if (serverError === "INVALID_PASSWORD") { + setVerificationError("Der Sicherheitsschlüssel ist ungültig."); + } else { + setVerificationError("Die Sicherheitsprüfung ist fehlgeschlagen. Bitte versuche es erneut."); + } + } finally { + setVerifying(false); + } + }, [fileContent, phraseWords, showToast, username]); + + const handleResetPassword = useCallback(async () => { + setResetError(""); + + if (!verificationToken) { + setResetError("Bitte bestätige zuerst deinen Sicherheitsschlüssel."); + return; + } + + const trimmedPassword = password.trim(); + const trimmedConfirm = confirmPassword.trim(); + + if (!trimmedPassword || !trimmedConfirm) { + setResetError("Bitte gib das neue Passwort zweimal ein."); + return; + } + + if (trimmedPassword !== trimmedConfirm) { + setResetError("Die Passwörter stimmen nicht überein."); + return; + } + + setResetting(true); + try { + await axios.post("/api/auth/recover/reset", { + token: verificationToken, + password: trimmedPassword, + confirmPassword: trimmedConfirm + }); + showToast({ + variant: "success", + title: "Passwort aktualisiert", + description: "Du kannst dich jetzt mit deinem neuen Passwort anmelden." + }); + navigate("/auth/sign-in", { replace: true }); + } catch (error) { + const serverError = error.response?.data?.error; + if (serverError === "TOKEN_INVALID_OR_EXPIRED") { + setResetError("Die Wiederherstellungssitzung ist abgelaufen. Bitte starte den Vorgang erneut."); + setVerificationToken(""); + } else if (serverError === "PASSWORD_TOO_SHORT") { + setResetError("Das Passwort muss mindestens 8 Zeichen enthalten."); + } else if (serverError === "PASSWORD_REQUIRED") { + setResetError("Bitte gib ein neues Passwort ein."); + } else if (serverError === "PASSWORD_MISMATCH") { + setResetError("Die Passwörter stimmen nicht überein."); + } else { + setResetError("Das Passwort konnte nicht zurückgesetzt werden. Bitte versuche es erneut."); + } + } finally { + setResetting(false); + } + }, [confirmPassword, navigate, password, showToast, verificationToken]); + + const verificationCompleted = Boolean(verificationToken); + + return ( +
+ + + + Passwort zurücksetzen + + + Gib deinen Benutzernamen und den Sicherheitsschlüssel (8 Wörter) ein oder lade die gespeicherte Schlüsseldatei. + + + +
+ + Schritt 1: Sicherheitsschlüssel prüfen + +
+ + Benutzername + + setUsername(event.target.value)} + disabled={verificationCompleted || verifying} + className=" !border-t-blue-gray-200 focus:!border-t-gray-900" + labelProps={{ className: "before:content-none after:content-none" }} + /> +
+ +
+ + Sicherheitsschlüssel eingeben + +
+ {phraseInputs.map((value, index) => ( + handlePhraseInputChange(index, event.target.value)} + disabled={verificationCompleted || verifying || Boolean(fileContent.trim())} + className=" !border-t-blue-gray-200 focus:!border-t-gray-900" + labelProps={{ className: "before:content-none after:content-none" }} + /> + ))} +
+
+ +
+ + Alternativ: Schlüsseldatei (.txt) hochladen + +
+ + {fileName && ( + + Ausgewählte Datei: {fileName} + + )} +
+
+ + {verificationError && ( + + {verificationError} + + )} + +
+ + {verificationCompleted && ( + + Die Wiederherstellung bleibt für kurze Zeit aktiv. Bitte setze dein Passwort zeitnah zurück. + + )} +
+
+ + {/* Schritt 2 */} +
+ + Schritt 2: Neues Passwort festlegen + + + {!verificationCompleted && ( + + Nach erfolgreicher Prüfung des Sicherheitsschlüssels kannst du hier ein neues Passwort vergeben. + + )} + + {verificationCompleted && ( +
+
+ + Neues Passwort + + setPassword(event.target.value)} + disabled={resetting} + className=" !border-t-blue-gray-200 focus:!border-t-gray-900" + labelProps={{ className: "before:content-none after:content-none" }} + /> +
+
+ + Passwort bestätigen + + setConfirmPassword(event.target.value)} + disabled={resetting} + className=" !border-t-blue-gray-200 focus:!border-t-gray-900" + labelProps={{ className: "before:content-none after:content-none" }} + /> +
+ {resetError && ( + + {resetError} + + )} + +
+ )} +
+ +
+ navigate("/auth/sign-in")} + className="text-sm font-medium text-blue-600 transition hover:text-blue-800" + > + Zurück zur Anmeldung + +
+
+
+
+ ); +} + +export default ForgotPassword; diff --git a/frontend/src/pages/auth/index.js b/frontend/src/pages/auth/index.js index ca1bbcb..818646c 100644 --- a/frontend/src/pages/auth/index.js +++ b/frontend/src/pages/auth/index.js @@ -1,2 +1,4 @@ export * from "@/pages/auth/sign-in"; export * from "@/pages/auth/sign-up"; +export * from "@/pages/auth/sign-out"; +export * from "@/pages/auth/forgot-password"; diff --git a/frontend/src/pages/auth/sign-in.jsx b/frontend/src/pages/auth/sign-in.jsx index 3b3da41..9b190ce 100644 --- a/frontend/src/pages/auth/sign-in.jsx +++ b/frontend/src/pages/auth/sign-in.jsx @@ -1,124 +1,227 @@ +import { useCallback, useEffect, useState } from "react"; import { - Card, Input, - Checkbox, Button, Typography, + Alert, } from "@material-tailwind/react"; -import { Link } from "react-router-dom"; - +import { useNavigate } from "react-router-dom"; +import pattern from "@/assets/images/pattern.png"; +import { useAuth } from "@/components/AuthProvider.jsx"; export function SignIn() { + const navigate = useNavigate(); + const { setSession, refreshSession } = useAuth(); + const [identifier, setIdentifier] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const [statusChecked, setStatusChecked] = useState(false); + + useEffect(() => { + let isActive = true; + const controller = new AbortController(); + + const initialize = async () => { + try { + const setupResponse = await fetch("/api/setup/status", { + credentials: "include", + signal: controller.signal, + }); + + if (setupResponse.ok) { + const setupData = await setupResponse.json(); + if (!setupData.setupComplete && isActive) { + navigate("/setup", { replace: true }); + return; + } + } + + const sessionResponse = await fetch("/api/auth/session", { + credentials: "include", + signal: controller.signal, + }); + + if (sessionResponse.ok) { + const sessionData = await sessionResponse.json(); + if (sessionData?.user) { + setSession(sessionData); + } + if (sessionData?.user && isActive) { + const requiresSecurityPhrase = Boolean(sessionData.user.requiresSecurityPhraseDownload); + navigate(requiresSecurityPhrase ? "/dashboard/security-phrase" : "/dashboard/stacks", { replace: true }); + return; + } + } + } catch (err) { + if (err.name !== "AbortError") { + console.error("⚠️ [Auth] Initiale Prüfung fehlgeschlagen:", err); + } + } finally { + if (isActive) { + setStatusChecked(true); + } + } + }; + + initialize(); + + return () => { + isActive = false; + controller.abort(); + }; + }, [navigate, setSession]); + + const handleSubmit = useCallback( + async (event) => { + event.preventDefault(); + if (loading) return; + + setError(null); + + const trimmedIdentifier = identifier.trim(); + const trimmedPassword = password.trim(); + + if (!trimmedIdentifier || !trimmedPassword) { + setError("Bitte fülle beide Felder aus."); + return; + } + + setLoading(true); + try { + const response = await fetch("/api/auth/login", { + method: "POST", + headers: { "Content-Type": "application/json" }, + credentials: "include", + body: JSON.stringify({ identifier: trimmedIdentifier, password: trimmedPassword }), + }); + + const payload = await response.json().catch(() => ({})); + + if (!response.ok) { + if (response.status === 401 || payload.error === "INVALID_CREDENTIALS") { + setError("Ungültige Zugangsdaten."); + } else if (payload.error === "MISSING_CREDENTIALS") { + setError("Bitte fülle beide Felder aus."); + } else if (payload.error === "SETUP_REQUIRED" || payload.error === "SUPERUSER_REQUIRED") { + navigate("/setup", { replace: true }); + return; + } else if (payload.error === "USER_INACTIVE") { + setError("Dieses Konto ist deaktiviert. Bitte wende dich an einen Administrator."); + } else { + setError("Anmeldung fehlgeschlagen. Bitte versuche es erneut."); + } + return; + } + + let sessionPayload = null; + + if (payload?.user) { + setSession(payload); + sessionPayload = payload; + } else { + const refreshed = await refreshSession(); + if (refreshed?.ok && refreshed?.data?.user) { + sessionPayload = refreshed.data; + } + } + + const requiresSecurityPhrase = Boolean(sessionPayload?.user?.requiresSecurityPhraseDownload); + navigate(requiresSecurityPhrase ? "/dashboard/security-phrase" : "/dashboard/stacks", { replace: true }); + } catch (err) { + console.error("⚠️ [Auth] Anmeldung fehlgeschlagen:", err); + setError("Netzwerkfehler – bitte erneut versuchen."); + } finally { + setLoading(false); + } + }, + [identifier, password, loading, navigate, refreshSession, setSession] + ); + + if (!statusChecked) { + return ( +
+ Pruefe Anmeldestatus ... +
+ ); + } + return (
- Sign In - Enter your email and password to Sign In. + + Anmelden + + + Gib deine E-Mail oder deinen Benutzernamen sowie dein Passwort ein, um dich anzumelden. +
-
+
- Your email + E-Mail oder Benutzername setIdentifier(event.target.value)} + required + autoFocus + disabled={loading} className=" !border-t-blue-gray-200 focus:!border-t-gray-900" labelProps={{ className: "before:content-none after:content-none", }} /> - Password + Passwort setPassword(event.target.value)} + required + disabled={loading} className=" !border-t-blue-gray-200 focus:!border-t-gray-900" labelProps={{ className: "before:content-none after:content-none", }} />
- - I agree the  - - Terms and Conditions - - - } - containerProps={{ className: "-ml-2.5" }} - /> - -
- - Subscribe me to newsletter - - } - containerProps={{ className: "-ml-2.5" }} - /> - - - Forgot Password - - -
-
- - -
- - Not registered? - Create account + {error && ( + + {error} + + )} + + + navigate("/auth/forgot-password")} + className="mt-4 text-sm font-medium text-blue-600 transition hover:text-blue-800" + > + Passwort vergessen? -
- +
-
); } diff --git a/frontend/src/pages/auth/sign-out.jsx b/frontend/src/pages/auth/sign-out.jsx new file mode 100644 index 0000000..c6189c9 --- /dev/null +++ b/frontend/src/pages/auth/sign-out.jsx @@ -0,0 +1,63 @@ +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { Card, CardBody, Typography, Spinner } from "@material-tailwind/react"; +import { useAuth } from "@/components/AuthProvider.jsx"; + +export function SignOut() { + const navigate = useNavigate(); + const { logout } = useAuth(); + const [status, setStatus] = useState("abmelden..."); + const [error, setError] = useState(null); + + useEffect(() => { + let cancelled = false; + + const performLogout = async () => { + try { + setStatus("Abmeldung läuft …"); + setError(null); + await logout(); + } catch (err) { + if (!cancelled) { + console.error("⚠️ [Auth] Logout fehlgeschlagen:", err); + setError("Abmeldung fehlgeschlagen. Bitte versuche es erneut."); + } + } finally { + if (!cancelled) { + navigate("/auth/sign-in", { replace: true }); + } + } + }; + + performLogout(); + + return () => { + cancelled = true; + }; + }, [logout, navigate]); + + return ( +
+ + +
+ + + {status} + +
+ {error && ( + + {error} + + )} + + Du wirst automatisch weitergeleitet … + +
+
+
+ ); +} + +SignOut.displayName = "/src/pages/auth/sign-out.jsx"; diff --git a/frontend/src/pages/dashboard/home.jsx b/frontend/src/pages/dashboard/home.jsx index 2c70066..f8c1965 100644 --- a/frontend/src/pages/dashboard/home.jsx +++ b/frontend/src/pages/dashboard/home.jsx @@ -26,10 +26,41 @@ import { ordersOverviewData, } from "@/data"; import { CheckCircleIcon, ClockIcon } from "@heroicons/react/24/solid"; +import { useMaintenance } from "@/components/MaintenanceProvider.jsx"; + +const UPDATE_STAGE_LABELS = { + initializing: "Vorbereitung", + "activating-maintenance": "Wartungsmodus aktivieren", + "executing-script": "Skript wird ausgeführt", + waiting: "Warte auf Portainer", + completed: "Abgeschlossen", + failed: "Fehlgeschlagen" +}; export function Home() { + const { maintenance: maintenanceMeta, update: updateState } = useMaintenance(); + const maintenanceActive = Boolean(maintenanceMeta?.active); + const maintenanceMessage = maintenanceMeta?.message; + const updateRunning = Boolean(updateState?.running); + const updateStageLabel = updateState?.stage ? (UPDATE_STAGE_LABELS[updateState.stage] ?? updateState.stage) : "–"; + const maintenanceLocked = maintenanceActive || updateRunning; + return (
+ {(maintenanceActive || updateRunning) && ( +
+
+ + Wartungsmodus aktiv{maintenanceMessage ? ` – ${maintenanceMessage}` : updateRunning ? " – Portainer-Update läuft" : ""}. + + {updateRunning && ( + + Phase: {updateStageLabel} + + )} +
+
+ )}
{statisticsCardsData.map(({ icon, title, footer, ...rest }) => ( - + { @@ -100,28 +97,44 @@ const normalizeDateParam = (value) => { return value.replace("T", " "); }; -const FILTER_STORAGE_KEY = "redeployLogFilters"; +const FILTER_STORAGE_KEY = "eventLogFilters"; const ALL_OPTION_VALUE = "__all__"; const ALL_OPTION_LABEL = "- Alle -"; -const REDEPLOY_TYPE_LABELS = { - Einzeln: "Einzeln", - Alle: "Alle", - Auswahl: "Auswahl", - single: "Einzeln", - all: "Alle", - selection: "Auswahl" -}; - const hasActiveFilters = (filters) => Boolean( - (filters.stacks && filters.stacks.length) || + (filters.categories && filters.categories.length) || + (filters.eventTypes && filters.eventTypes.length) || + (filters.actions && filters.actions.length) || (filters.statuses && filters.statuses.length) || - (filters.endpoints && filters.endpoints.length) || - (filters.redeployTypes && filters.redeployTypes.length) || - (filters.message && filters.message.trim()) || + (filters.entityTypes && filters.entityTypes.length) || + (filters.contextTypes && filters.contextTypes.length) || + (filters.entityId && filters.entityId.trim()) || + (filters.contextId && filters.contextId.trim()) || + (filters.search && filters.search.trim()) || (filters.from && filters.from.trim()) || (filters.to && filters.to.trim()) ); +const formatMetadataValue = (value) => { + if (value === null || value === undefined) return "-"; + if (typeof value === "object") { + try { + return JSON.stringify(value); + } catch (err) { + return "[Objekt]"; + } + } + return String(value); +}; + +const summarizeMetadata = (metadata) => { + if (!metadata || typeof metadata !== "object") return ""; + const entries = Object.entries(metadata); + if (!entries.length) return ""; + return entries + .map(([key, value]) => `${key}: ${formatMetadataValue(value)}`) + .join(" • "); +}; + export function Logs() { @@ -130,16 +143,22 @@ export function Logs() { const [error, setError] = useState(""); const [actionLoading, setActionLoading] = useState(false); - const [stackOptions, setStackOptions] = useState([]); + const [categoryOptions, setCategoryOptions] = useState([]); + const [eventTypeOptions, setEventTypeOptions] = useState([]); + const [actionOptions, setActionOptions] = useState([]); const [statusOptions, setStatusOptions] = useState([]); - const [endpointOptions, setEndpointOptions] = useState([]); - const [redeployTypeOptions, setRedeployTypeOptions] = useState([]); + const [entityTypeOptions, setEntityTypeOptions] = useState([]); + const [contextTypeOptions, setContextTypeOptions] = useState([]); - const [selectedStacks, setSelectedStacks] = useState([]); + const [selectedCategories, setSelectedCategories] = useState([]); + const [selectedEventTypes, setSelectedEventTypes] = useState([]); + const [selectedActions, setSelectedActions] = useState([]); const [selectedStatuses, setSelectedStatuses] = useState([]); - const [selectedEndpoints, setSelectedEndpoints] = useState([]); - const [selectedRedeployTypes, setSelectedRedeployTypes] = useState([]); - const [messageQuery, setMessageQuery] = useState(""); + const [selectedEntityTypes, setSelectedEntityTypes] = useState([]); + const [selectedContextTypes, setSelectedContextTypes] = useState([]); + const [entityIdQuery, setEntityIdQuery] = useState(""); + const [contextIdQuery, setContextIdQuery] = useState(""); + const [searchQuery, setSearchQuery] = useState(""); const [fromDate, setFromDate] = useState(""); const [toDate, setToDate] = useState(""); @@ -148,20 +167,20 @@ export function Logs() { const [optionsInitialized, setOptionsInitialized] = useState(false); const [refreshSignal, setRefreshSignal] = useState(0); - const { showToast } = useToast(); - const { - maintenance: maintenanceMeta, - update: updateState, - script: scriptConfig, - ssh: sshConfig, - } = useMaintenance(); - - const maintenanceActive = Boolean(maintenanceMeta?.active); - const maintenanceMessage = maintenanceMeta?.message; - const updateRunning = Boolean(updateState?.running); - const maintenanceLocked = maintenanceActive || updateRunning; - const updateStageLabel = updateState?.stage ? (UPDATE_STAGE_LABELS[updateState.stage] ?? updateState.stage) : "–"; - + const { + maintenance: maintenanceMeta, + update: updateState + } = useMaintenance(); + + const maintenanceActive = Boolean(maintenanceMeta?.active); + const maintenanceMessage = maintenanceMeta?.message; + const updateRunning = Boolean(updateState?.running); + const maintenanceLocked = maintenanceActive || updateRunning; + const updateStageLabel = updateState?.stage ? (UPDATE_STAGE_LABELS[updateState.stage] ?? updateState.stage) : "–"; + const { hasPermission } = useAuth(); + const canDeleteLogs = hasPermission("logs-delete", "full"); + const canExportLogs = hasPermission("logs-export", "full"); + const { page, @@ -182,59 +201,54 @@ export function Logs() { const updateFilterOptions = useCallback((payload) => { const logsPayload = Array.isArray(payload) ? payload : payload?.items ?? []; - const stackMap = new Map(); + const categorySet = new Set(); + const eventTypeSet = new Set(); + const actionSet = new Set(); const statusSet = new Set(); - const endpointSet = new Set(); - const redeployTypeSet = new Set(); + const entityTypeSet = new Set(); + const contextTypeSet = new Set(); logsPayload.forEach((log) => { - if (log.stackId) { - const value = String(log.stackId); - const label = log.stackName || `Stack ${value}`; - stackMap.set(value, label); - } - - if (log.status) { - statusSet.add(log.status); - } - - if (log.endpoint !== null && log.endpoint !== undefined && log.endpoint !== "") { - endpointSet.add(String(log.endpoint)); - } - - if (log.redeployType) { - redeployTypeSet.add(log.redeployType); - } + if (log.category) categorySet.add(log.category); + if (log.eventType) eventTypeSet.add(log.eventType); + if (log.action) actionSet.add(log.action); + if (log.status) statusSet.add(log.status); + if (log.entityType) entityTypeSet.add(log.entityType); + if (log.contextType) contextTypeSet.add(log.contextType); }); - setStackOptions(Array.from(stackMap.entries()) - .map(([value, label]) => ({ value, label })) - .sort((a, b) => a.label.localeCompare(b.label))); - + setCategoryOptions(Array.from(categorySet).sort()); + setEventTypeOptions(Array.from(eventTypeSet).sort()); + setActionOptions(Array.from(actionSet).sort()); setStatusOptions(Array.from(statusSet).sort()); - - setEndpointOptions(Array.from(endpointSet) - .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))); - - setRedeployTypeOptions(Array.from(redeployTypeSet).sort()); + setEntityTypeOptions(Array.from(entityTypeSet).sort()); + setContextTypeOptions(Array.from(contextTypeSet).sort()); setOptionsInitialized(true); }, []); - const stackLabelMap = useMemo(() => { - const map = new Map(); - stackOptions.forEach((option) => { - map.set(option.value, option.label); + useEffect(() => { + if (!optionsInitialized) return; + setSelectedCategories((prev) => { + const valid = prev.filter((value) => categoryOptions.includes(value)); + return valid.length === prev.length ? prev : valid; }); - return map; - }, [stackOptions]); + }, [optionsInitialized, categoryOptions]); useEffect(() => { if (!optionsInitialized) return; - setSelectedStacks((prev) => { - const valid = prev.filter((value) => stackOptions.some((option) => option.value === value)); + setSelectedEventTypes((prev) => { + const valid = prev.filter((value) => eventTypeOptions.includes(value)); return valid.length === prev.length ? prev : valid; }); - }, [optionsInitialized, stackOptions]); + }, [optionsInitialized, eventTypeOptions]); + + useEffect(() => { + if (!optionsInitialized) return; + setSelectedActions((prev) => { + const valid = prev.filter((value) => actionOptions.includes(value)); + return valid.length === prev.length ? prev : valid; + }); + }, [optionsInitialized, actionOptions]); useEffect(() => { if (!optionsInitialized) return; @@ -246,19 +260,19 @@ export function Logs() { useEffect(() => { if (!optionsInitialized) return; - setSelectedEndpoints((prev) => { - const valid = prev.filter((value) => endpointOptions.includes(value)); + setSelectedEntityTypes((prev) => { + const valid = prev.filter((value) => entityTypeOptions.includes(value)); return valid.length === prev.length ? prev : valid; }); - }, [optionsInitialized, endpointOptions]); + }, [optionsInitialized, entityTypeOptions]); useEffect(() => { if (!optionsInitialized) return; - setSelectedRedeployTypes((prev) => { - const valid = prev.filter((value) => redeployTypeOptions.includes(value)); + setSelectedContextTypes((prev) => { + const valid = prev.filter((value) => contextTypeOptions.includes(value)); return valid.length === prev.length ? prev : valid; }); - }, [optionsInitialized, redeployTypeOptions]); + }, [optionsInitialized, contextTypeOptions]); useEffect(() => { if (typeof window === "undefined") { @@ -273,11 +287,15 @@ export function Logs() { const storedFilters = parsed?.filters ?? parsed ?? {}; const storedPagination = parsed?.pagination ?? {}; - setSelectedStacks(storedFilters.stacks || []); + setSelectedCategories(storedFilters.categories || []); + setSelectedEventTypes(storedFilters.eventTypes || []); + setSelectedActions(storedFilters.actions || []); setSelectedStatuses(storedFilters.statuses || []); - setSelectedEndpoints(storedFilters.endpoints || []); - setSelectedRedeployTypes(storedFilters.redeployTypes || []); - setMessageQuery(storedFilters.message || ""); + setSelectedEntityTypes(storedFilters.entityTypes || []); + setSelectedContextTypes(storedFilters.contextTypes || []); + setEntityIdQuery(storedFilters.entityId || ""); + setContextIdQuery(storedFilters.contextId || ""); + setSearchQuery(storedFilters.search || ""); setFromDate(storedFilters.from || ""); setToDate(storedFilters.to || ""); setFiltersOpen(hasActiveFilters(storedFilters)); @@ -305,24 +323,40 @@ export function Logs() { const buildFilterParams = useCallback(() => { const params = {}; - if (selectedStacks.length) { - params.stackIds = selectedStacks.join(","); + if (selectedCategories.length) { + params.categories = selectedCategories.join(","); + } + + if (selectedEventTypes.length) { + params.eventTypes = selectedEventTypes.join(","); + } + + if (selectedActions.length) { + params.actions = selectedActions.join(","); } if (selectedStatuses.length) { params.statuses = selectedStatuses.join(","); } - if (selectedEndpoints.length) { - params.endpoints = selectedEndpoints.join(","); + if (selectedEntityTypes.length) { + params.entityTypes = selectedEntityTypes.join(","); } - if (selectedRedeployTypes.length) { - params.redeployTypes = selectedRedeployTypes.join(","); + if (selectedContextTypes.length) { + params.contextTypes = selectedContextTypes.join(","); } - if (messageQuery.trim()) { - params.message = messageQuery.trim(); + if (entityIdQuery.trim()) { + params.entityId = entityIdQuery.trim(); + } + + if (contextIdQuery.trim()) { + params.contextId = contextIdQuery.trim(); + } + + if (searchQuery.trim()) { + params.search = searchQuery.trim(); } const fromParam = normalizeDateParam(fromDate); @@ -336,7 +370,19 @@ export function Logs() { } return params; - }, [selectedStacks, selectedStatuses, selectedEndpoints, selectedRedeployTypes, messageQuery, fromDate, toDate]); + }, [ + selectedCategories, + selectedEventTypes, + selectedActions, + selectedStatuses, + selectedEntityTypes, + selectedContextTypes, + entityIdQuery, + contextIdQuery, + searchQuery, + fromDate, + toDate + ]); useEffect(() => { if (!filtersReady) return; @@ -358,14 +404,30 @@ export function Logs() { }, [filtersReady, updateFilterOptions, refreshSignal]); const currentFilters = useMemo(() => ({ - stacks: selectedStacks, + categories: selectedCategories, + eventTypes: selectedEventTypes, + actions: selectedActions, statuses: selectedStatuses, - endpoints: selectedEndpoints, - redeployTypes: selectedRedeployTypes, - message: messageQuery, + entityTypes: selectedEntityTypes, + contextTypes: selectedContextTypes, + entityId: entityIdQuery, + contextId: contextIdQuery, + search: searchQuery, from: fromDate, to: toDate - }), [selectedStacks, selectedStatuses, selectedEndpoints, selectedRedeployTypes, messageQuery, fromDate, toDate]); + }), [ + selectedCategories, + selectedEventTypes, + selectedActions, + selectedStatuses, + selectedEntityTypes, + selectedContextTypes, + entityIdQuery, + contextIdQuery, + searchQuery, + fromDate, + toDate + ]); useEffect(() => { if (!filtersReady) return; @@ -406,7 +468,7 @@ export function Logs() { .catch((err) => { if (cancelled) return; console.error("❌ Fehler beim Laden der Logs:", err); - setError("Fehler beim Laden der Redeploy-Logs"); + setError("Fehler beim Laden der Logs"); }) .finally(() => { if (cancelled) return; @@ -474,10 +536,12 @@ export function Logs() { setPage(1); }, [setPage]); - const selectStacks = useMemo(() => handleMultiSelectChange(setSelectedStacks), [handleMultiSelectChange, setSelectedStacks]); - const selectStatuses = useMemo(() => handleMultiSelectChange(setSelectedStatuses), [handleMultiSelectChange, setSelectedStatuses]); - const selectRedeployTypes = useMemo(() => handleMultiSelectChange(setSelectedRedeployTypes), [handleMultiSelectChange, setSelectedRedeployTypes]); - const selectEndpoints = useMemo(() => handleMultiSelectChange(setSelectedEndpoints), [handleMultiSelectChange, setSelectedEndpoints]); + const selectCategories = useMemo(() => handleMultiSelectChange(setSelectedCategories), [handleMultiSelectChange]); + const selectEventTypes = useMemo(() => handleMultiSelectChange(setSelectedEventTypes), [handleMultiSelectChange]); + const selectActions = useMemo(() => handleMultiSelectChange(setSelectedActions), [handleMultiSelectChange]); + const selectStatuses = useMemo(() => handleMultiSelectChange(setSelectedStatuses), [handleMultiSelectChange]); + const selectEntityTypes = useMemo(() => handleMultiSelectChange(setSelectedEntityTypes), [handleMultiSelectChange]); + const selectContextTypes = useMemo(() => handleMultiSelectChange(setSelectedContextTypes), [handleMultiSelectChange]); const removeFilterValue = (setter, value) => { setter((prev) => prev.filter((entry) => entry !== value)); @@ -485,11 +549,15 @@ export function Logs() { }; const handleResetFilters = () => { - setSelectedStacks([]); + setSelectedCategories([]); + setSelectedEventTypes([]); + setSelectedActions([]); setSelectedStatuses([]); - setSelectedEndpoints([]); - setSelectedRedeployTypes([]); - setMessageQuery(""); + setSelectedEntityTypes([]); + setSelectedContextTypes([]); + setEntityIdQuery(""); + setContextIdQuery(""); + setSearchQuery(""); setFromDate(""); setToDate(""); setFiltersOpen(false); @@ -500,57 +568,53 @@ export function Logs() { setFiltersOpen((prev) => !prev); }; - const stackSelectOptions = useMemo(() => { - const entries = stackOptions.filter((option) => option.value !== ALL_OPTION_VALUE); - return [ - { value: ALL_OPTION_VALUE, label: ALL_OPTION_LABEL }, - ...entries - ]; - }, [stackOptions]); + const createSelectOptions = useCallback((values) => ([ + { value: ALL_OPTION_VALUE, label: ALL_OPTION_LABEL }, + ...values + .filter((value) => value !== ALL_OPTION_VALUE) + .map((value) => ({ value, label: value })) + ]), []); - const statusSelectOptions = useMemo(() => { - const entries = statusOptions - .filter((status) => status !== ALL_OPTION_VALUE) - .map((status) => ({ value: status, label: status })); - return [ - { value: ALL_OPTION_VALUE, label: ALL_OPTION_LABEL }, - ...entries - ]; - }, [statusOptions]); - - const endpointSelectOptions = useMemo(() => { - const entries = endpointOptions - .filter((endpoint) => endpoint !== ALL_OPTION_VALUE) - .map((endpoint) => ({ value: endpoint, label: endpoint })); - return [ - { value: ALL_OPTION_VALUE, label: ALL_OPTION_LABEL }, - ...entries - ]; - }, [endpointOptions]); - - const redeployTypeSelectOptions = useMemo(() => { - const entries = redeployTypeOptions - .filter((type) => type !== ALL_OPTION_VALUE) - .map((type) => ({ value: type, label: REDEPLOY_TYPE_LABELS[type] ?? type })); - return [ - { value: ALL_OPTION_VALUE, label: ALL_OPTION_LABEL }, - ...entries - ]; - }, [redeployTypeOptions]); + const categorySelectOptions = useMemo(() => createSelectOptions(categoryOptions), [createSelectOptions, categoryOptions]); + const eventTypeSelectOptions = useMemo(() => createSelectOptions(eventTypeOptions), [createSelectOptions, eventTypeOptions]); + const actionSelectOptions = useMemo(() => createSelectOptions(actionOptions), [createSelectOptions, actionOptions]); + const statusSelectOptions = useMemo(() => createSelectOptions(statusOptions), [createSelectOptions, statusOptions]); + const entityTypeSelectOptions = useMemo(() => createSelectOptions(entityTypeOptions), [createSelectOptions, entityTypeOptions]); + const contextTypeSelectOptions = useMemo(() => createSelectOptions(contextTypeOptions), [createSelectOptions, contextTypeOptions]); const activeFilterCount = useMemo(() => { let count = 0; - if (selectedStacks.length) count += selectedStacks.length; + if (selectedCategories.length) count += selectedCategories.length; + if (selectedEventTypes.length) count += selectedEventTypes.length; + if (selectedActions.length) count += selectedActions.length; if (selectedStatuses.length) count += selectedStatuses.length; - if (selectedEndpoints.length) count += selectedEndpoints.length; - if (selectedRedeployTypes.length) count += selectedRedeployTypes.length; - if (messageQuery.trim()) count += 1; + if (selectedEntityTypes.length) count += selectedEntityTypes.length; + if (selectedContextTypes.length) count += selectedContextTypes.length; + if (entityIdQuery.trim()) count += 1; + if (contextIdQuery.trim()) count += 1; + if (searchQuery.trim()) count += 1; if (fromDate) count += 1; if (toDate) count += 1; return count; - }, [selectedStacks, selectedStatuses, selectedEndpoints, messageQuery, fromDate, toDate]); + }, [ + selectedCategories, + selectedEventTypes, + selectedActions, + selectedStatuses, + selectedEntityTypes, + selectedContextTypes, + entityIdQuery, + contextIdQuery, + searchQuery, + fromDate, + toDate + ]); const handleDeleteLog = async (id) => { + if (!canDeleteLogs) { + setError("Dir fehlt die Berechtigung, einzelne Logeinträge zu löschen."); + return; + } if (!window.confirm("Diesen Log-Eintrag dauerhaft löschen?")) return; setActionLoading(true); setError(""); @@ -559,13 +623,17 @@ export function Logs() { setRefreshSignal((prev) => prev + 1); } catch (err) { console.error("❌ Fehler beim Löschen des Logs:", err); - setError("Fehler beim Löschen des Redeploy-Logs"); + setError("Fehler beim Löschen des Logs"); } finally { setActionLoading(false); } }; const handleDeleteFiltered = async () => { + if (!canDeleteLogs) { + setError("Dir fehlt die Berechtigung, Logs zu löschen."); + return; + } if (!logs.length) return; if (!window.confirm("Alle angezeigten Logs (entsprechend Filter) löschen?")) return; setActionLoading(true); @@ -586,6 +654,10 @@ export function Logs() { }; const handleExport = async (format) => { + if (!canExportLogs) { + setError("Dir fehlt die Berechtigung, Logs zu exportieren."); + return; + } setActionLoading(true); setError(""); try { @@ -597,7 +669,7 @@ export function Logs() { const contentType = response.headers["content-type"] || (format === "sql" ? "application/sql" : "text/plain"); const disposition = response.headers["content-disposition"] || ""; const match = disposition.match(/filename="?([^";]+)"?/i); - const filename = match?.[1] || `redeploy-logs.${format}`; + const filename = match?.[1] || `event-logs.${format}`; const blob = new Blob([response.data], { type: contentType }); const url = window.URL.createObjectURL(blob); @@ -610,7 +682,7 @@ export function Logs() { window.URL.revokeObjectURL(url); } catch (err) { console.error("❌ Fehler beim Export der Logs:", err); - setError("Fehler beim Export der Redeploy-Logs"); + setError("Fehler beim Export der Logs"); } finally { setActionLoading(false); } @@ -621,28 +693,29 @@ export function Logs() { const toggleOpen = () => setOpen((cur) => !cur); return (
- {(maintenanceActive || updateRunning) && (
-
- - Wartungsmodus aktiv{maintenanceMessage ? ` – ${maintenanceMessage}` : updateRunning ? " – Portainer-Update läuft" : ""}. - - {updateRunning && ( - - Phase: {updateStageLabel} + {(maintenanceActive || updateRunning) && ( +
+
+ + Wartungsmodus aktiv{maintenanceMessage ? ` – ${maintenanceMessage}` : updateRunning ? " – Portainer-Update läuft" : ""}. - )} + {updateRunning && ( + + Phase: {updateStageLabel} + + )} +
-
)} - + - + {filtersOpen && ( -
+
-
- - - -
+ {(canExportLogs || canDeleteLogs) && ( +
+ {canExportLogs && ( + <> + + + + )} + {canDeleteLogs && ( + + )} +
+ )} -
-
- -
- {selectedStacks.length === 0 ? ( - - Alle Stacks - - ) : ( - - {selectedStacks.map((stackId) => ( - - ))} - - )} +
+
+
+ +
+ {selectedCategories.length === 0 ? ( + + Alle Kategorien + + ) : ( + + {selectedCategories.map((category) => ( + + ))} + + )} +
+
+
+ +
+ {selectedEventTypes.length === 0 ? ( + + Alle Event-Typen + + ) : ( + + {selectedEventTypes.map((eventType) => ( + + ))} + + )} +
-
- -
- {selectedStatuses.length === 0 ? ( - - Alle Status - - ) : ( - - {selectedStatuses.map((status) => ( - - ))} - - )} +
+
+ +
+ {selectedActions.length === 0 ? ( + + Alle Aktionen + + ) : ( + + {selectedActions.map((action) => ( + + ))} + + )} +
+
+
+ +
+ {selectedStatuses.length === 0 ? ( + + Alle Status + + ) : ( + + {selectedStatuses.map((status) => ( + + ))} + + )} +
-
- -
- {selectedRedeployTypes.length === 0 ? ( - - Alle Typen - - ) : ( - - {selectedRedeployTypes.map((type) => ( - - ))} - - )} +
+
+ +
+ {selectedEntityTypes.length === 0 ? ( + + Alle Entitäten + + ) : ( + + {selectedEntityTypes.map((entityType) => ( + + ))} + + )} +
+
+
+ +
+ {selectedContextTypes.length === 0 ? ( + + Alle Kontexte + + ) : ( + + {selectedContextTypes.map((contextType) => ( + + ))} + + )} +
-
- -
- {selectedEndpoints.length === 0 ? ( - - Alle Endpoints - - ) : ( - - {selectedEndpoints.map((endpoint) => ( - - ))} - - )} +
+
+ { + setEntityIdQuery(event.target.value); + setPage(1); + }} + variant="static" + label="Entitäts-ID" + placeholder="z. B. Stack-ID" + /> +
+
+ { + setContextIdQuery(event.target.value); + setPage(1); + }} + variant="static" + label="Kontext-ID" + placeholder="z. B. Server-ID" + />
-
-
-
- { - setMessageQuery(event.target.value); - setPage(1); - }} - variant="static" - label="Nachricht (Freitext)" - placeholder="Suche" /> +
+
+ { + setSearchQuery(event.target.value); + setPage(1); + }} + variant="static" + label="Suche (Nachricht & Details)" + placeholder="Freitext" + /> +
+
+ +
-
- -
-
-
-
- { - setFromDate(event.target.value); - setPage(1); - }} - className="w-full" - /> -
-
- { - setToDate(event.target.value); - setPage(1); - }} - className="w-full" - /> -
-
- +
+
+ { + setFromDate(event.target.value); + setPage(1); + }} + className="w-full" + /> +
+
+ { + setToDate(event.target.value); + setPage(1); + }} + className="w-full" + /> +
+
+ +
)} - - - - - - - Logs - - - - - - - {["Zeitpunkt", "Stack", "Art", "Status", "Nachricht", "Endpoint", "Aktionen"].map((el) => ( - + + + ) : ( + logs.map((log, index) => { + const statusClass = STATUS_COLORS[log.status] || "text-blue-300"; + const rowClass = index === logs.length - 1 ? "" : "border-b border-blue-gray-50"; + const categoryLabel = log.category || "-"; + const entityPrimary = log.entityName || log.entityId || "-"; + const entityDetails = []; + if (log.entityName && log.entityId) { + entityDetails.push(`ID: ${log.entityId}`); + } else if (!log.entityName && log.entityId) { + entityDetails.push(`ID: ${log.entityId}`); + } + if (log.entityType) { + entityDetails.push(log.entityType); + } + const contextPrimary = log.contextLabel || log.contextType || (log.contextId ? `#${log.contextId}` : "-"); + const contextDetails = []; + if (log.contextType) { + contextDetails.push(log.contextType); + } + if (log.contextId) { + contextDetails.push(`#${log.contextId}`); + } + const metadataSummary = summarizeMetadata(log.metadata); + const detailSegments = []; + if (log.actorName || log.actorId) { + const actorLabel = log.actorName ? log.actorName : `#${log.actorId}`; + const suffix = log.actorName && log.actorId ? ` (#${log.actorId})` : ""; + detailSegments.push(`Akteur: ${actorLabel}${suffix}`); + } + if (log.source) { + detailSegments.push(`Quelle: ${log.source}`); + } + if (metadataSummary) { + detailSegments.push(metadataSummary); + } + if (!detailSegments.length) { + detailSegments.push("-"); + } + + return ( + + + + + + + + + + + ); + }) + )} + +
- +
+ + + + {["Zeitpunkt", "Kategorie", "Status", "Entität", "Kontext", "Nachricht", "Details", "Aktionen"].map((el) => ( + - ))} - - - - {logs.map((log) => { - const statusClass = STATUS_COLORS[log.status] || "text-blue-300"; - const className = "py-3 px-5"; - const stackDisplayName = log.stackName || "Unbekannt"; - const showStackId = stackDisplayName !== '---' && log.stackId !== undefined && log.stackId !== null; - const redeployTypeLabel = log.redeployType - ? (REDEPLOY_TYPE_LABELS[log.redeployType] ?? log.redeployType) - : '---'; - return ( - - - - - - - - + + + {loading ? ( + + - ); - } - )} - -
{el} - -
- - {formatTimestamp(log.timestamp)} - - -
- {stackDisplayName} - - {showStackId && ( - ID: {log.stackId} - )} - -
-
- - {redeployTypeLabel} - - - - {log.status} - - - - {log.message || "-"} - - - - {log.endpoint ?? "-"} - - - - - + + ))} +
+ Logs werden geladen ...
+ ) : logs.length === 0 ? ( +
+ Keine Logs gefunden. +
+ + {formatTimestamp(log.timestamp)} + + +
+ {categoryLabel} +
+ {log.eventType && ( + + {log.eventType} + + )} + {log.action && ( + + {log.action} + + )} +
+
+
+ + {log.status || "-"} + + {log.severity && ( + + {log.severity} + + )} + +
+ {entityPrimary} + {entityDetails.length > 0 && ( +
+ {entityDetails.map((entry) => ( + {entry} + ))} +
+ )} +
+
+
+ {contextPrimary} + {contextDetails.length > 0 && ( +
+ {contextDetails.map((entry) => ( + {entry} + ))} +
+ )} +
+
+ + {log.message || "-"} + + +
+ {detailSegments.map((entry, idx) => ( + {entry} + ))} +
+
+ {canDeleteLogs && ( + + + + )} +
+
+
+ + {""} + + +
-
diff --git a/frontend/src/pages/dashboard/maintenance.jsx b/frontend/src/pages/dashboard/maintenance.jsx index 5562dd4..77aba5b 100644 --- a/frontend/src/pages/dashboard/maintenance.jsx +++ b/frontend/src/pages/dashboard/maintenance.jsx @@ -1,7 +1,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import axios from "axios"; -import { useToast } from "@/components/ToastProvider.jsx"; import { useMaintenance } from "@/components/MaintenanceProvider"; +import { useAuth } from "@/components/AuthProvider.jsx"; import { Typography, @@ -9,7 +9,9 @@ import { CardHeader, CardBody, Button, - Switch + Switch, + Input, + Alert } from "@material-tailwind/react"; const UPDATE_STATUS_LABELS = { @@ -109,7 +111,8 @@ const createEmptySshDraft = () => ({ }); export function Maintenance() { - const { showToast } = useToast(); + const { hasPermission, user: authUser } = useAuth(); + const showToast = useCallback(() => { }, []); const { maintenance: maintenanceMeta, update: updateState, @@ -123,13 +126,34 @@ export function Maintenance() { resetScript, saveSshConfig, deleteSshConfig, - testSshConnection + testSshConnection, + fetchSuperuserStatus, + fetchSetupStatus, + deleteSetupServer, + updateSetupApiKey, + updateSelfStackId, + removeSuperuserAccount } = useMaintenance(); + const isSuperuserAccount = Boolean(authUser?.isSuperuser); + const canViewMaintenance = Boolean(isSuperuserAccount || hasPermission("maintenance-access", "read")); + const canControlMaintenance = Boolean(isSuperuserAccount || hasPermission("maintenance-access", "full")); + const canViewServers = Boolean(isSuperuserAccount || hasPermission("maintenance-server-manage", "read")); + const canEditServers = Boolean(isSuperuserAccount || hasPermission("maintenance-server-manage", "full")); + const canDeleteServers = Boolean(isSuperuserAccount || hasPermission("maintenance-server-delete", "full")); + const canDeleteSuperuser = Boolean(isSuperuserAccount || hasPermission("maintenance-superuser-delete", "full")); + const canViewPortainer = Boolean(isSuperuserAccount || hasPermission("maintenance-portainer", "read")); + const canManagePortainerUpdate = Boolean(isSuperuserAccount || hasPermission("maintenance-update", "full")); + const canViewSsh = Boolean(isSuperuserAccount || hasPermission("maintenance-ssh-update", "read")); + const canManageSsh = Boolean(isSuperuserAccount || hasPermission("maintenance-ssh-update", "full")); + const canViewDuplicates = Boolean(isSuperuserAccount || hasPermission("maintenance-duplicates", "read")); + const canManageDuplicates = Boolean(isSuperuserAccount || hasPermission("maintenance-duplicates", "full")); + const maintenanceActive = Boolean(maintenanceMeta?.active); const maintenanceMessage = maintenanceMeta?.message; const maintenanceExtraType = maintenanceMeta?.extra?.type; const updateRunning = Boolean(updateState?.running); + const maintenanceLocked = maintenanceActive || updateRunning; const [scriptDraft, setScriptDraft] = useState(""); const [scriptSaving, setScriptSaving] = useState(false); @@ -182,6 +206,21 @@ export function Maintenance() { const scriptIsDirty = scriptConfig ? scriptDraft !== scriptBaseline : false; const scriptSourceLabel = scriptConfig?.source === "custom" ? "Benutzerdefiniert" : "Standard"; + const [superuserStatusLoading, setSuperuserStatusLoading] = useState(true); + const [superuserExists, setSuperuserExists] = useState(false); + const [superuserSummary, setSuperuserSummary] = useState(null); + const [superuserStatusError, setSuperuserStatusError] = useState(""); + const [superuserDeleteLoading, setSuperuserDeleteLoading] = useState(false); + const [setupResources, setSetupResources] = useState(null); + const [setupResourcesLoading, setSetupResourcesLoading] = useState(true); + const [setupResourcesError, setSetupResourcesError] = useState(""); + const [apiKeyDrafts, setApiKeyDrafts] = useState({}); + const [apiKeyUpdatingId, setApiKeyUpdatingId] = useState(null); + const [serverDeleteId, setServerDeleteId] = useState(null); + const [selfStackDraft, setSelfStackDraft] = useState(""); + const [selfStackSaving, setSelfStackSaving] = useState(false); + const [selfStackError, setSelfStackError] = useState(""); + const [duplicates, setDuplicates] = useState([]); const [duplicatesLoading, setDuplicatesLoading] = useState(true); const [duplicatesError, setDuplicatesError] = useState(""); @@ -197,6 +236,51 @@ export function Maintenance() { const [portainerUpdatedAt, setPortainerUpdatedAt] = useState(null); const portainerRequestRef = useRef(null); + const loadSuperuserStatus = useCallback(async ({ silent = false } = {}) => { + setSuperuserStatusLoading(true); + setSuperuserStatusError(""); + try { + const data = await fetchSuperuserStatus(); + const exists = Boolean(data?.exists); + setSuperuserExists(exists); + setSuperuserSummary(exists ? data.user ?? null : null); + } catch (err) { + const message = err.response?.data?.error || err.message || "Superuser-Status konnte nicht geladen werden"; + setSuperuserExists(false); + setSuperuserSummary(null); + setSuperuserStatusError(message); + if (!silent) { + showToast({ variant: "error", title: "Statusabfrage fehlgeschlagen", description: message }); + } + } finally { + setSuperuserStatusLoading(false); + } + }, [fetchSuperuserStatus, showToast]); + + const loadSetupResources = useCallback(async ({ silent = false } = {}) => { + if (!silent) { + setSetupResourcesLoading(true); + } + setSetupResourcesError(""); + try { + const data = await fetchSetupStatus(); + setSetupResources(data); + setApiKeyDrafts({}); + } catch (err) { + const message = err.response?.data?.error || err.message || "Setup-Daten konnten nicht geladen werden"; + setSetupResourcesError(message); + if (!silent) { + showToast({ + variant: "error", + title: "Setup-Daten", + description: message + }); + } + } finally { + setSetupResourcesLoading(false); + } + }, [fetchSetupStatus, showToast]); + const fetchPortainerStatus = useCallback(async ({ silent = false } = {}) => { if (portainerRequestRef.current) { return portainerRequestRef.current; @@ -285,6 +369,14 @@ export function Maintenance() { return requestPromise; }, [maintenanceActive, updateRunning, showToast]); + useEffect(() => { + loadSuperuserStatus({ silent: true }); + }, [loadSuperuserStatus]); + + useEffect(() => { + loadSetupResources(); + }, [loadSetupResources]); + useEffect(() => { fetchPortainerStatus(); }, [fetchPortainerStatus]); @@ -293,6 +385,23 @@ export function Maintenance() { fetchDuplicates(); }, [fetchDuplicates]); + const setupServers = useMemo(() => setupResources?.servers?.items ?? [], [setupResources]); + const apiKeyInfoMap = useMemo(() => { + const items = setupResources?.apiKeys?.items ?? []; + return new Map(items.map((entry) => [entry.serverId, entry])); + }, [setupResources]); + const setupComplete = useMemo(() => Boolean(setupResources?.setupComplete), [setupResources]); + const selfStackInfo = setupResources?.selfStack ?? null; + const currentSelfStackValue = selfStackInfo?.current ?? ""; + const envSelfStackValue = setupResources?.envDefaults?.selfStackId ?? ""; + + useEffect(() => { + setSelfStackDraft(currentSelfStackValue || ""); + setSelfStackError(""); + }, [currentSelfStackValue]); + + const selfStackDirty = selfStackDraft !== currentSelfStackValue; + const totals = useMemo(() => { const groups = Array.isArray(duplicates) ? duplicates.length : 0; const duplicateCount = Array.isArray(duplicates) @@ -302,11 +411,12 @@ export function Maintenance() { }, [duplicates]); const handleSshDraftChange = useCallback((field, value) => { + if (!canManageSsh) return; setSshDraft((prev) => ({ ...prev, [field]: value })); if (field === 'password') { setSshPasswordStored(false); } - }, []); + }, [canManageSsh]); const normalizedSshDraft = useMemo(() => { const normalized = { @@ -330,6 +440,7 @@ export function Maintenance() { }, [sshDraft, sshPasswordStored]); const handleScriptSave = useCallback(async () => { + if (!canManageSsh) return; if (!scriptConfig) return; try { setScriptSaving(true); @@ -345,9 +456,10 @@ export function Maintenance() { } finally { setScriptSaving(false); } - }, [saveScript, scriptDraft, scriptConfig, showToast]); + }, [canManageSsh, saveScript, scriptDraft, scriptConfig, showToast]); const handleScriptReset = useCallback(async () => { + if (!canManageSsh) return; try { setScriptSaving(true); await resetScript(); @@ -362,9 +474,10 @@ export function Maintenance() { } finally { setScriptSaving(false); } - }, [resetScript, showToast]); + }, [canManageSsh, resetScript, showToast]); const handleSshSaveConfig = useCallback(async () => { + if (!canManageSsh) return; try { setSshSaving(true); await saveSshConfig(normalizedSshDraft); @@ -381,9 +494,10 @@ export function Maintenance() { } finally { setSshSaving(false); } - }, [normalizedSshDraft, saveSshConfig, showToast]); + }, [canManageSsh, normalizedSshDraft, saveSshConfig, showToast]); const handleSshTestConnection = useCallback(async () => { + if (!canManageSsh) return; try { setSshTesting(true); const result = await testSshConnection(normalizedSshDraft); @@ -400,9 +514,10 @@ export function Maintenance() { } finally { setSshTesting(false); } - }, [normalizedSshDraft, testSshConnection, showToast]); + }, [canManageSsh, normalizedSshDraft, testSshConnection, showToast]); const handleSshDeleteConfig = useCallback(async () => { + if (!canManageSsh) return; try { setSshDeleting(true); await deleteSshConfig(); @@ -421,9 +536,222 @@ export function Maintenance() { } finally { setSshDeleting(false); } - }, [deleteSshConfig, showToast]); + }, [canManageSsh, deleteSshConfig, showToast]); + + const handleSuperuserDelete = useCallback(async () => { + if (!canDeleteSuperuser || superuserDeleteLoading || superuserStatusLoading || !superuserExists) { + return; + } + + if (typeof window !== "undefined") { + const confirmed = window.confirm( + "Superuser und zugehörige Gruppe wirklich löschen?\nDies setzt die Superuser-Einrichtung zurück." + ); + if (!confirmed) { + return; + } + } + + try { + setSuperuserDeleteLoading(true); + const response = await removeSuperuserAccount(); + const removedUsers = Number(response?.usersRemoved ?? 0); + showToast({ + variant: "success", + title: "Superuser gelöscht", + description: removedUsers > 1 + ? `${removedUsers} Konten aus der Superuser-Gruppe wurden entfernt.` + : "Superuser-Konto wurde entfernt." + }); + await loadSuperuserStatus({ silent: true }); + } catch (err) { + const status = err.response?.status; + if (status === 404) { + await loadSuperuserStatus({ silent: true }); + showToast({ + variant: "info", + title: "Kein Superuser vorhanden", + description: "Es ist kein Superuser mehr vorhanden." + }); + } else { + const message = err.response?.data?.error || err.message || "Superuser konnte nicht gelöscht werden"; + showToast({ variant: "error", title: "Löschen fehlgeschlagen", description: message }); + } + } finally { + setSuperuserDeleteLoading(false); + } + }, [canDeleteSuperuser, superuserDeleteLoading, superuserStatusLoading, superuserExists, removeSuperuserAccount, loadSuperuserStatus, showToast]); + + const handleDeleteServer = useCallback(async (serverId) => { + if (!canDeleteServers) { + return; + } + if (serverDeleteId === serverId) { + return; + } + const target = setupServers.find((entry) => entry.id === serverId); + if (!target) { + return; + } + const label = target.name || target.url || `Server ${serverId}`; + const confirmMessage = [ + `Server "${label}" wirklich löschen?`, + "Das System benötigt anschließend erneut einen gültigen Server im Setup." + ].filter(Boolean).join("\n"); + + if (typeof window !== "undefined") { + const confirmed = window.confirm(confirmMessage); + if (!confirmed) { + return; + } + } + + setServerDeleteId(serverId); + try { + await deleteSetupServer(serverId); + showToast({ + variant: "success", + title: "Server gelöscht", + description: `Server "${label}" wurde entfernt.` + }); + await loadSetupResources({ silent: true }); + } catch (err) { + const message = err.response?.data?.error || err.message || "Server konnte nicht gelöscht werden."; + showToast({ + variant: "error", + title: "Server löschen fehlgeschlagen", + description: message + }); + } finally { + setServerDeleteId(null); + } + }, [canDeleteServers, deleteSetupServer, loadSetupResources, serverDeleteId, setupServers, showToast]); + + const handleApiKeyDraftChange = useCallback((serverId, value) => { + if (!canEditServers) return; + setApiKeyDrafts((prev) => ({ + ...prev, + [serverId]: value + })); + }, [canEditServers]); + + const handleApiKeyUpdate = useCallback(async (serverId) => { + if (!canEditServers) { + return; + } + const draft = (apiKeyDrafts[serverId] ?? "").trim(); + if (!draft) { + showToast({ + variant: "warning", + title: "API-Key fehlt", + description: "Bitte gib einen API-Key ein." + }); + return; + } + if (apiKeyUpdatingId === serverId) { + return; + } + + setApiKeyUpdatingId(serverId); + try { + await updateSetupApiKey(serverId, draft); + showToast({ + variant: "success", + title: "API-Key aktualisiert", + description: "Der API-Key wurde gespeichert." + }); + setApiKeyDrafts((prev) => ({ + ...prev, + [serverId]: "" + })); + await loadSetupResources({ silent: true }); + } catch (err) { + const message = err.response?.data?.error || err.message || "API-Key konnte nicht aktualisiert werden."; + showToast({ + variant: "error", + title: "Aktualisierung fehlgeschlagen", + description: message + }); + } finally { + setApiKeyUpdatingId(null); + } + }, [apiKeyDrafts, apiKeyUpdatingId, canEditServers, loadSetupResources, showToast, updateSetupApiKey]); + + const handleSelfStackDraftChange = useCallback((value) => { + if (!canEditServers) return; + setSelfStackDraft(value); + setSelfStackError(""); + }, [canEditServers]); + + const handleSelfStackSave = useCallback(async () => { + if (!canEditServers || !selfStackDirty) { + return; + } + setSelfStackSaving(true); + setSelfStackError(""); + const normalizedValue = typeof selfStackDraft === "string" ? selfStackDraft.trim() : ""; + try { + await updateSelfStackId(normalizedValue); + showToast({ + variant: "success", + title: "Self-Stack-ID gespeichert", + description: normalizedValue + ? `Self-Stack-ID wurde auf "${normalizedValue}" gesetzt.` + : "Self-Stack-ID wurde entfernt." + }); + await loadSetupResources({ silent: true }); + } catch (err) { + const message = err.response?.data?.error || err.message || "Self-Stack-ID konnte nicht aktualisiert werden."; + setSelfStackError(message); + showToast({ + variant: "error", + title: "Self-Stack-ID", + description: message + }); + } finally { + setSelfStackSaving(false); + } + }, [canEditServers, loadSetupResources, selfStackDirty, selfStackDraft, showToast, updateSelfStackId]); + + const handleSelfStackRemove = useCallback(async () => { + if (!canEditServers) { + return; + } + if (!selfStackDraft && !currentSelfStackValue) { + return; + } + if (typeof window !== "undefined") { + const confirmed = window.confirm("Self-Stack-ID wirklich entfernen?"); + if (!confirmed) { + return; + } + } + setSelfStackSaving(true); + setSelfStackError(""); + try { + await updateSelfStackId(""); + setSelfStackDraft(""); + showToast({ + variant: "success", + title: "Self-Stack-ID entfernt", + description: "Die Self-Stack-ID wurde gelöscht." + }); + await loadSetupResources({ silent: true }); + } catch (err) { + const message = err.response?.data?.error || err.message || "Self-Stack-ID konnte nicht entfernt werden."; + setSelfStackError(message); + showToast({ + variant: "error", + title: "Self-Stack-ID", + description: message + }); + } finally { + setSelfStackSaving(false); + } + }, [canEditServers, currentSelfStackValue, loadSetupResources, selfStackDraft, showToast, updateSelfStackId]); const handleMaintenanceToggle = useCallback(async (nextActive) => { + if (!canControlMaintenance) return; if (maintenanceLoading || maintenanceToggleLoading) return; if (nextActive === maintenanceActive) return; if (updateRunning) { @@ -460,9 +788,12 @@ export function Maintenance() { } finally { setMaintenanceToggleLoading(false); } - }, [maintenanceLoading, maintenanceToggleLoading, maintenanceActive, updateRunning, setMaintenanceMode, maintenanceMessage, maintenanceExtraType, showToast]); + }, [canControlMaintenance, maintenanceLoading, maintenanceToggleLoading, maintenanceActive, updateRunning, setMaintenanceMode, maintenanceMessage, maintenanceExtraType, showToast]); const handleTriggerUpdate = useCallback(async () => { + if (!canManagePortainerUpdate) { + return; + } if (maintenanceActive || updateRunning) { showToast({ variant: "warning", @@ -498,9 +829,10 @@ export function Maintenance() { } finally { setUpdateActionLoading(false); } - }, [maintenanceActive, updateRunning, portainerStatus, triggerUpdate, showToast]); + }, [canManagePortainerUpdate, maintenanceActive, updateRunning, portainerStatus, triggerUpdate, showToast]); const handleCleanup = useCallback(async (entry) => { + if (!canManageDuplicates) return; if (!entry) return; if (maintenanceActive || updateRunning) { showToast({ @@ -562,7 +894,7 @@ export function Maintenance() { } finally { setActiveCleanupId(null); } - }, [fetchDuplicates, maintenanceActive, showToast, updateRunning]); + }, [canManageDuplicates, fetchDuplicates, maintenanceActive, showToast, updateRunning]); const maintenanceActivatedAt = maintenanceMeta?.activatedAt ? formatCreatedAt(maintenanceMeta.activatedAt) : null; const maintenanceUpdatedAt = maintenanceMeta?.updatedAt ? formatCreatedAt(maintenanceMeta.updatedAt) : null; @@ -583,6 +915,10 @@ export function Maintenance() { const disableUpdateButton = updateRunning || scriptSaving || maintenanceLoading; + if (!canViewMaintenance) { + return null; + } + return (
@@ -601,558 +937,818 @@ export function Maintenance() {
)} - - - - Wartungsmodus + {canViewMaintenance && ( + + + + Wartungsmodus - - - -
-
-

- Schaltet StackPulse für Benutzer in den Wartungsmodus. -

-
- handleMaintenanceToggle(event.target.checked)} - ripple={false} - color="amber" - /> -
- {maintenanceToggleLoading && ( -

Wartungsmodus wird aktualisiert…

- )} -
-
- - - - - Portainer - - - - -
-
-

Portainer Status

-

- {portainerLoading - ? "Status wird geprüft…" - : portainerError - ? portainerError - : updateRunning - ? "Portainer wird aktuell aktualisiert." - : (portainerStatus?.updateAvailable === true - ? "Es ist ein Update für Portainer verfügbar." - : "Portainer ist auf dem aktuellen Stand.")} -

- {portainerUpdatedAt && !portainerLoading && ( -

- Stand: {portainerUpdatedAt.toLocaleString("de-DE", { - hour: "2-digit", - minute: "2-digit", - second: "2-digit" - })} + + + +

+
+

+ Schaltet StackPulse für Benutzer in den Wartungsmodus.

- )} -
-
- - -
-
-
- {!portainerLoading && !portainerError && portainerStatus && ( -
-
- Installierte Version - {portainerStatus.currentVersion ?? "Unbekannt"} -
-
- Neueste Version - {portainerStatus.latestVersion ?? "Unbekannt"} -
-
- Status - - {portainerStatus.updateAvailable === true - ? "Update verfügbar" - : portainerStatus.updateAvailable === false - ? "Aktuell" - : "Unbekannt"} - -
- {portainerStatus.edition && ( -
- Edition - {portainerStatus.edition} -
- )} - {portainerStatus.build && ( -
- Build - {portainerStatus.build} -
- )} - {portainerStatus.errors?.latestVersion && ( -
- Neueste Version konnte nicht ermittelt werden: {portainerStatus.errors.latestVersion} -
- )} - {portainerStatus.errors?.container && ( -
- Container-Details konnten nicht ermittelt werden: {portainerStatus.errors.container} -
- )} -
- - /* {portainerStatus.container && ( -
-

Startparameter

-
- {(portainerStatus.container.name || portainerStatus.container.image) && ( -
- Container -
- {portainerStatus.container.name ?? "Unbekannt"} - {portainerStatus.container.image && ( - {portainerStatus.container.image} - )} -
-
- )} - {portainerStatus.container.id && ( -
- Container-ID - - {portainerStatus.container.id.slice(0, 12)} - -
- )} -
- Startkommando - - {[...(portainerStatus.container.entrypoint || []), ...(portainerStatus.container.command || [])].join(" ") || "Unbekannt"} - -
- {Array.isArray(portainerStatus.container.args) && portainerStatus.container.args.length > 0 && ( -
- Argumente - - {portainerStatus.container.args.join(" ")} - -
- )} - {Array.isArray(portainerStatus.container.env) && portainerStatus.container.env.length > 0 && ( -
- Umgebungsvariablen -
- {portainerStatus.container.env.map((entry, index) => ( - - {entry} - - ))} -
-
- )} - {Array.isArray(portainerStatus.container.binds) && portainerStatus.container.binds.length > 0 && ( -
- Bind-Mounts -
- {portainerStatus.container.binds.map((bind, index) => ( - - {bind} - - ))} -
-
- )}
+ handleMaintenanceToggle(event.target.checked)} + ripple={false} + color="amber" + />
- )} */ + {maintenanceToggleLoading && ( +

Wartungsmodus wird aktualisiert…

)} -
+ + + )} + {canViewServers && ( + + + + Server & API-Keys -
-
-
-

SSH-Verbindung

-
-
- -
- - -
-
-
- - + + + + {setupResourcesLoading && ( +

Daten werden geladen…

+ )} + {!setupResourcesLoading && setupResourcesError && ( + + {setupResourcesError} + + )} + {!setupResourcesLoading && !setupResourcesError && ( +
+
+
+ + Server + + + {setupServers.length} vorhanden +
- handleSshDraftChange('password', event.target.value)} - disabled={sshSaving || sshTesting || sshDeleting || updateRunning} - className="w-full rounded-md border border-gray-700 bg-gray-950/70 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none" - placeholder="Passwort für den SSH-Benutzer" - autoComplete="off" - spellCheck={false} - /> - {sshPasswordStored && !sshDraft.password && ( - - Ein Passwort ist gespeichert. Neuer Inhalt ersetzt es oder lösche die Konfiguration unten. - + {setupServers.length === 0 ? ( +

+ Es sind derzeit keine Server hinterlegt. +

+ ) : ( +
+ {setupServers.map((server) => { + const apiKeyInfo = apiKeyInfoMap.get(server.id) || null; + const hasKey = Boolean(apiKeyInfo?.hasKey); + const apiKeyUpdatedLabel = apiKeyInfo?.updatedAt + ? new Date(apiKeyInfo.updatedAt).toLocaleString("de-DE", { + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }) + : null; + + return ( +
+
+

+ {server.name || "Ohne Namen"} +

+

+ {server.url} +

+

+ API-Key: {hasKey ? "vorhanden" : "nicht hinterlegt"}{apiKeyUpdatedLabel ? ` (aktualisiert am ${apiKeyUpdatedLabel})` : ""} +

+
+
+ handleApiKeyDraftChange(server.id, event.target.value)} + disabled={!canEditServers || setupResourcesLoading || apiKeyUpdatingId === server.id} + /> +
+ + +
+
+
+ ); + })} +
)}
-