From 22c33c0f7a958bdb782d15844d88fea405b2ea10 Mon Sep 17 00:00:00 2001 From: Char Date: Sat, 16 May 2026 15:10:27 +0100 Subject: [PATCH 01/22] dashboard v1 --- .gitattributes | 1 + .gitignore | 7 + API/server.js | 864 ++++++++- Addons/Configs/discord-stats.yml | 11 + Addons/addon.js | 2 +- Addons/discord-stats.js | 139 ++ Commands/General/ai.js | 6 +- Commands/General/help.js | 4 +- Commands/General/info.js | 17 +- Commands/General/ping.js | 6 +- Commands/General/profile.js | 6 +- Commands/General/translate.js | 6 +- Commands/Suggestions/suggest.js | 6 +- Commands/Suggestions/suggestadmin.js | 6 +- Commands/Tickets/close.js | 6 +- Commands/Tickets/manageticket.js | 6 +- Commands/Tickets/ticket.js | 12 +- Commands/Tickets/ticketpanel.js | 6 +- Commands/Utils/embed.js | 6 +- Commands/Utils/mod.js | 6 +- Commands/Utils/settings.js | 4 +- Configs/api.yml | 17 +- Configs/supportbot.yml | 81 +- Configs/ticket-panel.yml | 8 +- Data/ai-memory.db | Bin 0 -> 4096 bytes Data/ai-memory.db-shm | Bin 0 -> 32768 bytes Data/ai-memory.db-wal | Bin 0 -> 45352 bytes Data/dashboard-users.json | 17 + Data/supportbot.db | Bin 0 -> 49152 bytes Events/Models/claude.js | 4 +- Events/Models/groq.js | 4 +- Events/Models/openai.js | 4 +- Events/guildCreate.js | 34 +- Events/guildDelete.js | 27 +- Events/guildMemberAdd.js | 10 +- Events/guildMemberRemove.js | 4 +- Events/interactionCreate.js | 10 +- Events/messageCreate.js | 10 +- Events/messageDelete.js | 4 +- Events/messageReactionAdd.js | 13 +- Events/messageUpdate.js | 4 +- Events/ready.js | 128 +- README.md | 263 ++- Structures/AddonCatalog.js | 270 +++ Structures/BotInvite.js | 6 + Structures/BotReload.js | 150 ++ Structures/BotStartup.js | 174 ++ Structures/Client.js | 19 +- Structures/ConfigStore.js | 89 + Structures/DashboardAuth.js | 57 + Structures/DashboardPermissions.js | 134 ++ Structures/DashboardSession.js | 71 + Structures/DashboardUserStore.js | 291 +++ Structures/DiscordOAuth.js | 106 ++ Structures/GuildManager.js | 246 +++ Structures/LogReader.js | 181 ++ Structures/ModuleStatus.js | 269 +++ Structures/NotificationService.js | 63 + Structures/NotificationStore.js | 86 + Structures/TicketManager.js | 4 +- Structures/UpdateChecker.js | 55 + Structures/asyncTimeout.js | 14 + docs/readme-header.png | Bin 0 -> 1470505 bytes index.js | 28 +- package-lock.json | 2479 ++++++++++++++++++++++++++ package.json | 4 +- 66 files changed, 6100 insertions(+), 465 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Addons/Configs/discord-stats.yml create mode 100644 Addons/discord-stats.js create mode 100644 Data/ai-memory.db create mode 100644 Data/ai-memory.db-shm create mode 100644 Data/ai-memory.db-wal create mode 100644 Data/dashboard-users.json create mode 100644 Data/supportbot.db create mode 100644 Structures/AddonCatalog.js create mode 100644 Structures/BotInvite.js create mode 100644 Structures/BotReload.js create mode 100644 Structures/BotStartup.js create mode 100644 Structures/ConfigStore.js create mode 100644 Structures/DashboardAuth.js create mode 100644 Structures/DashboardPermissions.js create mode 100644 Structures/DashboardSession.js create mode 100644 Structures/DashboardUserStore.js create mode 100644 Structures/DiscordOAuth.js create mode 100644 Structures/GuildManager.js create mode 100644 Structures/LogReader.js create mode 100644 Structures/ModuleStatus.js create mode 100644 Structures/NotificationService.js create mode 100644 Structures/NotificationStore.js create mode 100644 Structures/UpdateChecker.js create mode 100644 Structures/asyncTimeout.js create mode 100644 docs/readme-header.png create mode 100644 package-lock.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b98d0d5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +Configs/supportbot.yml filter=supportbot-token diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b73f8d --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules + +# Dashboard UI source (local only — publish public/dashboard/ instead) +dashboard/ + +.githooks +scripts diff --git a/API/server.js b/API/server.js index edb4b1d..db5ae76 100644 --- a/API/server.js +++ b/API/server.js @@ -1,10 +1,81 @@ const express = require('express'); const cors = require('cors'); +const cookieParser = require('cookie-parser'); const fs = require('fs'); const os = require('os'); +const path = require('path'); const yaml = require('js-yaml'); const YAML = require('yaml'); const db = require('../Structures/Database.js'); +const configStore = require('../Structures/ConfigStore.js'); +const { reloadBot, restartDiscordBot } = require('../Structures/BotReload.js'); +const { LOG_TYPES, fetchLogs, getLogMeta } = require('../Structures/LogReader.js'); +const { evaluateAllModules } = require('../Structures/ModuleStatus.js'); +const { getBotInviteUrl } = require('../Structures/BotInvite.js'); +const notificationStore = require('../Structures/NotificationStore.js'); +const { + notifyBotRestart, + notifyUpdateInstalled, + runUpdateCheck, +} = require('../Structures/NotificationService.js'); +const { + SESSION_COOKIE, + signSession, + verifySession, + createSessionPayload, + sessionCookieOptions, +} = require('../Structures/DashboardSession.js'); +const { + OAUTH_STATE_COOKIE, + buildAuthorizeUrl, + exchangeCode, + fetchDiscordUser, + createOAuthState, + oauthStateCookieOptions, + isOAuthConfigured, + discordAvatarUrl, +} = require('../Structures/DiscordOAuth.js'); +const { + bootstrapFromOAuth, + getAccess, + canLogin, + formatPublicUser, + syncDiscordProfile, + listUsers, + addUser, + updateUser, + removeUser, + hasPermission, + canAccessConfig, + ROLES, + CONFIG_FILES, +} = require('../Structures/DashboardUserStore.js'); +const { + grantServiceAccess, + forbid, + assertConfigFilesEditable, + fullPermissions, +} = require('../Structures/DashboardAuth.js'); +const { + syncGuildHealth, + leaveGuild, + fetchGuildResources, + clearGuildResourcesCache, +} = require('../Structures/GuildManager.js'); +const { withTimeout } = require('../Structures/asyncTimeout.js'); +const { + listCatalogAddons, + listInstalledAddons, + installAddonFromCatalog, + listLocalAddonConfigs, + readAddonConfig, + writeAddonConfig, +} = require('../Structures/AddonCatalog.js'); + +const DASHBOARD_DIR = path.join(__dirname, '../public/dashboard'); +const UPDATE_REPO = 'C-h-a-r/SupportBot-Dashboard'; +const UPDATE_BRANCH = 'release'; +const UPDATE_ZIP_URL = `https://github.com/${UPDATE_REPO}/archive/refs/heads/${UPDATE_BRANCH}.zip`; class APIServer { constructor(client) { @@ -21,30 +92,405 @@ class APIServer { if (!this.config.Enabled) return; - this.app.use(cors()); + this.oauth = this.config.OAuth || {}; + bootstrapFromOAuth(this.oauth); + + this.app.use(cors({ origin: true, credentials: true })); + this.app.use(cookieParser()); this.app.use(express.json()); - this.app.use((req, res, next) => { - const authHeader = req.headers.authorization; - if (!authHeader || authHeader !== `Bearer ${this.config.SecretKey}`) { - return res.status(401).json({ error: 'Unauthorized. Invalid Secret Key.' }); - } - next(); + this.app.get('/api/health', (req, res) => { + const guild = + this.client?.user ? syncGuildHealth(this.client) : null; + res.json({ + success: true, + dashboard: fs.existsSync(DASHBOARD_DIR), + botReady: Boolean(this.client?.user) && !this.client?.__restarting, + botRestarting: Boolean(this.client?.__restarting), + oauthEnabled: isOAuthConfigured(this.oauth), + guild, + }); }); + this.setupAuthRoutes(); + + const api = express.Router(); + api.use((req, res, next) => this.authenticate(req, res, next)); + this.apiRouter = api; this.setupRoutes(); + this.app.use('/api', api); + + this.setupDashboard(); + + this.app.use((err, req, res, next) => { + if (res.headersSent) return next(err); + console.error('[API] Unhandled error:', err); + res.status(500).json({ + success: false, + error: err.message || 'Internal server error', + }); + }); + } + + authenticate(req, res, next) { + const secret = this.config.SecretKey; + const session = verifySession(req.cookies?.[SESSION_COOKIE], secret); + + if (session?.userId) { + const access = getAccess(session.userId, this.oauth); + if (access) { + req.dashboardUser = session; + req.dashboardPermissions = access.permissions; + req.dashboardRole = access.role; + req.dashboardIsOwner = access.isOwner; + return next(); + } + } + + const authHeader = req.headers.authorization; + if (authHeader === `Bearer ${secret}`) { + grantServiceAccess(req); + return next(); + } + + return res.status(401).json({ + error: 'Unauthorized. Sign in with Discord.', + }); + } + + requirePermission(permission) { + return (req, res, next) => { + if (req.dashboardService) return next(); + if (hasPermission(req.dashboardPermissions, permission)) return next(); + return forbid(res); + }; + } + + requireConfigAccess(mode = 'view') { + return (req, res, next) => { + if (req.dashboardService) return next(); + const file = req.params?.file || req.body?.filename; + if (!file) return next(); + if (!canAccessConfig(req.dashboardPermissions, file, mode)) { + return forbid(res); + } + return next(); + }; + } + + respondAuthUser(req, res, session) { + const access = getAccess(session.userId, this.oauth); + if (!access) { + return res.status(401).json({ success: false, error: 'Not signed in' }); + } + + return res.json({ + success: true, + data: formatPublicUser( + access.entry, + access, + { + id: session.userId, + username: session.username, + global_name: session.globalName, + avatar: session.avatar, + }, + ), + }); + } + + setupAuthRoutes() { + const secret = this.config.SecretKey; + const oauth = this.oauth; + + this.app.get('/api/auth/discord', (req, res) => { + if (!isOAuthConfigured(oauth)) { + return res.redirect('/login?error=oauth_not_configured'); + } + + const state = createOAuthState(); + res.cookie(OAUTH_STATE_COOKIE, state, oauthStateCookieOptions()); + res.redirect(buildAuthorizeUrl(oauth, state)); + }); + + this.app.get('/api/auth/discord/callback', async (req, res) => { + if (!isOAuthConfigured(oauth)) { + return res.redirect('/login?error=oauth_not_configured'); + } + + const { code, state, error } = req.query; + if (error) { + return res.redirect(`/login?error=${encodeURIComponent(String(error))}`); + } + if (!code || !state) { + return res.redirect('/login?error=missing_code'); + } + + const savedState = req.cookies?.[OAUTH_STATE_COOKIE]; + res.clearCookie(OAUTH_STATE_COOKIE, { path: '/' }); + + if (!savedState || savedState !== state) { + return res.redirect('/login?error=invalid_state'); + } + + try { + const accessToken = await exchangeCode(oauth, String(code)); + const user = await fetchDiscordUser(accessToken); + + if (!canLogin(user.id, oauth)) { + return res.redirect('/login?error=not_allowed'); + } + + syncDiscordProfile(user.id, { + username: user.username, + globalName: user.global_name || null, + avatar: user.avatar || null, + }); + + const payload = createSessionPayload(user); + const token = signSession(payload, secret); + res.cookie(SESSION_COOKIE, token, sessionCookieOptions()); + res.redirect('/'); + } catch (err) { + console.error('[API] Discord OAuth callback failed:', err.message); + res.redirect('/login?error=oauth_failed'); + } + }); + + this.app.get('/api/auth/me', (req, res) => { + const session = verifySession(req.cookies?.[SESSION_COOKIE], secret); + if (!session?.userId) { + return res.status(401).json({ success: false, error: 'Not signed in' }); + } + return this.respondAuthUser(req, res, session); + }); + + this.app.post('/api/auth/logout', (req, res) => { + res.clearCookie(SESSION_COOKIE, { path: '/' }); + res.json({ success: true }); + }); + } + + setupDashboard() { + if (!fs.existsSync(DASHBOARD_DIR)) { + console.warn('[API] Dashboard UI missing. Ensure public/dashboard/ is present in your install.'); + return; + } + + this.app.use(express.static(DASHBOARD_DIR)); + + this.app.get(/^(?!\/api).*/, (req, res, next) => { + if (req.method !== 'GET') return next(); + res.sendFile(path.join(DASHBOARD_DIR, 'index.html'), (err) => { + if (err) next(err); + }); + }); + + console.log('[API] Dashboard available at http://localhost:' + (this.config.Port || 3000)); } start(port) { + if (this._httpServer) { + return this._httpServer; + } + const listenPort = port || this.config.Port || 3000; - this.app.listen(listenPort, () => { + this._httpServer = this.app.listen(listenPort, () => { console.log(`[API] Server running on port ${listenPort}`); + this.startNotificationJobs(); }); + + this._httpServer.on('error', (err) => { + if (err.code === 'EADDRINUSE') { + console.error( + `[API] Port ${listenPort} is already in use. Change Port in Configs/api.yml.`, + ); + } else { + console.error('[API] Server error:', err); + } + }); + + return this._httpServer; + } + + async restartBotAfterConfigSave() { + if (!this.client) { + return { success: false, error: 'Bot client not available' }; + } + if (this.client.__restarting) { + return { + success: false, + error: 'Bot restart already in progress. Try again in a moment.', + }; + } + + try { + const result = await withTimeout( + restartDiscordBot(this.client), + 90_000, + 'Bot restart timed out after 90 seconds', + ); + clearGuildResourcesCache(); + return { + success: true, + commands: result.commands?.count ?? 0, + }; + } catch (err) { + console.error('[API] Bot restart failed:', err); + return { success: false, error: err.message }; + } + } + + startNotificationJobs() { + const FIRST_MS = 60 * 1000; + const INTERVAL_MS = 6 * 60 * 60 * 1000; + + const run = async () => { + try { + await runUpdateCheck(); + } catch (err) { + console.warn('[Notifications] Update check failed:', err.message); + } + }; + + this._notificationTimers = [ + setTimeout(run, FIRST_MS), + setInterval(run, INTERVAL_MS), + ]; } setupRoutes() { - this.app.get('/api/stats', async (req, res) => { + const app = this.apiRouter; + const oauth = this.oauth; + const p = (permission) => this.requirePermission(permission); + const cv = (mode) => this.requireConfigAccess(mode); + + app.get('/dashboard-users', p('users.view'), (req, res) => { try { + res.json({ + success: true, + data: { + users: listUsers(oauth), + roles: ROLES, + configFiles: CONFIG_FILES, + }, + }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.post('/dashboard-users', p('users.manage'), (req, res) => { + try { + const actorId = req.dashboardUser?.userId || 'service'; + const user = addUser(req.body, actorId, oauth); + res.json({ success: true, data: user }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.patch('/dashboard-users/:id', p('users.manage'), (req, res) => { + try { + const actorId = req.dashboardUser?.userId || 'service'; + const user = updateUser(req.params.id, req.body, actorId, oauth); + res.json({ success: true, data: user }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.delete('/dashboard-users/:id', p('users.manage'), (req, res) => { + try { + removeUser(req.params.id, oauth); + res.json({ success: true }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.get('/guild/status', p('overview'), (req, res) => { + try { + if (!this.client?.user) { + return res.json({ + success: true, + data: { + status: 'offline', + configuredGuildId: null, + message: 'Bot is not connected to Discord.', + configuredGuild: null, + extraGuilds: [], + }, + }); + } + res.json({ + success: true, + data: syncGuildHealth(this.client), + }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.get('/guild/resources', (req, res, next) => { + if (req.dashboardService) return next(); + const canAny = CONFIG_FILES.some((f) => + canAccessConfig(req.dashboardPermissions, f, 'view'), + ); + if (!canAny && !hasPermission(req.dashboardPermissions, 'overview')) { + return forbid(res); + } + return next(); + }, async (req, res) => { + try { + if (this.client?.__restarting) { + return res.status(503).json({ + success: false, + error: 'Bot is restarting. Channel and role lists will be back shortly.', + }); + } + if (!this.client?.user) { + return res.status(503).json({ + success: false, + error: 'Bot is not connected.', + }); + } + const data = await fetchGuildResources(this.client); + if (!data) { + return res.status(400).json({ + success: false, + error: 'Bot is not in the configured server. Set General.GuildId and invite the bot.', + }); + } + res.json({ success: true, data }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.post('/guild/:guildId/leave', p('settings.update'), async (req, res) => { + try { + if (!this.client?.user) { + return res.status(503).json({ + success: false, + error: 'Bot is not connected.', + }); + } + const health = await leaveGuild(this.client, req.params.guildId); + res.json({ success: true, data: health }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.get('/stats', p('overview'), async (req, res) => { + try { + if (this.client.__restarting) { + return res.json({ + success: false, + error: 'Bot is restarting after a config change. Try again shortly.', + }); + } if (!this.client.user) { return res.json({ success: false, error: 'Bot is still starting up.' }); } @@ -55,8 +501,20 @@ class APIServer { }); const allTickets = db.getAllTickets() || []; - const openTickets = allTickets.filter(t => t.open).length; - const closedTickets = allTickets.filter(t => !t.open).length; + const openTickets = allTickets.filter(t => t.status === 'open').length; + const closedTickets = allTickets.filter(t => t.status !== 'open').length; + + const transcriptDir = path.join(__dirname, '../Data/Transcripts'); + let transcriptCount = 0; + if (fs.existsSync(transcriptDir)) { + transcriptCount = fs + .readdirSync(transcriptDir) + .filter((f) => f.endsWith('-transcript.html')).length; + } + + const modules = evaluateAllModules(configStore, { + transcriptCount, + }); const totalMem = os.totalmem(); const freeMem = os.freemem(); @@ -71,6 +529,7 @@ class APIServer { username: this.client.user.username, id: this.client.user.id, avatar: this.client.user.displayAvatarURL(), + inviteUrl: getBotInviteUrl(this.client.user.id), version: require('../package.json').version, ping: this.client.ws.ping, uptime: process.uptime(), @@ -82,6 +541,7 @@ class APIServer { open: openTickets, closed: closedTickets }, + modules, hosting: { ram_used: (usedMem / 1024 / 1024 / 1024).toFixed(2) + ' GB', ram_total: (totalMem / 1024 / 1024 / 1024).toFixed(2) + ' GB', @@ -97,7 +557,7 @@ class APIServer { } }); - this.app.get('/api/configs/:file', (req, res) => { + app.get('/configs/:file', cv('view'), (req, res) => { const validFiles = ['supportbot', 'ticket-panel', 'commands', 'messages', 'supportbot-ai']; const file = req.params.file; if (!validFiles.includes(file)) return res.status(400).json({ success: false, error: 'Invalid file' }); @@ -109,20 +569,47 @@ class APIServer { } }); - this.app.put('/api/configs/raw', (req, res) => { + app.put('/configs/raw', cv('edit'), async (req, res) => { const validFiles = ['supportbot', 'ticket-panel', 'commands', 'messages', 'supportbot-ai']; const file = req.body.filename; - const content = req.body.content; + let content = req.body.content; if (!validFiles.includes(file)) return res.status(400).json({ success: false, error: 'Invalid file' }); try { + if (file === 'supportbot' && /^\s*Token:\s*["']BOT_TOKEN["']/m.test(content)) { + const currentPath = `./Configs/${file}.yml`; + if (fs.existsSync(currentPath)) { + const current = fs.readFileSync(currentPath, 'utf8'); + const tokenMatch = current.match(/^(\s*Token:\s*)["']([^"']+)["']/m); + if (tokenMatch && tokenMatch[2] !== 'BOT_TOKEN') { + content = content.replace( + /^(\s*Token:\s*)["']BOT_TOKEN["']/m, + `$1"${tokenMatch[2]}"`, + ); + } + } + } fs.writeFileSync(`./Configs/${file}.yml`, content); - res.json({ success: true }); + configStore.reloadFile(file); + + let botRestart = { success: false, error: 'Bot client not available' }; + if (this.client) { + botRestart = await this.restartBotAfterConfigSave(); + notifyBotRestart(botRestart.success, botRestart.error); + } + + res.json({ + success: true, + botRestart, + message: botRestart.success + ? 'Config saved and bot restarted. API and dashboard stayed online.' + : 'Config saved but the bot could not restart. Check server logs.', + }); } catch (err) { res.status(500).json({ success: false, error: 'Failed to write config' }); } }); - this.app.get('/api/configs/json/:file', (req, res) => { + app.get('/configs/json/:file', cv('view'), (req, res) => { const validFiles = ['supportbot', 'ticket-panel', 'commands', 'messages', 'supportbot-ai']; const file = req.params.file; if (!validFiles.includes(file)) return res.status(400).json({ success: false, error: 'Invalid file' }); @@ -134,82 +621,299 @@ class APIServer { } }); - this.app.post('/api/configs/update-fields/multi', (req, res) => { + app.post('/configs/update-fields/multi', async (req, res) => { const updates = req.body; if (!updates || typeof updates !== 'object') return res.status(400).json({ success: false, error: 'Invalid updates' }); + + const touchedFiles = new Set(); + for (const keyPath of Object.keys(updates)) { + touchedFiles.add(keyPath.split(':')[0]); + } + if (!req.dashboardService) { + const denied = assertConfigFilesEditable( + req.dashboardPermissions, + [...touchedFiles], + res, + ); + if (denied) return; + } + try { + const touched = new Set(); for (const [keyPath, value] of Object.entries(updates)) { - const [fileName, path] = keyPath.split(':'); + const [fileName, fieldPath] = keyPath.split(':'); const fileContent = fs.readFileSync(`./Configs/${fileName}.yml`, 'utf8'); const doc = YAML.parseDocument(fileContent); - const keys = path.split('.'); + const keys = fieldPath.split('.'); doc.setIn(keys, value); fs.writeFileSync(`./Configs/${fileName}.yml`, doc.toString()); + touched.add(fileName); } - res.json({ success: true }); + + const reloadFiles = [...touched].filter((f) => f !== 'api'); + + let botRestart = { success: false, error: 'Bot client not available' }; + if (reloadFiles.length && this.client) { + botRestart = await this.restartBotAfterConfigSave(); + notifyBotRestart(botRestart.success, botRestart.error); + } + + res.json({ + success: true, + reloaded: reloadFiles, + botRestart, + message: botRestart.success + ? 'Config saved and bot restarted. API and dashboard stayed online.' + : 'Config saved but the bot could not restart. Check server logs.', + }); } catch (err) { console.error('[API] Update failed:', err); res.status(500).json({ success: false, error: err.message }); } }); - this.app.post('/api/addons/install', async (req, res) => { - const { url, filename } = req.body; - if (!url || !filename) return res.status(400).json({ success: false, error: 'Missing url or filename' }); + app.get('/notifications', p('overview'), (req, res) => { + res.json({ + success: true, + data: { + items: notificationStore.list(), + unreadCount: notificationStore.unreadCount(), + }, + }); + }); + app.post('/notifications/read', p('overview'), (req, res) => { + const { ids } = req.body || {}; + if (ids === 'all') { + notificationStore.markRead('all'); + } else if (Array.isArray(ids)) { + notificationStore.markRead(ids); + } else if (typeof ids === 'string') { + notificationStore.markRead([ids]); + } + res.json({ + success: true, + data: { unreadCount: notificationStore.unreadCount() }, + }); + }); + + app.delete('/notifications/:id', p('overview'), (req, res) => { + notificationStore.dismiss(req.params.id); + res.json({ + success: true, + data: { unreadCount: notificationStore.unreadCount() }, + }); + }); + + app.post('/system/reload-configs', p('settings.update'), async (req, res) => { try { - const axios = require('axios'); - const response = await axios({ - method: 'get', - url: url, - responseType: 'stream' - }); - - // Ensure Addons directory exists - if (!fs.existsSync('./Addons')) { - fs.mkdirSync('./Addons'); + const file = req.body?.file; + const valid = ['supportbot', 'ticket-panel', 'commands', 'messages', 'supportbot-ai']; + if (file && !valid.includes(file)) { + return res.status(400).json({ success: false, error: 'Invalid config file' }); } - - const writer = fs.createWriteStream(`./Addons/${filename}`); - response.data.pipe(writer); - - writer.on('finish', () => { - res.json({ success: true, message: `Addon ${filename} installed successfully.` }); + const result = await reloadBot(this.client, { + fileKey: file || null, + refreshCommands: !file || file === 'commands', }); - - writer.on('error', (err) => { - console.error('[API] Download failed:', err); - res.status(500).json({ success: false, error: 'Failed to write addon file' }); + res.json({ + success: true, + reloaded: result.reloaded, + commands: result.commands, }); - } catch (err) { - console.error('[API] Addon install failed:', err); - res.status(500).json({ success: false, error: 'Failed to download addon' }); + console.error('[API] Reload failed:', err); + res.status(500).json({ success: false, error: err.message }); } }); - this.app.post('/api/addons/push', (req, res) => { - const { filename, content } = req.body; - if (!filename || !content) return res.status(400).json({ success: false, error: 'Missing filename or content' }); - - const sanitizedFilename = filename.replace(/[^a-z0-9_.-]/gi, '_'); - + app.get('/system/logs/meta', p('logs'), (req, res) => { try { - if (!fs.existsSync('./Addons')) { - fs.mkdirSync('./Addons'); - } - fs.writeFileSync(`./Addons/${sanitizedFilename}`, content); - res.json({ success: true, message: `Addon ${sanitizedFilename} deployed successfully.` }); + res.json({ success: true, data: { types: LOG_TYPES, files: getLogMeta() } }); } catch (err) { - console.error('[API] Push failed:', err); - res.status(500).json({ success: false, error: 'Failed to write addon file' }); + console.error('[API] Log meta failed:', err); + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.get('/system/logs', p('logs'), (req, res) => { + try { + const typesParam = req.query.types; + const types = typesParam + ? String(typesParam).split(',').map((t) => t.trim()) + : LOG_TYPES; + + let cursor = {}; + if (req.query.cursor) { + try { + cursor = JSON.parse(String(req.query.cursor)); + } catch { + return res.status(400).json({ success: false, error: 'Invalid cursor' }); + } + } + + const hasCursor = Object.keys(cursor).length > 0; + const tailParam = req.query.tail; + const initialLines = hasCursor + ? 0 + : Math.min( + 1000, + Math.max(0, parseInt(tailParam, 10) || 400), + ); + + const { entries, cursor: nextCursor } = fetchLogs(types, cursor, initialLines); + + res.json({ + success: true, + data: { + entries, + cursor: nextCursor, + }, + }); + } catch (err) { + console.error('[API] Logs fetch failed:', err); + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.get('/system/update-check', p('settings.view'), async (req, res) => { + try { + const info = await runUpdateCheck(); + res.json({ success: true, data: info }); + } catch (err) { + console.error('[API] Update check failed:', err); + res.status(500).json({ success: false, error: 'Could not check for updates. Try again later.' }); + } + }); + + app.get('/addons/catalog', p('settings.view'), async (req, res) => { + try { + const catalog = await listCatalogAddons(); + const installed = await listInstalledAddons(catalog); + const installedIds = new Set(installed.map((a) => a.id)); + res.json({ + success: true, + data: { + repository: `https://github.com/Emerald-Services/Addons`, + addons: catalog.map((addon) => ({ + ...addon, + installed: installedIds.has(addon.id), + })), + }, + }); + } catch (err) { + console.error('[API] Addon catalog failed:', err); + res.status(500).json({ + success: false, + error: err.message || 'Could not load addon catalog from GitHub', + }); + } + }); + + app.get('/addons/installed', p('settings.view'), async (req, res) => { + try { + let catalog = []; + try { + catalog = await listCatalogAddons(); + } catch { + catalog = []; + } + const installed = await listInstalledAddons(catalog); + const configs = listLocalAddonConfigs(); + res.json({ success: true, data: { installed, configs } }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.post('/addons/install', p('settings.update'), async (req, res) => { + const name = req.body?.name || req.body?.id; + if (!name) { + return res.status(400).json({ success: false, error: 'Missing addon name' }); + } + + try { + const result = await installAddonFromCatalog(name); + let botRestart = { success: false, error: 'Bot client not available' }; + if (this.client) { + botRestart = await this.restartBotAfterConfigSave(); + notifyBotRestart(botRestart.success, botRestart.error); + } + + res.json({ + success: true, + data: result, + botRestart, + message: botRestart.success + ? `${result.addon.name} installed and bot restarted. Enable addons in Bot config if needed.` + : `${result.addon.name} installed but the bot could not restart. Check server logs.`, + }); + } catch (err) { + console.error('[API] Addon install failed:', err); + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.get('/addons/configs', p('settings.view'), (req, res) => { + try { + const files = listLocalAddonConfigs(); + res.json({ success: true, data: files }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.get('/addons/configs/json/:file', (req, res, next) => { + if (req.dashboardService) return next(); + if (!canAccessConfig(req.dashboardPermissions, 'supportbot', 'view')) { + return forbid(res); + } + return next(); + }, (req, res) => { + try { + const parsed = readAddonConfig(req.params.file); + res.json({ success: true, data: parsed.data, filename: parsed.filename }); + } catch (err) { + res.status(404).json({ success: false, error: err.message }); + } + }); + + app.put('/addons/configs', (req, res, next) => { + if (req.dashboardService) return next(); + if (!canAccessConfig(req.dashboardPermissions, 'supportbot', 'edit')) { + return forbid(res); + } + return next(); + }, async (req, res) => { + const { filename, data } = req.body || {}; + if (!filename || !data || typeof data !== 'object') { + return res.status(400).json({ success: false, error: 'Missing filename or data' }); + } + + try { + writeAddonConfig(filename, data); + let botRestart = { success: false, error: 'Bot client not available' }; + if (this.client) { + botRestart = await this.restartBotAfterConfigSave(); + notifyBotRestart(botRestart.success, botRestart.error); + } + res.json({ + success: true, + botRestart, + message: botRestart.success + ? 'Addon config saved and bot restarted.' + : 'Addon config saved but the bot could not restart.', + }); + } catch (err) { + console.error('[API] Addon config save failed:', err); + res.status(500).json({ success: false, error: err.message }); } }); // --- Nexus Updater API --- - this.app.post('/api/system/update', async (req, res) => { + app.post('/system/update', p('settings.update'), async (req, res) => { const { url, version } = req.body; - if (!url) return res.status(400).json({ success: false, error: 'Missing update URL' }); + const downloadUrl = url || UPDATE_ZIP_URL; try { const axios = require('axios'); @@ -220,7 +924,7 @@ class APIServer { // 1. Download const tempZip = `./update_${Date.now()}.zip`; - const response = await axios({ method: 'get', url: url, responseType: 'stream' }); + const response = await axios({ method: 'get', url: downloadUrl, responseType: 'stream' }); const writer = fs.createWriteStream(tempZip); response.data.pipe(writer); @@ -276,8 +980,8 @@ class APIServer { } }); - // 4. Overwrite Core Folders - const coreFolders = ['API', 'Commands', 'Events', 'Structures']; + // 4. Overwrite core folders (keep Configs + Data) + const coreFolders = ['API', 'Commands', 'Events', 'Structures', 'public', 'scripts']; coreFolders.forEach(folder => { const src = path.join(sourcePath, folder); if (fs.existsSync(src)) { @@ -305,19 +1009,39 @@ class APIServer { execSync(`rm -rf "${tempDir}"`); } - res.json({ success: true, message: 'Update installed successfully. Bot is restarting...' }); - - // Reboot - setTimeout(() => process.exit(0), 1000); + if (fs.existsSync(path.join(sourcePath, 'index.js'))) { + fs.copyFileSync(path.join(sourcePath, 'index.js'), './index.js'); + } + + configStore.reloadBotConfigs(); + if (this.client) { + await reloadBot(this.client, { refreshCommands: true }); + } + + const updateMessage = + 'Update installed. Please restart your server (stop and run npm start again) to apply all file changes.'; + notifyUpdateInstalled(updateMessage); + + res.json({ + success: true, + message: updateMessage, + restartRequired: true, + }); } catch (err) { console.error('[Updater] Update failed:', err); + notificationStore.add({ + type: 'error', + title: 'Update failed', + message: err.message, + href: '/settings', + }); res.status(500).json({ success: false, error: err.message }); } }); // --- Transcript API --- - this.app.get('/api/system/transcripts', (req, res) => { + app.get('/system/transcripts', p('transcripts'), (req, res) => { const transcriptDir = './Data/Transcripts'; try { if (!fs.existsSync(transcriptDir)) { @@ -341,7 +1065,7 @@ class APIServer { } }); - this.app.get('/api/system/transcripts/:id', (req, res) => { + app.get('/system/transcripts/:id', p('transcripts'), (req, res) => { const id = req.params.id.replace(/[^0-9]/g, ''); // Sanitize ID const filePath = `./Data/Transcripts/${id}-transcript.html`; try { diff --git a/Addons/Configs/discord-stats.yml b/Addons/Configs/discord-stats.yml new file mode 100644 index 0000000..f295c0e --- /dev/null +++ b/Addons/Configs/discord-stats.yml @@ -0,0 +1,11 @@ + +# SupportBot | Emerald Services +# Discord Stats addon | Created by Xiled Emerald + +Guild_ID: "GUILD_ID_HERE" + +StatsCategory: "Server Statistics" + +UserCount_Name: "Total Members:" +ChannelCount_Name: "Total Channels:" +RoleCount_Name: "Total Roles:" \ No newline at end of file diff --git a/Addons/addon.js b/Addons/addon.js index 7609fd7..675bc57 100644 --- a/Addons/addon.js +++ b/Addons/addon.js @@ -2,7 +2,7 @@ const Discord = require("discord.js"); const fs = require("fs"); const yaml = require("js-yaml"); const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; module.exports = new Command({ name: "addon", diff --git a/Addons/discord-stats.js b/Addons/discord-stats.js new file mode 100644 index 0000000..1299b91 --- /dev/null +++ b/Addons/discord-stats.js @@ -0,0 +1,139 @@ +// SupportBot | Emerald Services +// Discord Stats addon | Created by Xiled Emerald + +const fs = require("fs"); + +const Discord = require("discord.js"); +const yaml = require("js-yaml"); +const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); + +// If you need to read something from the main config! +const cmdconfig = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); + +// This is for your Addon Configuration +const config = yaml.load(fs.readFileSync('./Addons/Configs/discord-stats.yml', 'utf8')); + +const { Command, Event } = require("../Structures/Addon"); + +module.exports.commands = [ + + new Command({ + name: "stats", + description: "Create the discord statistic channels", + options: [], + permissions: ["SEND_MESSAGES"], + async run(interaction) { + const guild = interaction.guild; + const statsCategory = guild.channels.cache.find( + (category) => + category.name === config.StatsCategory || + category.id === config.StatsCategory + ); + + if (!statsCategory) { + const errorEmbed = new Discord.MessageEmbed() + .setTitle("Invalid Category") + .setDescription( + `${supportbot.InvalidChannel}\n\n**Category Required:** \`${config.StatsCategory}\`` + ) + .setColor(supportbot.ErrorColour); + + interaction.reply({ + embeds: [errorEmbed], + ephemeral: true, + }); + return; + } + + const guildName = guild.name; + const userCount = guild.memberCount; + const roleCount = guild.roles.cache.size; + const channelCount = guild.channels.cache.size; + + try { + const guildNameChannel = await guild.channels.create(guildName, { + type: "GUILD_VOICE", + }); + + const userCountChannel = await guild.channels.create( + `${config.UserCount_Name} ${userCount}`, + { + type: "GUILD_VOICE", + } + ); + + const channelCountChannel = await guild.channels.create( + `${config.ChannelCount_Name} ${channelCount}`, + { + type: "GUILD_VOICE", + } + ); + + const roleCountChannel = await guild.channels.create( + `${config.RoleCount_Name} ${roleCount}`, + { + type: "GUILD_VOICE", + } + ); + + guildNameChannel.permissionOverwrites.edit(guild.id, { + VIEW_CHANNEL: true, + CONNECT: false, + }); + + userCountChannel.permissionOverwrites.edit(guild.id, { + VIEW_CHANNEL: true, + CONNECT: false, + }); + + channelCountChannel.permissionOverwrites.edit(guild.id, { + VIEW_CHANNEL: true, + CONNECT: false, + }); + + roleCountChannel.permissionOverwrites.edit(guild.id, { + VIEW_CHANNEL: true, + CONNECT: false, + }); + + userCountChannel.setParent(statsCategory.id); + roleCountChannel.setParent(statsCategory.id); + guildNameChannel.setParent(statsCategory.id); + channelCountChannel.setParent(statsCategory.id); + + const successEmbed = new Discord.MessageEmbed() + .setDescription(":white_check_mark: **[DISCORD STATS]** Channels created successfully!") + .setColor(supportbot.EmbedColour); + + interaction.reply({ + embeds: [successEmbed], + ephemeral: true, + }); + + setInterval(() => { + userCountChannel.setName( + `${config.UserCount_Name} ${userCount}` + ); + channelCountChannel.setName( + `${config.ChannelCount_Name} ${channelCount}` + ); + roleCountChannel.setName( + `${config.RoleCount_Name} ${roleCount}` + ); + }, 30000); + } catch (error) { + console.error(error); + const errorEmbed = new Discord.MessageEmbed() + .setTitle("Error") + .setDescription("An error occurred while creating the stats channels.") + .setColor(supportbot.ErrorColour); + + interaction.reply({ + embeds: [errorEmbed], + ephemeral: true, + }); + } + }, + }), + +]; diff --git a/Commands/General/ai.js b/Commands/General/ai.js index 08cbffa..804fbbc 100644 --- a/Commands/General/ai.js +++ b/Commands/General/ai.js @@ -5,9 +5,9 @@ const fs = require("fs"); const { ApplicationCommandOptionType, ApplicationCommandType, EmbedBuilder, MessageFlags } = require("discord.js"); const yaml = require("js-yaml"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const supportbotai = yaml.load(fs.readFileSync("./Configs/supportbot-ai.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const supportbotai = require("../../Structures/ConfigStore").supportbotAi; const Command = require("../../Structures/Command.js"); const AIDatabase = require("../../Structures/AIDatabase.js"); diff --git a/Commands/General/help.js b/Commands/General/help.js index 9b0e469..eaf2a94 100644 --- a/Commands/General/help.js +++ b/Commands/General/help.js @@ -2,8 +2,8 @@ const fs = require("fs"); const Discord = require("discord.js"); const yaml = require("js-yaml"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; const Command = require("../../Structures/Command.js"); diff --git a/Commands/General/info.js b/Commands/General/info.js index fe4dba3..10a517f 100644 --- a/Commands/General/info.js +++ b/Commands/General/info.js @@ -1,22 +1,11 @@ // SupportBot | Emerald Services // Info Command -const fs = require("fs"); - const Discord = require("discord.js"); -const yaml = require("js-yaml"); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8") -); - -const cmdconfig = yaml.load( - fs.readFileSync("./Configs/commands.yml", "utf8") -); - -const msgconfig = yaml.load( - fs.readFileSync("./Configs/messages.yml", "utf8") -); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const Command = require("../../Structures/Command.js"); diff --git a/Commands/General/ping.js b/Commands/General/ping.js index 99bb62c..fd7d421 100644 --- a/Commands/General/ping.js +++ b/Commands/General/ping.js @@ -5,10 +5,8 @@ const fs = require("fs"); const Discord = require("discord.js"); const yaml = require("js-yaml"); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8") -); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; const Command = require("../../Structures/Command.js"); diff --git a/Commands/General/profile.js b/Commands/General/profile.js index c48cd5d..989f394 100644 --- a/Commands/General/profile.js +++ b/Commands/General/profile.js @@ -20,9 +20,9 @@ const yaml = require("js-yaml"); const db = require("../../Structures/Database.js"); const Command = require("../../Structures/Command.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const clockedInUsers = new Set(); diff --git a/Commands/General/translate.js b/Commands/General/translate.js index 4363f1b..161db24 100644 --- a/Commands/General/translate.js +++ b/Commands/General/translate.js @@ -7,9 +7,9 @@ const yaml = require("js-yaml"); const { translate } = require("@vitalets/google-translate-api"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const Command = require("../../Structures/Command.js"); diff --git a/Commands/Suggestions/suggest.js b/Commands/Suggestions/suggest.js index 7379099..148af80 100644 --- a/Commands/Suggestions/suggest.js +++ b/Commands/Suggestions/suggest.js @@ -3,9 +3,9 @@ const Discord = require("discord.js"); const yaml = require("js-yaml"); const path = require("path"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const Command = require("../../Structures/Command.js"); const DB = require("../../Structures/Database.js"); diff --git a/Commands/Suggestions/suggestadmin.js b/Commands/Suggestions/suggestadmin.js index 33b70ec..377cd91 100644 --- a/Commands/Suggestions/suggestadmin.js +++ b/Commands/Suggestions/suggestadmin.js @@ -2,9 +2,9 @@ const Discord = require("discord.js"); const fs = require("fs"); const yaml = require("js-yaml"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const msgconfig = require("../../Structures/ConfigStore").messages; +const cmdconfig = require("../../Structures/ConfigStore").commands; const SuggestionDB = require("../../Structures/Database.js"); const Command = require("../../Structures/Command.js"); diff --git a/Commands/Tickets/close.js b/Commands/Tickets/close.js index 9d0e8bd..5eeaf48 100644 --- a/Commands/Tickets/close.js +++ b/Commands/Tickets/close.js @@ -8,9 +8,9 @@ const db = require("../../Structures/Database.js"); const TicketManager = require("../../Structures/TicketManager.js"); const Command = require("../../Structures/Command.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; function getDepartmentConfig(departmentKey) { return supportbot.Ticket?.DepartmentSystem?.Departments?.[departmentKey] || null; diff --git a/Commands/Tickets/manageticket.js b/Commands/Tickets/manageticket.js index 4be8c57..ec57184 100644 --- a/Commands/Tickets/manageticket.js +++ b/Commands/Tickets/manageticket.js @@ -12,9 +12,9 @@ const { TextInputStyle, } = require("discord.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const msgconfig = require("../../Structures/ConfigStore").messages; +const cmdconfig = require("../../Structures/ConfigStore").commands; const TicketManager = require("../../Structures/TicketManager.js"); const Command = require("../../Structures/Command.js"); diff --git a/Commands/Tickets/ticket.js b/Commands/Tickets/ticket.js index 8b0952f..2256e30 100644 --- a/Commands/Tickets/ticket.js +++ b/Commands/Tickets/ticket.js @@ -19,14 +19,10 @@ const yaml = require("js-yaml"); const db = require("../../Structures/Database.js"); -const panelconfig = yaml.load( - fs.readFileSync("./Configs/ticket-panel.yml", "utf8"), -); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8"), -); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const panelconfig = require("../../Structures/ConfigStore").ticketPanel; +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const Command = require("../../Structures/Command.js"); const TicketNumberID = require("../../Structures/TicketID.js"); diff --git a/Commands/Tickets/ticketpanel.js b/Commands/Tickets/ticketpanel.js index 1fab59f..0862d12 100644 --- a/Commands/Tickets/ticketpanel.js +++ b/Commands/Tickets/ticketpanel.js @@ -19,9 +19,9 @@ const { } = require("discord.js"); const yaml = require("js-yaml"); -const panelconfig = yaml.load(fs.readFileSync("./Configs/ticket-panel.yml", "utf8")); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const panelconfig = require("../../Structures/ConfigStore").ticketPanel; +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; const Command = require("../../Structures/Command.js"); const db = require("../../Structures/Database.js"); diff --git a/Commands/Utils/embed.js b/Commands/Utils/embed.js index 3024436..9ce36a4 100644 --- a/Commands/Utils/embed.js +++ b/Commands/Utils/embed.js @@ -16,9 +16,9 @@ const Command = require('../../Structures/Command.js'); const fs = require('fs'); const yaml = require('js-yaml'); -const supportbot = yaml.load(fs.readFileSync('./Configs/supportbot.yml', 'utf8')); -const cmdconfig = yaml.load(fs.readFileSync('./Configs/commands.yml', 'utf8')); -const msgconfig = yaml.load(fs.readFileSync('./Configs/messages.yml', 'utf8')); +const supportbot = require('../../Structures/ConfigStore').supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; function parseColor(color) { if (!color) return 0x5865F2; diff --git a/Commands/Utils/mod.js b/Commands/Utils/mod.js index 8cb7e56..c4e0692 100644 --- a/Commands/Utils/mod.js +++ b/Commands/Utils/mod.js @@ -1,9 +1,9 @@ const fs = require("fs"); const { ApplicationCommandOptionType, ApplicationCommandType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType, MessageFlags } = require("discord.js"); const yaml = require("js-yaml"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; +const msgconfig = require("../../Structures/ConfigStore").messages; const Command = require("../../Structures/Command.js"); diff --git a/Commands/Utils/settings.js b/Commands/Utils/settings.js index 6131921..036a705 100644 --- a/Commands/Utils/settings.js +++ b/Commands/Utils/settings.js @@ -4,8 +4,8 @@ const fs = require("fs"); const yaml = require("js-yaml"); const db = require("../../Structures/Database.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../../Structures/ConfigStore").supportbot; +const cmdconfig = require("../../Structures/ConfigStore").commands; async function loadSettings() { return new Promise((resolve, reject) => { diff --git a/Configs/api.yml b/Configs/api.yml index af83968..6fc136f 100644 --- a/Configs/api.yml +++ b/Configs/api.yml @@ -5,4 +5,19 @@ API: Enabled: true Port: 3000 # PORT NUMBER FOR YOUR BOT - SecretKey: "PUT_RANDOM_STRING_HERE" # DO NOT SHARE THIS KEY WITH ANYONE \ No newline at end of file + + # Used to sign dashboard login sessions (keep random; do not share) + SecretKey: "fuiesdfioewefioesfioiosnd" + + # Discord OAuth2 — create an app at https://discord.com/developers/applications + # Add redirect URL exactly matching RedirectUri below (OAuth2 → Redirects) + OAuth: + Enabled: true + ClientId: "1289713673123922032" + ClientSecret: "KwSoar0SLeHXWl5oePGNTb9J5q5NVKAV" + RedirectUri: "http://localhost:3000/api/auth/discord/callback" + # Permanent owners (full access, manage users). Add more dashboard users in the Users page. + OwnerUserIds: + - "829112572816130058" + # Legacy alias for OwnerUserIds (optional) + AllowedUserIds: [] diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index 72117b5..7288e49 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -19,21 +19,20 @@ SupportBot_Version: "v26.1.1" # ------------------------- General: - Name: "SupportBot" + Name: "SupportBo" Token: "BOT_TOKEN" - Addons: Enabled: true - + GuildId: "1198017820093599856" + # ------------------------- # Activity # ------------------------- Activity: - Status: "SupportBot v8" - Type: "Competing" + Status: "Char" + Type: "Watching" StreamingURL: "https://www.twitch.tv/YOUR_TWITCH_NAME" - # Available Types: # Playing # Watching @@ -43,9 +42,9 @@ Activity: # You can also update the activity via Discord using: /settings -# ------------------------- -# Embeds -# ------------------------- + # ------------------------- + # Embeds + # ------------------------- Embed: Colours: @@ -55,12 +54,11 @@ Embed: Warn: "#fca117" Footer: "SupportBot | Developed by Emerald Development" - # Use 0x to change the colour of the embeds. -# ------------------------- -# Roles -# ------------------------- + # ------------------------- + # Roles + # ------------------------- Roles: AutoRole: @@ -74,18 +72,17 @@ Roles: Mod: AllowSupportStaff: false - # Allow Support Staff to use the /mod command. (More in detail customisation in commands.yml) -# ---------------------------- -# System Messages -# ---------------------------- + # ---------------------------- + # System Messages + # ---------------------------- -Welcome: +Welcome: Enabled: true Channel: "CHANNEL_ID" -Leave: +Leave: Enabled: true Channel: "CHANNEL_ID" @@ -110,7 +107,7 @@ Suggestions: # If true this will allow the user to vote for a suggestion they created ShowUsers: true - + Threads: Enabled: true Title: "Suggestion-releated Thread" @@ -121,7 +118,6 @@ Suggestions: Downvote: "2" RemoveVote: "4" RemoveVote_Title: "Remove Vote" - # Available Button Styles # 1 - Blurple # 2 - Grey @@ -129,21 +125,21 @@ Suggestions: # 4 - Red Tags: - Created: "TAG_ID" - Considering: "TAG_ID" - Solved: "TAG_ID" - Denied: "TAG_ID" + Created: "TAG_ID" + Considering: "TAG_ID" + Solved: "TAG_ID" + Denied: "TAG_ID" # ------------------------- # Tickets # ------------------------- VoiceTickets: - Name: "%username%'s VC" + Name: "%username%'s VC" Category: "CATEGORY_ID" Ticket: - TicketType: "channels" + TicketType: "channels" # Available TicketTypes: # channels - Tickets will be created as channels in the TicketChannelsCategory @@ -161,7 +157,7 @@ Ticket: # - Channel where ticket threads are made. (only if ticket threads is enabled above.) # For TicketType: channels - TicketChannelsCategory: "CATEGORY_ID" + TicketChannelsCategory: "CATEGORY_ID" TicketChannelsCategory2: "CATEGORY_ID" # This will be used if the first category has reached the max channel limit. TicketArchiveCategory: "CATEGORY_ID" # --- @@ -184,14 +180,15 @@ Ticket: StaffOnly: true # Set to false is anyone is able to close a ticket. - Invites: # Invites is for ticket threads. + Invites: + # Invites is for ticket threads. StaffOnly: true ClaimTickets: Enabled: false - Channel: "CHANNEL_ID" + Channel: "CHANNEL_ID" # Channel where the ticket assignments are sent for staff to claim. - + ClaimAcceptTime: 120000 # How long the assigned user has to accept the ticket before it gets re-assigned to someone else. # 120000 = 2 Minutes @@ -203,7 +200,6 @@ Ticket: ButtonTitle: "Claim Ticket" ButtonEmoji: "🎫" Button: "1" - # Available Button Styles # 1 - Blurple # 2 - Grey @@ -211,12 +207,13 @@ Ticket: # 4 - Red ReviewSystem: - Enabled: false + Enabled: false Channel: "CHANNEL_ID" UseModal: true - Questions: # Default questions asked when a ticket is created, these are used if departments are disabled. - Enabled: false + Questions: + # Default questions asked when a ticket is created, these are used if departments are disabled. + Enabled: false List: - "Please provide your account email?" - "What is the nature of your issue?" @@ -232,9 +229,9 @@ Ticket: ThreadName: "Chat with SupportBot AI" WelcomeMessage: "Hi! I’m SupportBot AI. You can chat with me here about your issue." -# ------------------------- -# Ticket Departments -# ------------------------- + # ------------------------- + # Ticket Departments + # ------------------------- DepartmentSystem: Enabled: true @@ -339,14 +336,14 @@ Buttons: # 3 - Green # 4 - Red -# ------------------------- -# Select Menus -# ------------------------- + # ------------------------- + # Select Menus + # ------------------------- SelectMenus: Tickets: PanelEmoji: "⚙️" - + CloseEmoji: "🗑️" ArchiveEmoji: "♻️" LockEmoji: "🔐" diff --git a/Configs/ticket-panel.yml b/Configs/ticket-panel.yml index 9817200..099f267 100644 --- a/Configs/ticket-panel.yml +++ b/Configs/ticket-panel.yml @@ -21,7 +21,8 @@ Panel: true Style: Title: "## SupportBot Ticket Creation" - Description: "Click on the button to file a `Ticket` and our team will try their best to assist you in the best way we can!" + Description: "Click on the button to file a `Ticket` and our team will try their + best to assist you in the best way we can!" Image: "https://i.imgur.com/dejQvkg.png" Color: "#45b463" Layout: "4" @@ -45,7 +46,7 @@ Button: # 4 - Green DepartmentMenu: - CustomId: "ticketdepartmentselect" + CustomId: "ticketdepartmentselect" Placeholder: "Choose a ticket department" DefaultDescription: "Open a support ticket" DefaultEmoji: "🎫" @@ -58,7 +59,8 @@ Settings: BottomDivider: false Messages: - NotConfigured: "Ticket Panel is not set up. Please configure it in `/Configs/ticket-panel.yml`." + NotConfigured: "Ticket Panel is not set up. Please configure it in + `/Configs/ticket-panel.yml`." InvalidChannel: "TicketHome channel not found. Please check your config file." PanelSent: "Ticket panel message has been sent!" PanelSentWithDepartments: "Ticket panel message with department selection has been sent!" diff --git a/Data/ai-memory.db b/Data/ai-memory.db new file mode 100644 index 0000000000000000000000000000000000000000..73a069272b27c57da406e6748d103073062bafc4 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYC*>k{6_1fNV2HHI9bB nXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDP#6LLBNzv7 literal 0 HcmV?d00001 diff --git a/Data/ai-memory.db-shm b/Data/ai-memory.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..5ff9cccc3897eed6f78feb2728a16b8fd8af8437 GIT binary patch literal 32768 zcmeI)yA8rH6a`T83%`a2DPjT|MqmpH3JP{%1U8@|JrXRy3>0)M0Ug9rkSL)fK3B4y z6GcwmN&oWOEWFbQVKgi+y5+j;*Yje1nVfcy>-fAmY*)p7ahxvmAD@4p9nXD!t;fCIko&AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0(B8+gm%b6FAVC^kUj`} zEfD9e2!S*O;-n!VkfuPKt0e@|6fi|D&Ht|JDA311AX$MpiBt#>AV7cs0RjXF5FkK+ n009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF{HMSRsC+5i literal 0 HcmV?d00001 diff --git a/Data/ai-memory.db-wal b/Data/ai-memory.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..57e9d6cc86cc3229cc3786152ec7171aa7675ec7 GIT binary patch literal 45352 zcmeI*Z)h8J9LMqe53bvA4`yUgIUSoFTNSk6gDIFv(5_iJYbq-fZfEjadhBx9a+hjB z6w~@p1ff3gp;K^zIED`d6@0P>Lq(sAB0g~XY?Kim4A-pLPPiTG zIBIyUHnB~UlUdfL3&q^CxjF6l-1M>R+=4cfThOxe#o6hCJixJBp?JvKveGcEvM#qT z=1#O0l@<-#7FOrNh9l~oOX@XCczbDu*`ijM&*wLeD9_#%w%c`8T^Oz?>+b009ILKmY**Mn<6dVAAUZzMAxF z;b-jHE0!o%gsg|R=TqUDczeyzb#bTGsFy^~`gUuzx=mZR{@sM2ULbte zxPjQn3xom!p(c5O;qwCO8b9Ud1(tqV{BHL9lkbxk7@2=ZybuHsKmY**5I_I{1Q0*~ z0R(O*(2*C|{^hP+D-R@(_Q?yR0|!+75bk(JpjuiqY+G2J3vcZo zUaggd71&L+15L|tT)isK*Qf~HaJ5$Pw)GUfyW|d3)Fm&VX literal 0 HcmV?d00001 diff --git a/Data/dashboard-users.json b/Data/dashboard-users.json new file mode 100644 index 0000000..0b0f900 --- /dev/null +++ b/Data/dashboard-users.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "users": { + "829112572816130058": { + "id": "829112572816130058", + "username": "Char", + "globalName": "Char", + "avatar": null, + "role": "owner", + "permissions": null, + "enabled": true, + "createdAt": 1778938759443, + "updatedAt": 1778939228361, + "createdBy": "system" + } + } +} \ No newline at end of file diff --git a/Data/supportbot.db b/Data/supportbot.db new file mode 100644 index 0000000000000000000000000000000000000000..46c689123b694e158dcc297d22b3b3172f7fb328 GIT binary patch literal 49152 zcmeI(O>f&a7{GCFTl1$nj-mo9?B7f{Pg3YA4~Bnj7DxOzA^3? zrfED8!Z3`x`n9TG#g-f|6$kp$EbU*nd)N5-&%bZ4|7$cGpBd}-*Z*2OTKi}9+1lsL zKblV(@0xX8%!U902q1s}0tg`RzY6r4b!&6eoLaHl8%ibP*bfG(_*^|WvD;l+blXo4 zZBdkp-GCGgrAAxFgxp zU)`HNtfw~TUzBaeZXkzw&*}ck%-PB{pA3d*zwG|dIo6Gj?BiT)B$aXpau%(B<_5aU zxxz@gvGg2$tB?me!Tas!<+`=8Vg9~c8gU*-Rl8!G>dNpf=FDO!RqVzSl}1}Uv%hP< zJnV{{a4dtJEcpF}0p>|D*7-Lx@T^=-daq?aE~SqrRX_5_u^$FSy0*l-(C^EGOr(=1 zoABh=jpC6EvgViL8OT6J?r^6i#*rUJe*9r>z$5ATlaa1>{iD#6c95*J%e7NX>{0TC z`CeVW`(Z4z0qg3#?bED_q(NTNz6eoE=ycTK2!nQ@e$`7XZ=B`KvCg~Mg2|{SqqJ!6 zt6I%!Z+v=LsA5H^`qa9aUOUdsG!e#8_{!Ipkm7S`CKZa(JQvEbUd)7^A7+D0uO+cR zk{`n$A9q^RABOrG;&p-|F)zaLC`r+WOEv3Y^SX%?Lvi+tz2)hbX5HG_GSBa2D|<2+ zWQIyz?%tT0P^qHG?=zi_Ua^E0XQi(&XW`t%Dwgld>3C(rA7oj+lg#Y#jhfZjx^8Br zF**CCgPZy%W+nNVxt+Y-N#58HKmY**5I_I{1Q0*~0R#|0psE6mWMbU^S2euM3jqWW zKmY**5I_I{1Q0*~fmDF!|0Dte2q1s}0tg_000IagfB*v37vTAS^<&Ho5kLR|1Q0*~ z0R#|0009IL;Q2o}fB*srAb0q*~+A7f^S00IagfB*srAb { - console.log( - `\u001b[31m`, - `${client.user.username} is not in the correct server set in your config. Please leave all other servers and restart the bot.` +const { + getConfiguredGuildId, + syncGuildHealth, + logGuildWarning, +} = require("../Structures/GuildManager.js"); + +module.exports = new Event("guildCreate", async (client, guild) => { + const configuredId = getConfiguredGuildId(); + + if (!configuredId) { + logGuildWarning( + client, + `Joined "${guild.name}" (${guild.id}). Set General.GuildId in config to lock the bot to one server.`, + ); + syncGuildHealth(client); + return; + } + + if (guild.id === configuredId) { + syncGuildHealth(client); + return; + } + + logGuildWarning( + client, + `Joined unauthorized server "${guild.name}" (${guild.id}). Leave it from the dashboard or remove the invite.`, ); - console.log(`\u001b[31m`, `${client.user.username} will now exit.`); - return process.exit(1); + + syncGuildHealth(client); }); diff --git a/Events/guildDelete.js b/Events/guildDelete.js index d3cfbd2..8fde2a7 100644 --- a/Events/guildDelete.js +++ b/Events/guildDelete.js @@ -1,10 +1,23 @@ const Event = require("../Structures/Event.js"); +const { + getConfiguredGuildId, + syncGuildHealth, + logGuildWarning, +} = require("../Structures/GuildManager.js"); -module.exports = new Event("guildDelete", async (client) => { - console.log( - `\u001b[31m`, - `${client.user.username} is not in the correct server set in your config. Please join the server and restart the bot.` - ); - console.log(`\u001b[31m`, `${client.user.username} will now exit.`); - return process.exit(1); +module.exports = new Event("guildDelete", async (client, guild) => { + const configuredId = getConfiguredGuildId(); + + if (configuredId && guild.id === configuredId) { + logGuildWarning( + client, + `Left the configured server "${guild.name}" (${guild.id}). Re-invite the bot or update General.GuildId.`, + ); + } else if (!configuredId) { + logGuildWarning(client, `Left server "${guild.name}" (${guild.id}).`); + } else { + logGuildWarning(client, `Left server "${guild.name}" (${guild.id}).`); + } + + syncGuildHealth(client); }); diff --git a/Events/guildMemberAdd.js b/Events/guildMemberAdd.js index d37fefa..9155eef 100644 --- a/Events/guildMemberAdd.js +++ b/Events/guildMemberAdd.js @@ -10,16 +10,10 @@ const { ThumbnailBuilder, MediaGalleryBuilder } = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); const Event = require("../Structures/Event.js"); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8") -); -const msgconfig = yaml.load( - fs.readFileSync("./Configs/messages.yml", "utf8") -); +const supportbot = require("../Structures/ConfigStore").supportbot; +const msgconfig = require("../Structures/ConfigStore").messages; function getWelcomeThumbnail(client, member, iconCfg) { switch ((iconCfg?.Mode || "").toUpperCase()) { diff --git a/Events/guildMemberRemove.js b/Events/guildMemberRemove.js index f4d1bb2..556a966 100644 --- a/Events/guildMemberRemove.js +++ b/Events/guildMemberRemove.js @@ -3,8 +3,8 @@ const fs = require("fs"); const yaml = require("js-yaml"); const Event = require("../Structures/Event.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; +const msgconfig = require("../Structures/ConfigStore").messages; module.exports = new Event("guildMemberRemove", async (client, member) => { diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index 54b32d2..c05a948 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -1,12 +1,8 @@ -const fs = require("fs"); const Discord = require("discord.js"); -const yaml = require("js-yaml"); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8"), -); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; +const cmdconfig = require("../Structures/ConfigStore").commands; +const msgconfig = require("../Structures/ConfigStore").messages; const Event = require("../Structures/Event.js"); const db = require("../Structures/Database.js"); diff --git a/Events/messageCreate.js b/Events/messageCreate.js index 35506b1..0d0a288 100644 --- a/Events/messageCreate.js +++ b/Events/messageCreate.js @@ -1,14 +1,8 @@ -const fs = require("fs"); const Discord = require("discord.js"); -const yaml = require("js-yaml"); const axios = require("axios"); -const supportbotai = yaml.load( - fs.readFileSync("./Configs/supportbot-ai.yml", "utf8"), -); -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8"), -); +const supportbotai = require("../Structures/ConfigStore").supportbotAi; +const supportbot = require("../Structures/ConfigStore").supportbot; const Event = require("../Structures/Event.js"); const AIDatabase = require("../Structures/AIDatabase.js"); diff --git a/Events/messageDelete.js b/Events/messageDelete.js index 5490f9c..d2d2b5d 100644 --- a/Events/messageDelete.js +++ b/Events/messageDelete.js @@ -3,8 +3,8 @@ const fs = require("fs"); const yaml = require("js-yaml"); const Event = require("../Structures/Event.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; +const msgconfig = require("../Structures/ConfigStore").messages; module.exports = new Event("messageDelete", async (client, message) => { if (!message.guild) return; diff --git a/Events/messageReactionAdd.js b/Events/messageReactionAdd.js index 25e6508..fe9614e 100644 --- a/Events/messageReactionAdd.js +++ b/Events/messageReactionAdd.js @@ -1,13 +1,6 @@ -const fs = require("fs"); -const yaml = require("js-yaml"); - -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8"), -); -const supportbotai = yaml.load( - fs.readFileSync("./Configs/supportbot-ai.yml", "utf8"), -); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; +const supportbotai = require("../Structures/ConfigStore").supportbotAi; +const cmdconfig = require("../Structures/ConfigStore").commands; const Event = require("../Structures/Event.js"); diff --git a/Events/messageUpdate.js b/Events/messageUpdate.js index 4fac6a0..ff963ee 100644 --- a/Events/messageUpdate.js +++ b/Events/messageUpdate.js @@ -4,8 +4,8 @@ const yaml = require("js-yaml"); const Event = require("../Structures/Event.js"); // Load the configuration files -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("../Structures/ConfigStore").supportbot; +const msgconfig = require("../Structures/ConfigStore").messages; module.exports = new Event("messageUpdate", async (client, oldMessage, newMessage) => { diff --git a/Events/ready.js b/Events/ready.js index ccbb15c..2db3a7f 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -1,126 +1,8 @@ -const fs = require("fs"); -const Discord = require("discord.js"); -const yaml = require("js-yaml"); const Event = require("../Structures/Event.js"); - -// Load configs -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -const ACTIVITY_TYPES = { - PLAYING: Discord.ActivityType.Playing, - WATCHING: Discord.ActivityType.Watching, - LISTENING: Discord.ActivityType.Listening, - COMPETING: Discord.ActivityType.Competing -}; - -const setActivity = (client, type, status) => { - const activityType = ACTIVITY_TYPES[type?.toUpperCase()]; - if (!activityType) return; - - client.user.setPresence({ - activities: [{ name: status || "Online", type: activityType }], - status: "online" - }); -}; - -// simple colors -const c = { - reset: "\x1b[0m", - gray: "\x1b[90m", - green: "\x1b[32m", - yellow: "\x1b[33m", - cyan: "\x1b[36m", - bold: "\x1b[1m" -}; - -function line() { - console.log(`${c.gray}────────────────────────────────────────────────────────${c.reset}`); -} - -function section(title) { - console.log(`\n${c.green}${title}${c.reset}`); - console.log(`${c.gray}${"-".repeat(title.length)}${c.reset}`); -} - -function info(label, value) { - console.log(`${c.gray}${label.padEnd(14)}${c.reset} ${value}`); -} - -function status(label, ok, details = "") { - const icon = ok ? `${c.green}✓${c.reset}` : `${c.yellow}!${c.reset}`; - console.log(` ${icon} ${label}${details ? ` (${details})` : ""}`); -} - -const logStartup = async (client) => { - console.clear(); - - const botName = supportbot?.General?.Name || "SupportBot"; - const botVersion = supportbot?.SupportBot_Version || "Unknown"; - - const inviteUrl = `https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands`; - - line(); - console.log(`${c.bold}${c.green}SupportBot${c.reset}`); - console.log(`${c.gray}Emerald Services${c.reset}`); - line(); - - section("System"); - info("Bot Name", botName); - info("Version", botVersion); - info("Node.js", process.version); - info("Discord.js", `v${Discord.version}`); - info("Logged in as", client.user.tag); - info("Guilds", `${client.guilds.cache.size}`); - - section("Links"); - info("Docs", "https://emerald-services.gitbook.io/"); - info("Discord", "https://dsc.gg/emerald-dev"); - info("Invite", inviteUrl); - - console.log(""); -}; - -const checkConfigs = async (client) => { - const guild = client.guilds.cache.first(); - if (!guild) return; - - section("Config Check"); - - const roles = [ - supportbot?.Roles?.StaffMember?.Admin, - supportbot?.Roles?.StaffMember?.Staff, - supportbot?.Roles?.AutoRole?.Role - ].filter(Boolean); - - const channels = [ - supportbot?.Ticket?.TicketHome - ].filter(Boolean); - - const [roleResults, channelResults] = await Promise.all([ - Promise.all(roles.map((role) => client.getRole(role, guild))), - Promise.all(channels.map((channel) => client.getChannel(channel, guild))) - ]); - - const missingRoles = roles.filter((_, i) => !roleResults[i]); - const missingChannels = channels.filter((_, i) => !channelResults[i]); - - if (!missingRoles.length && !missingChannels.length) { - status("All configurations validated successfully", true); - } else { - if (missingRoles.length) { - status("Missing roles", false, missingRoles.join(", ")); - } - - if (missingChannels.length) { - status("Missing channels", false, missingChannels.join(", ")); - } - } - - console.log(""); -}; +const { runBotReady } = require("../Structures/BotStartup.js"); module.exports = new Event("clientReady", async (client) => { - setActivity(client, supportbot?.Activity?.Type, supportbot?.Activity?.Status); - await logStartup(client); - await checkConfigs(client); -}); \ No newline at end of file + // restartDiscordBot runs startup manually — clientReady often does not re-fire anyway + if (client.__explicitStartup) return; + await runBotReady(client, { clearConsole: true, logCommands: false }); +}); diff --git a/README.md b/README.md index e40b8c3..4630bb3 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,193 @@ -

-
- -
- SupportBot -
-

+

+ + SupportBot Dashboard — manage tickets, monitor activity, and keep your server running great + +

-
- - - shield.png - - - - shield.png - - - - shield.png - - - - shield.png - - -## Supported Versions - -| SupportBot | Node.JS | Discord.JS | Supported | -|------------|---------|------------|------------| -| 8.x | 22.x | 14.x. | ✅ Yes -| 7.7.3 | 16.x | 13.x. | ❌ No -| 7.x | 16.x | 13.x. | ❌ No -| 6.x | 14.x | 13.x. | ❌ No -| 5.x | 12.x | 13.x. | ❌ No -| 4.x | 11.x | 13.x. | ❌ No -| Older | 10.x | 13.x. | ❌ No - -
+

SupportBot Dashboard

- Website - • - Wiki -
- About - • - Support - • - License - • - Third-Party - • - Contributors + An unofficial fork of Emerald-Services/SupportBot with a built-in, self-hosted web dashboard.

+

+ + MIT License + + + discord.js v14 + + + Node.js 22.x + + + Upstream SupportBot + +

+ +

+ About · + Features · + Requirements · + Getting started · + Dashboard access · + Configuration · + Addons · + Development · + Upstream & credits · + License +

+ +--- + ## About -SupportBot is an Open-Source discord bot built with [discord.js](https://github.com/discordjs/discord.js). It's primarily focused to help servers organise and manage their support system in a unique way with full customisation to match your brand. +This repository is a **community fork** of [SupportBot](https://github.com/Emerald-Services/SupportBot) — the open-source Discord support/ticket bot by [Emerald Services](https://emeraldsrv.dev). It is **not** affiliated with or endorsed by Emerald Services. -## Support +What this fork adds is a **self-hosted dashboard**: a modern web UI and REST API that run in the **same Node process** as the bot. You configure tickets, messages, commands, AI settings, addons, and more from the browser instead of editing YAML by hand. The API starts immediately on launch, so the dashboard stays reachable even while the bot is connecting or restarting. - - Discord - +If you only need the original bot without the dashboard, use the [official SupportBot repository](https://github.com/Emerald-Services/SupportBot). +## Features + +### Self-hosted dashboard + +| Area | What you get | +|------|----------------| +| **Overview** | Live stats — servers, members, open/closed tickets, module setup status, RAM/CPU/uptime | +| **Visual config editors** | Edit `supportbot`, ticket panel, commands, messages, and AI config with form fields instead of raw YAML | +| **Discord pickers** | Choose channels, roles, and categories from dropdowns when configuring the bot (no copy-pasting IDs) | +| **Guild health** | Warnings if the bot is in the wrong server or extra guilds; quick link to fix `GuildId` or leave stray servers | +| **Logs** | Browse Output, Warn, and Error logs from the dashboard | +| **Transcripts** | View saved ticket HTML transcripts | +| **Notifications** | In-app alerts for bot restarts, update checks, and installs | +| **Settings** | Check for dashboard updates and apply them from the UI | +| **Users & roles** | Invite staff via Discord OAuth; assign owner, admin, editor, viewer, or custom per-page permissions | +| **Addons** | Browse and install addons from the [official Addons repo](https://github.com/Emerald-Services/Addons); edit addon configs in the sidebar like other config files | + +### Bot & API (unchanged upstream behaviour, plus improvements) + +- Full **SupportBot v26** ticket system, slash commands, AI assistant, and addon support +- **Discord OAuth** login for the dashboard (no shared API secret in the browser) +- **API key** (`SecretKey` in `api.yml`) still works for automation and scripts +- Config saves can **restart the Discord bot** while keeping the dashboard and API online +- Timeouts and caching so the UI does not hang when Discord or GitHub is slow + +## Requirements + +| Component | Version | +|-----------|---------| +| **Node.js** | 22.x (matches [SupportBot 8.x](https://github.com/Emerald-Services/SupportBot)) | +| **discord.js** | 14.x (installed via `package.json`) | +| **Discord bot** | Application with bot token and required intents | +| **Discord OAuth app** | For dashboard login (optional but recommended) | + +You need a machine or VPS that can run Node and reach Discord’s API (and GitHub, if you use in-dashboard updates or the addon marketplace). + +## Getting started + +### 1. Clone and install + +```bash +git clone https://github.com/C-h-a-r/SupportBot-Dashboard.git +cd SupportBot-Dashboard +npm install +``` + +### 2. Configure the bot + +Edit `Configs/supportbot.yml`: + +- Set `General.Token` to your bot token +- Set `General.GuildId` to your Discord server ID +- Enable addons if you use them: `General.Addons.Enabled: true` + +Other YAML files in `Configs/` can stay at defaults until you open the dashboard. + +### 3. Configure the API & dashboard + +Edit `Configs/api.yml`: + +```yaml +API: + Enabled: true + Port: 3000 + SecretKey: "generate-a-long-random-string" + OAuth: + Enabled: true + ClientId: "YOUR_DISCORD_APP_CLIENT_ID" + ClientSecret: "YOUR_DISCORD_APP_CLIENT_SECRET" + RedirectUri: "http://localhost:3000/api/auth/discord/callback" + OwnerUserIds: + - "YOUR_DISCORD_USER_ID" +``` + +**Discord Developer Portal** + +1. Create an application at [discord.com/developers/applications](https://discord.com/developers/applications) +2. Under **OAuth2 → Redirects**, add the exact `RedirectUri` (e.g. `http://localhost:3000/api/auth/discord/callback`) +3. Use the same app’s **Client ID** and **Client Secret** in `api.yml` +4. Put your Discord user ID in `OwnerUserIds` for full dashboard access + +For production, change `RedirectUri` to your public URL (e.g. `https://bot.example.com/api/auth/discord/callback`) and use HTTPS. + +### 4. Start the bot + +```bash +npm start +``` + +When startup succeeds you should see: + +- `[Dashboard] API listening on http://localhost:3000` +- Discord bot login and slash command registration + +Open **http://localhost:3000** in your browser and sign in with Discord. + +The web UI is shipped as static files in `public/dashboard/` (included in this repository). You do not need a separate frontend build step. + +> **Tip:** On first run, invite the bot to your server with the permissions SupportBot needs. Set `General.GuildId` to that server’s ID so channel/role pickers and guild health checks work. + +## Dashboard access + +| Method | Use case | +|--------|----------| +| **Discord OAuth** | Normal use — open the site, click **Continue with Discord**, sign in as an owner or invited user | +| **Bearer token** | Scripts and automation — `Authorization: Bearer ` on `/api/*` routes | + +Owners listed in `api.yml` (`OwnerUserIds`) always have full access. Additional users can be added under **Users** in the dashboard with granular permissions per config file and page. + +## Configuration + +| File | Purpose | +|------|---------| +| `Configs/supportbot.yml` | Bot token, guild, staff roles, ticket channels, embed colours, etc. | +| `Configs/ticket-panel.yml` | Ticket panel layout and buttons | +| `Configs/commands.yml` | Enable/disable slash commands | +| `Configs/messages.yml` | User-facing message strings | +| `Configs/supportbot-ai.yml` | AI assistant settings | +| `Configs/api.yml` | Dashboard port, session secret, OAuth | +| `Addons/Configs/*` | Per-addon config (after installing from **Addons** page) | + +Most of these are editable from the sidebar under **Tickets & support**, **Community**, **Server control**, and **Addons**. + +## Addons + +1. Open **Addons** in the dashboard (or install manually into `Addons/` as in the [upstream docs](https://github.com/Emerald-Services/Addons)) +2. Click **Install** on an addon from the marketplace — files are copied into `Addons/` and `Addons/Configs/`, then the bot restarts +3. Edit the addon’s config from the **Addons** section in the left sidebar (same editor as core configs) +4. Ensure `General.Addons.Enabled` is `true` in bot config + +Official addon list: [github.com/Emerald-Services/Addons](https://github.com/Emerald-Services/Addons) + +## Upstream & credits + +- **Original project:** [Emerald-Services/SupportBot](https://github.com/Emerald-Services/SupportBot) — MIT license, ticket bot for Discord +- **Official addons:** [Emerald-Services/Addons](https://github.com/Emerald-Services/Addons) +- **Community:** [Emerald Discord](https://emeraldsrv.dev/discord) · [Wiki](https://github.com/Emerald-Services/SupportBot/wiki) + +This fork is maintained independently. For bugs in **core ticket/command behaviour** that also exist upstream, consider reporting to the [official repo](https://github.com/Emerald-Services/SupportBot/issues). For **dashboard-specific** issues, use this repository’s issues. ## License -Released under the [MIT](https://opensource.org/licenses/MIT) license. - - -## Third-Party - -- [Official addons repository](https://github.com/Emerald-Services/Addons/) -- [Syphers Addons](https://github.com/SypherRed/SB_Addons_Unofficial) -- [BuiltByBit]([https://builtbybit.com/supportbot](https://builtbybit.com/resources/supportbot-advanced-ticket-bot.8940/)) -- [Polymart](https://polymart.org/resource/supportbot-1-discord-ticket-bot.518) - - -## Contributors - - - - - -## Hosting - -You can use our [Pterodactyl egg](https://github.com/Emerald-Services/Pterodactyl-Egg) to host it on your own panel. We currently don't offer hosting for you, altough we might add this in the future. -If you don't know how to install pterodactyl, you could always host it on replit: - -[![Run on Repl.it](https://repl.it/badge/github/ItsNyoty/IKI-bot)]([https://repl.it/github/ItsNyoty/iki](https://repl.it/github/Emerald-Services/SupportBot -) - - - +Released under the [MIT License](https://opensource.org/licenses/MIT), same as upstream SupportBot. diff --git a/Structures/AddonCatalog.js b/Structures/AddonCatalog.js new file mode 100644 index 0000000..b43ddac --- /dev/null +++ b/Structures/AddonCatalog.js @@ -0,0 +1,270 @@ +const fs = require("fs"); +const path = require("path"); +const axios = require("axios"); +const { withTimeout } = require("./asyncTimeout.js"); + +const ADDONS_REPO = "Emerald-Services/Addons"; +const ADDONS_BRANCH = "main"; +const GITHUB_API = `https://api.github.com/repos/${ADDONS_REPO}/contents`; +const GITHUB_RAW = `https://raw.githubusercontent.com/${ADDONS_REPO}/${ADDONS_BRANCH}`; + +const README_PATTERN = /^readme\.md$/i; + +function ensureAddonDirs() { + if (!fs.existsSync("./Addons")) { + fs.mkdirSync("./Addons", { recursive: true }); + } + if (!fs.existsSync("./Addons/Configs")) { + fs.mkdirSync("./Addons/Configs", { recursive: true }); + } +} + +async function githubList(dirPath = "") { + const url = dirPath + ? `${GITHUB_API}/${encodeURIComponent(dirPath)}?ref=${ADDONS_BRANCH}` + : `${GITHUB_API}?ref=${ADDONS_BRANCH}`; + + const res = await withTimeout( + axios.get(url, { + headers: { Accept: "application/vnd.github+json" }, + timeout: 15_000, + }), + 18_000, + "GitHub API request timed out", + ); + + return res.data; +} + +async function listCatalogAddons() { + const root = await githubList(""); + const dirs = root.filter((entry) => entry.type === "dir"); + + const addons = []; + for (const dir of dirs) { + const summary = await summarizeAddon(dir.name); + if (summary) addons.push(summary); + } + + return addons.sort((a, b) => a.name.localeCompare(b.name)); +} + +async function summarizeAddon(name) { + const files = await listAddonRepoFiles(name); + const jsFiles = files.filter((f) => f.name.endsWith(".js")); + if (jsFiles.length === 0) return null; + + const configFiles = files + .filter((f) => f.relativePath.startsWith("Configs/")) + .map((f) => f.name); + + const readme = files.find((f) => README_PATTERN.test(f.name)); + + return { + id: name, + name, + description: readme + ? `Community addon from Emerald-Services/Addons` + : `Addon from ${name}`, + repositoryUrl: `https://github.com/${ADDONS_REPO}/tree/${ADDONS_BRANCH}/${name}`, + jsFiles: jsFiles.map((f) => f.name), + configFiles, + fileCount: files.length, + }; +} + +async function listAddonRepoFiles(addonName) { + const files = []; + const queue = [addonName]; + + while (queue.length) { + const dir = queue.shift(); + const entries = await githubList(dir); + + for (const entry of entries) { + if (entry.type === "dir") { + queue.push(entry.path); + continue; + } + if (entry.type !== "file") continue; + if (README_PATTERN.test(entry.name)) continue; + + const relativePath = entry.path.slice(`${addonName}/`.length); + files.push({ + name: entry.name, + path: entry.path, + relativePath, + downloadUrl: entry.download_url, + size: entry.size, + }); + } + } + + return files; +} + +function mapRepoFileToLocal(addonName, relativePath) { + const parts = relativePath.split("/").filter(Boolean); + if (parts[0] === "Configs") { + return path.join("Addons", "Configs", ...parts.slice(1)); + } + if (parts.length === 1 && parts[0].endsWith(".js")) { + return path.join("Addons", parts[0]); + } + return path.join("Addons", ...parts); +} + +async function downloadFile(url) { + const res = await withTimeout( + axios.get(url, { responseType: "arraybuffer", timeout: 30_000 }), + 35_000, + "Addon file download timed out", + ); + return Buffer.from(res.data); +} + +function listLocalAddonJs() { + ensureAddonDirs(); + return fs + .readdirSync("./Addons") + .filter((f) => f.endsWith(".js") && f !== "addon.js"); +} + +function listLocalAddonConfigs() { + ensureAddonDirs(); + const dir = "./Addons/Configs"; + if (!fs.existsSync(dir)) return []; + return fs + .readdirSync(dir) + .filter((f) => f.endsWith(".yml") || f.endsWith(".yaml") || f.endsWith(".json")); +} + +function isAddonInstalled(catalogEntry) { + const localJs = listLocalAddonJs(); + return catalogEntry.jsFiles.every((file) => localJs.includes(file)); +} + +async function listInstalledAddons(catalog) { + const localJs = listLocalAddonJs(); + const installed = []; + + for (const entry of catalog) { + const allPresent = entry.jsFiles.every((file) => localJs.includes(file)); + if (allPresent) { + installed.push({ + id: entry.id, + name: entry.name, + jsFiles: entry.jsFiles, + configFiles: entry.configFiles.filter((f) => { + const local = listLocalAddonConfigs(); + return local.includes(f); + }), + }); + } + } + + const orphanJs = localJs.filter( + (file) => !installed.some((a) => a.jsFiles.includes(file)), + ); + for (const file of orphanJs) { + installed.push({ + id: file.replace(/\.js$/, ""), + name: file.replace(/\.js$/, ""), + jsFiles: [file], + configFiles: [], + custom: true, + }); + } + + return installed; +} + +async function installAddonFromCatalog(addonName) { + const safeName = String(addonName).replace(/[^a-zA-Z0-9_-]/g, ""); + if (!safeName) { + throw new Error("Invalid addon name"); + } + + const summary = await summarizeAddon(safeName); + if (!summary) { + throw new Error(`Addon "${safeName}" was not found in the catalog`); + } + + const files = await listAddonRepoFiles(safeName); + if (files.length === 0) { + throw new Error(`Addon "${safeName}" has no installable files`); + } + + ensureAddonDirs(); + const written = []; + + for (const file of files) { + const localPath = mapRepoFileToLocal(safeName, file.relativePath); + const dir = path.dirname(localPath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + const content = await downloadFile(file.downloadUrl); + fs.writeFileSync(localPath, content); + written.push(localPath.replace(/\\/g, "/")); + } + + return { + addon: summary, + filesWritten: written, + }; +} + +function readAddonConfig(filename) { + const safe = path.basename(filename); + if (!/^[a-zA-Z0-9_.-]+\.(yml|yaml|json)$/.test(safe)) { + throw new Error("Invalid config filename"); + } + + const filePath = path.join("./Addons/Configs", safe); + if (!fs.existsSync(filePath)) { + throw new Error("Addon config not found"); + } + + const raw = fs.readFileSync(filePath, "utf8"); + if (safe.endsWith(".json")) { + return { filename: safe, format: "json", data: JSON.parse(raw), raw }; + } + + const yaml = require("js-yaml"); + return { filename: safe, format: "yaml", data: yaml.load(raw) || {}, raw }; +} + +function writeAddonConfig(filename, data) { + const safe = path.basename(filename); + if (!/^[a-zA-Z0-9_.-]+\.(yml|yaml|json)$/.test(safe)) { + throw new Error("Invalid config filename"); + } + + ensureAddonDirs(); + const filePath = path.join("./Addons/Configs", safe); + let content; + + if (safe.endsWith(".json")) { + content = `${JSON.stringify(data, null, 2)}\n`; + } else { + const yaml = require("js-yaml"); + content = yaml.dump(data, { lineWidth: 120, noRefs: true }); + } + + fs.writeFileSync(filePath, content); + return { filename: safe, path: filePath.replace(/\\/g, "/") }; +} + +module.exports = { + ADDONS_REPO, + listCatalogAddons, + listInstalledAddons, + isAddonInstalled, + installAddonFromCatalog, + listLocalAddonConfigs, + readAddonConfig, + writeAddonConfig, + mapRepoFileToLocal, +}; diff --git a/Structures/BotInvite.js b/Structures/BotInvite.js new file mode 100644 index 0000000..95b47a1 --- /dev/null +++ b/Structures/BotInvite.js @@ -0,0 +1,6 @@ +function getBotInviteUrl(clientId) { + if (!clientId) return null; + return `https://discord.com/api/oauth2/authorize?client_id=${clientId}&permissions=8&scope=bot%20applications.commands`; +} + +module.exports = { getBotInviteUrl }; diff --git a/Structures/BotReload.js b/Structures/BotReload.js new file mode 100644 index 0000000..475de29 --- /dev/null +++ b/Structures/BotReload.js @@ -0,0 +1,150 @@ +const fs = require("fs"); +const path = require("path"); +const configStore = require("./ConfigStore.js"); +const { getPrimaryGuild } = require("./GuildManager.js"); +const { + applyPresence, + runBotReady, + logSlashCommandsRegistered, +} = require("./BotStartup.js"); + +function walk(dir, ext = ".js", fileList = []) { + if (!fs.existsSync(dir)) return fileList; + for (const file of fs.readdirSync(dir)) { + const full = path.join(dir, file); + if (fs.statSync(full).isDirectory()) { + walk(full, ext, fileList); + } else if (file.endsWith(ext)) { + fileList.push(full.replace(/\\/g, "/")); + } + } + return fileList; +} + +async function refreshSlashCommands(client) { + if (!client?.application) return { count: 0 }; + + const cmdconfig = configStore.commands; + const commandFiles = walk("./Commands"); + client.commands.clear(); + + for (const file of commandFiles) { + const resolved = path.resolve(file); + if (require.cache[resolved]) { + delete require.cache[resolved]; + } + } + + let count = 0; + for (const file of commandFiles) { + const command = require(path.resolve(file)); + const matchingConfig = Object.values(cmdconfig).find( + (entry) => + entry && + typeof entry === "object" && + entry.Command && + String(entry.Command).toLowerCase() === + String(command.name).toLowerCase(), + ); + + if (matchingConfig && matchingConfig.Enabled === false) { + continue; + } + + client.commands.set(command.name, command); + count++; + } + + const payload = client.commands.map((cmd) => cmd.data ?? cmd); + for (const guild of client.guilds.cache.values()) { + await guild.commands.set(payload); + } + + return { count }; +} + +async function reloadBot(client, options = {}) { + const { fileKey, refreshCommands = true } = options; + + let reloaded; + if (fileKey) { + configStore.reloadFile(fileKey); + reloaded = [fileKey]; + } else { + reloaded = configStore.reloadBotConfigs(); + } + + applyPresence(client); + + let commands = null; + if (refreshCommands && (!fileKey || fileKey === "commands")) { + commands = await refreshSlashCommands(client); + } + + return { + reloaded, + commands, + }; +} + +/** + * Reload configs from disk, reconnect the Discord session, and refresh presence/commands. + * API and dashboard keep running on the same process. + */ +async function restartDiscordBot(client) { + if (!client) { + const err = new Error("Bot client not available"); + err.code = "NO_CLIENT"; + throw err; + } + + const reloaded = configStore.reloadBotConfigs(); + const token = configStore.supportbot?.General?.Token; + + if (!token || String(token).trim() === "" || token === "BOT_TOKEN") { + const err = new Error("Invalid or missing bot token in supportbot.yml"); + err.code = "INVALID_TOKEN"; + throw err; + } + + console.log("[BotReload] Restarting Discord bot after config change…"); + client.__restarting = true; + + if (client.user) { + try { + await client.destroy(); + } catch (destroyErr) { + console.warn("[BotReload] destroy:", destroyErr.message); + } + } + + client.__explicitStartup = true; + try { + try { + await client.login(token); + } catch (loginErr) { + console.error("[BotReload] login failed:", loginErr.message); + const err = new Error(`Could not start bot: ${loginErr.message}`); + err.code = "LOGIN_FAILED"; + throw err; + } + + // clientReady does not fire again after destroy()+login() — run startup explicitly + await runBotReady(client, { clearConsole: true, logCommands: false }); + const commands = await refreshSlashCommands(client); + logSlashCommandsRegistered(client); + + console.log("[BotReload] Bot restarted successfully"); + return { restarted: true, reloaded, commands }; + } finally { + client.__explicitStartup = false; + client.__restarting = false; + } +} + +module.exports = { + applyPresence, + refreshSlashCommands, + reloadBot, + restartDiscordBot, +}; diff --git a/Structures/BotStartup.js b/Structures/BotStartup.js new file mode 100644 index 0000000..97b5522 --- /dev/null +++ b/Structures/BotStartup.js @@ -0,0 +1,174 @@ +const Discord = require("discord.js"); +const configStore = require("./ConfigStore.js"); +const { + getPrimaryGuild, + syncGuildHealth, +} = require("./GuildManager.js"); + +const ACTIVITY_TYPES = { + PLAYING: Discord.ActivityType.Playing, + WATCHING: Discord.ActivityType.Watching, + LISTENING: Discord.ActivityType.Listening, + COMPETING: Discord.ActivityType.Competing, + STREAMING: Discord.ActivityType.Streaming, +}; + +function applyPresence(client) { + if (!client?.user) return; + + const activity = configStore.supportbot?.Activity; + const typeKey = activity?.Type?.toUpperCase(); + const type = ACTIVITY_TYPES[typeKey] ?? Discord.ActivityType.Playing; + const name = activity?.Status || "Online"; + + const activityPayload = { name, type }; + + if (typeKey === "STREAMING" && activity?.StreamingURL) { + activityPayload.url = activity.StreamingURL; + } + + client.user.setPresence({ + activities: [activityPayload], + status: "online", + }); +} + +const c = { + reset: "\x1b[0m", + gray: "\x1b[90m", + green: "\x1b[32m", + yellow: "\x1b[33m", + bold: "\x1b[1m", + white: "\x1b[37m", +}; + +function line() { + console.log( + `${c.gray}────────────────────────────────────────────────────────${c.reset}`, + ); +} + +function section(title) { + console.log(`\n${c.green}${title}${c.reset}`); + console.log(`${c.gray}${"-".repeat(title.length)}${c.reset}`); +} + +function info(label, value) { + console.log(`${c.gray}${label.padEnd(14)}${c.reset} ${value}`); +} + +function status(label, ok, details = "") { + const icon = ok ? `${c.green}✓${c.reset}` : `${c.yellow}!${c.reset}`; + console.log(` ${icon} ${label}${details ? ` (${details})` : ""}`); +} + +async function logStartup(client, options = {}) { + const { clearConsole = true } = options; + const supportbot = configStore.supportbot; + + if (clearConsole) { + console.clear(); + } + + const botName = supportbot?.General?.Name || "SupportBot"; + const botVersion = supportbot?.SupportBot_Version || "Unknown"; + const { getBotInviteUrl } = require("./BotInvite.js"); + const inviteUrl = getBotInviteUrl(client.user.id); + + line(); + console.log(`${c.bold}${c.green}SupportBot${c.reset}`); + console.log(`${c.gray}Emerald Services${c.reset}`); + line(); + + section("System"); + info("Bot Name", botName); + info("Version", botVersion); + info("Node.js", process.version); + info("Discord.js", `v${Discord.version}`); + info("Logged in as", client.user.tag); + info("Guilds", `${client.guilds.cache.size}`); + + section("Links"); + info("Docs", "https://emerald-services.gitbook.io/"); + info("Discord", "https://dsc.gg/emerald-dev"); + info("Invite", inviteUrl); + + console.log(""); +} + +async function checkConfigs(client) { + const supportbot = configStore.supportbot; + const health = syncGuildHealth(client); + + if (health.status !== "ok") { + section("Guild"); + status("Guild setup", false, health.message || health.status); + console.log(""); + } + + const guild = getPrimaryGuild(client); + if (!guild) return; + + section("Config Check"); + + const roles = [ + supportbot?.Roles?.StaffMember?.Admin, + supportbot?.Roles?.StaffMember?.Staff, + supportbot?.Roles?.AutoRole?.Role, + ].filter(Boolean); + + const channels = [supportbot?.Ticket?.TicketHome].filter(Boolean); + + const [roleResults, channelResults] = await Promise.all([ + Promise.all(roles.map((role) => client.getRole(role, guild))), + Promise.all(channels.map((channel) => client.getChannel(channel, guild))), + ]); + + const missingRoles = roles.filter((_, i) => !roleResults[i]); + const missingChannels = channels.filter((_, i) => !channelResults[i]); + + if (!missingRoles.length && !missingChannels.length) { + status("All configurations validated successfully", true); + } else { + if (missingRoles.length) { + status("Missing roles", false, missingRoles.join(", ")); + } + if (missingChannels.length) { + status("Missing channels", false, missingChannels.join(", ")); + } + } + + console.log(""); +} + +function logSlashCommandsRegistered(client) { + const guild = getPrimaryGuild(client); + if (!guild) return; + console.log( + `\n${c.green}✓${c.reset} ${c.white}Slash Commands Registered${c.reset} ${c.gray}for ${guild.name}${c.reset}`, + ); +} + +/** + * Same work as Events/ready.js — safe to call after config reload reconnects. + */ +async function runBotReady(client, options = {}) { + const { clearConsole = true, logCommands = false } = options; + + syncGuildHealth(client); + applyPresence(client); + await logStartup(client, { clearConsole }); + await checkConfigs(client); + + if (logCommands) { + logSlashCommandsRegistered(client); + } +} + +module.exports = { + applyPresence, + logStartup, + checkConfigs, + logSlashCommandsRegistered, + runBotReady, +}; diff --git a/Structures/Client.js b/Structures/Client.js index 97392d6..b90734a 100644 --- a/Structures/Client.js +++ b/Structures/Client.js @@ -2,11 +2,12 @@ const fs = require("fs"); const path = require("path"); const Discord = require("discord.js"); const { GatewayIntentBits, Partials } = require("discord.js"); -const yaml = require("js-yaml"); const { Command, Event } = require("./Addon.js"); +const configStore = require("./ConfigStore.js"); +const { getPrimaryGuild } = require("./GuildManager.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8")); +const supportbot = configStore.supportbot; +const cmdconfig = configStore.commands; const c = { reset: "\x1b[0m", @@ -158,12 +159,12 @@ class Client extends Discord.Client { }); } - this.once("clientReady", async () => { - await this.guilds.cache.first()?.commands.set(this.commands); - - console.log( - `\n${c.green}✓${c.reset} ${c.white}Slash Commands Registered${c.reset} ${c.gray}for ${this.guilds.cache.first().name}${c.reset}`, - ); + this.on("clientReady", async () => { + const guild = getPrimaryGuild(this); + if (!guild) return; + await guild.commands.set(this.commands); + const { logSlashCommandsRegistered } = require("./BotStartup.js"); + logSlashCommandsRegistered(this); }); section("Events"); diff --git a/Structures/ConfigStore.js b/Structures/ConfigStore.js new file mode 100644 index 0000000..40a0416 --- /dev/null +++ b/Structures/ConfigStore.js @@ -0,0 +1,89 @@ +// Live config objects — reload mutates in place so existing references stay valid. +const fs = require("fs"); +const path = require("path"); +const yaml = require("js-yaml"); + +const CONFIG_DIR = path.join(__dirname, "../Configs"); + +const FILE_KEYS = [ + "supportbot", + "commands", + "messages", + "ticket-panel", + "supportbot-ai", + "api", +]; + +function readConfig(name) { + return yaml.load(fs.readFileSync(path.join(CONFIG_DIR, `${name}.yml`), "utf8")); +} + +function deepAssign(target, source) { + if (!target || typeof target !== "object" || Array.isArray(target)) { + return source; + } + if (!source || typeof source !== "object" || Array.isArray(source)) { + return source; + } + + for (const key of Object.keys(source)) { + const next = source[key]; + if ( + next && + typeof next === "object" && + !Array.isArray(next) && + target[key] && + typeof target[key] === "object" && + !Array.isArray(target[key]) + ) { + deepAssign(target[key], next); + } else { + target[key] = next; + } + } + + for (const key of Object.keys(target)) { + if (!(key in source)) { + delete target[key]; + } + } + + return target; +} + +const store = {}; +for (const name of FILE_KEYS) { + store[name] = readConfig(name); +} + +function reloadFile(fileKey) { + if (!FILE_KEYS.includes(fileKey)) { + throw new Error(`Unknown config: ${fileKey}`); + } + const fresh = readConfig(fileKey); + deepAssign(store[fileKey], fresh); + return store[fileKey]; +} + +function reloadBotConfigs() { + const reloaded = []; + for (const name of FILE_KEYS) { + if (name === "api") continue; + reloadFile(name); + reloaded.push(name); + } + return reloaded; +} + +module.exports = { + supportbot: store.supportbot, + commands: store.commands, + messages: store.messages, + ticketPanel: store["ticket-panel"], + supportbotAi: store["supportbot-ai"], + api: store.api, + store, + reloadFile, + reloadBotConfigs, + readConfig, +}; diff --git a/Structures/DashboardAuth.js b/Structures/DashboardAuth.js new file mode 100644 index 0000000..089be04 --- /dev/null +++ b/Structures/DashboardAuth.js @@ -0,0 +1,57 @@ +const { fullPermissions, hasPermission, canAccessConfig } = require("./DashboardPermissions.js"); + +function grantServiceAccess(req) { + req.dashboardService = true; + req.dashboardPermissions = fullPermissions(); + req.dashboardRole = "service"; + req.dashboardIsOwner = true; +} + +function forbid(res, message = "Forbidden") { + return res.status(403).json({ success: false, error: message }); +} + +function createPermissionMiddleware(getPermissions) { + return function requirePermission(permission) { + return (req, res, next) => { + if (req.dashboardService) return next(); + const perms = getPermissions(req) || req.dashboardPermissions; + if (hasPermission(perms, permission)) return next(); + return forbid(res); + }; + }; +} + +function createConfigMiddleware(getPermissions) { + return function requireConfigAccess(mode = "view") { + return (req, res, next) => { + if (req.dashboardService) return next(); + const perms = getPermissions(req) || req.dashboardPermissions; + const file = req.params?.file || req.body?.filename; + if (!file) return next(); + if (!canAccessConfig(perms, file, mode)) return forbid(res); + return next(); + }; + }; +} + +function assertConfigFilesEditable(permissions, files, res) { + if (!permissions) return forbid(res); + for (const file of files) { + if (!canAccessConfig(permissions, file, "edit")) { + return forbid(res, `No permission to edit ${file}.yml`); + } + } + return null; +} + +module.exports = { + grantServiceAccess, + forbid, + createPermissionMiddleware, + createConfigMiddleware, + assertConfigFilesEditable, + fullPermissions, + hasPermission, + canAccessConfig, +}; diff --git a/Structures/DashboardPermissions.js b/Structures/DashboardPermissions.js new file mode 100644 index 0000000..af44a07 --- /dev/null +++ b/Structures/DashboardPermissions.js @@ -0,0 +1,134 @@ +const CONFIG_FILES = [ + "supportbot", + "ticket-panel", + "commands", + "messages", + "supportbot-ai", +]; + +const ROLES = ["owner", "admin", "moderator", "editor", "viewer", "custom"]; + +function configMap(view, edit) { + const configs = {}; + for (const file of CONFIG_FILES) { + configs[file] = { view: Boolean(view), edit: Boolean(edit) }; + } + return configs; +} + +function fullPermissions() { + return { + overview: true, + logs: true, + transcripts: true, + settings: { view: true, update: true }, + configs: configMap(true, true), + users: { view: true, manage: true }, + }; +} + +function permissionsFromRole(role, customPermissions) { + switch (role) { + case "owner": + case "admin": + return fullPermissions(); + case "moderator": + return { + overview: true, + logs: true, + transcripts: true, + settings: { view: true, update: false }, + configs: configMap(true, false), + users: { view: false, manage: false }, + }; + case "editor": + return { + overview: true, + logs: true, + transcripts: false, + settings: { view: true, update: false }, + configs: configMap(true, true), + users: { view: false, manage: false }, + }; + case "viewer": + return { + overview: true, + logs: true, + transcripts: true, + settings: { view: true, update: false }, + configs: configMap(true, false), + users: { view: false, manage: false }, + }; + case "custom": + return normalizePermissions(customPermissions); + default: + return permissionsFromRole("viewer"); + } +} + +function normalizePermissions(input) { + const base = permissionsFromRole("viewer"); + if (!input || typeof input !== "object") return base; + + return { + overview: input.overview ?? base.overview, + logs: input.logs ?? base.logs, + transcripts: input.transcripts ?? base.transcripts, + settings: { + view: input.settings?.view ?? base.settings.view, + update: input.settings?.update ?? base.settings.update, + }, + configs: CONFIG_FILES.reduce((acc, file) => { + acc[file] = { + view: input.configs?.[file]?.view ?? base.configs[file].view, + edit: input.configs?.[file]?.edit ?? base.configs[file].edit, + }; + return acc; + }, {}), + users: { + view: input.users?.view ?? base.users.view, + manage: input.users?.manage ?? base.users.manage, + }, + }; +} + +function hasPermission(permissions, check) { + if (!permissions) return false; + + if (check === "overview") return Boolean(permissions.overview); + if (check === "logs") return Boolean(permissions.logs); + if (check === "transcripts") return Boolean(permissions.transcripts); + if (check === "settings.view") return Boolean(permissions.settings?.view); + if (check === "settings.update") return Boolean(permissions.settings?.update); + if (check === "users.view") return Boolean(permissions.users?.view); + if (check === "users.manage") return Boolean(permissions.users?.manage); + + const configView = check.match(/^configs\.([a-z0-9-]+)\.view$/); + if (configView) { + const file = configView[1]; + return Boolean(permissions.configs?.[file]?.view); + } + + const configEdit = check.match(/^configs\.([a-z0-9-]+)\.edit$/); + if (configEdit) { + const file = configEdit[1]; + return Boolean(permissions.configs?.[file]?.edit); + } + + return false; +} + +function canAccessConfig(permissions, file, mode = "view") { + if (!CONFIG_FILES.includes(file)) return false; + return hasPermission(permissions, `configs.${file}.${mode}`); +} + +module.exports = { + CONFIG_FILES, + ROLES, + fullPermissions, + permissionsFromRole, + normalizePermissions, + hasPermission, + canAccessConfig, +}; diff --git a/Structures/DashboardSession.js b/Structures/DashboardSession.js new file mode 100644 index 0000000..0363701 --- /dev/null +++ b/Structures/DashboardSession.js @@ -0,0 +1,71 @@ +const crypto = require("crypto"); + +const SESSION_COOKIE = "sb_dashboard"; +const SESSION_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; + +function signSession(payload, secret) { + const body = Buffer.from(JSON.stringify(payload)).toString("base64url"); + const sig = crypto + .createHmac("sha256", secret) + .update(body) + .digest("base64url"); + return `${body}.${sig}`; +} + +function verifySession(token, secret) { + if (!token || typeof token !== "string") return null; + const dot = token.lastIndexOf("."); + if (dot <= 0) return null; + + const body = token.slice(0, dot); + const sig = token.slice(dot + 1); + const expected = crypto + .createHmac("sha256", secret) + .update(body) + .digest("base64url"); + + if (sig.length !== expected.length) return null; + if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) { + return null; + } + + try { + const payload = JSON.parse( + Buffer.from(body, "base64url").toString("utf8"), + ); + if (!payload?.userId || !payload?.exp) return null; + if (Date.now() > payload.exp) return null; + return payload; + } catch { + return null; + } +} + +function createSessionPayload(user) { + return { + userId: user.id, + username: user.username, + globalName: user.global_name || null, + avatar: user.avatar || null, + exp: Date.now() + SESSION_MAX_AGE_MS, + }; +} + +function sessionCookieOptions(maxAgeMs = SESSION_MAX_AGE_MS) { + return { + httpOnly: true, + secure: process.env.NODE_ENV === "production", + sameSite: "lax", + maxAge: maxAgeMs, + path: "/", + }; +} + +module.exports = { + SESSION_COOKIE, + SESSION_MAX_AGE_MS, + signSession, + verifySession, + createSessionPayload, + sessionCookieOptions, +}; diff --git a/Structures/DashboardUserStore.js b/Structures/DashboardUserStore.js new file mode 100644 index 0000000..58613d6 --- /dev/null +++ b/Structures/DashboardUserStore.js @@ -0,0 +1,291 @@ +const fs = require("fs"); +const path = require("path"); +const { + CONFIG_FILES, + ROLES, + fullPermissions, + permissionsFromRole, + normalizePermissions, + hasPermission, + canAccessConfig, +} = require("./DashboardPermissions.js"); +const { discordAvatarUrl } = require("./DiscordOAuth.js"); + +const STORE_PATH = path.join(__dirname, "../Data/dashboard-users.json"); + +function ensureDataDir() { + const dir = path.dirname(STORE_PATH); + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); +} + +function emptyStore() { + return { version: 1, users: {} }; +} + +function readStore() { + ensureDataDir(); + if (!fs.existsSync(STORE_PATH)) return emptyStore(); + try { + const raw = JSON.parse(fs.readFileSync(STORE_PATH, "utf8")); + if (!raw.users || typeof raw.users !== "object") return emptyStore(); + return raw; + } catch { + return emptyStore(); + } +} + +function writeStore(store) { + ensureDataDir(); + fs.writeFileSync(STORE_PATH, JSON.stringify(store, null, 2), "utf8"); +} + +function getOwnerIds(oauth) { + const owners = new Set(); + for (const id of oauth?.OwnerUserIds || []) owners.add(String(id)); + for (const id of oauth?.AllowedUserIds || []) owners.add(String(id)); + return owners; +} + +function isYamlOwner(userId, oauth) { + return getOwnerIds(oauth).has(String(userId)); +} + +function bootstrapFromOAuth(oauth) { + const store = readStore(); + const owners = getOwnerIds(oauth); + let changed = false; + + for (const id of owners) { + if (!store.users[id]) { + store.users[id] = { + id, + username: null, + globalName: null, + avatar: null, + role: "owner", + permissions: null, + enabled: true, + createdAt: Date.now(), + updatedAt: Date.now(), + createdBy: "system", + }; + changed = true; + } + } + + if (changed) writeStore(store); + return store; +} + +function syncDiscordProfile(userId, profile) { + const store = readStore(); + const entry = store.users[userId]; + if (!entry) return; + + entry.username = profile.username ?? entry.username; + entry.globalName = profile.globalName ?? entry.globalName; + entry.avatar = profile.avatar ?? entry.avatar; + entry.updatedAt = Date.now(); + writeStore(store); +} + +function resolvePermissions(entry, oauth, userId) { + if (isYamlOwner(userId, oauth)) { + return { permissions: fullPermissions(), role: "owner", isOwner: true }; + } + if (!entry?.enabled) return null; + + const role = entry.role || "viewer"; + const permissions = + role === "custom" + ? permissionsFromRole("custom", entry.permissions) + : permissionsFromRole(role); + + return { permissions, role, isOwner: false }; +} + +function getAccess(userId, oauth) { + bootstrapFromOAuth(oauth); + const store = readStore(); + const id = String(userId); + + if (isYamlOwner(id, oauth)) { + const entry = store.users[id]; + return { + entry: entry || { id, role: "owner" }, + permissions: fullPermissions(), + role: "owner", + isOwner: true, + yamlOwner: true, + }; + } + + const entry = store.users[id]; + const resolved = resolvePermissions(entry, oauth, id); + if (!resolved) return null; + + return { + entry, + permissions: resolved.permissions, + role: resolved.role, + isOwner: false, + yamlOwner: false, + }; +} + +function canLogin(userId, oauth) { + return Boolean(getAccess(userId, oauth)); +} + +function formatPublicUser(entry, access, discordProfile) { + const id = String(entry?.id || discordProfile?.id); + const avatarHash = entry?.avatar ?? discordProfile?.avatar ?? null; + + return { + id, + username: entry?.username || discordProfile?.username || "Unknown", + globalName: entry?.globalName ?? discordProfile?.global_name ?? null, + avatar: avatarHash + ? discordAvatarUrl({ id, avatar: avatarHash }) + : discordProfile + ? discordAvatarUrl(discordProfile) + : discordAvatarUrl({ id, avatar: null }), + role: access.role, + isOwner: access.isOwner, + permissions: access.permissions, + }; +} + +function listUsers(oauth) { + bootstrapFromOAuth(oauth); + const store = readStore(); + const yamlOwners = getOwnerIds(oauth); + + return Object.values(store.users).map((entry) => { + const access = resolvePermissions(entry, oauth, entry.id) || { + permissions: permissionsFromRole("viewer"), + role: entry.role, + isOwner: false, + }; + + return { + id: entry.id, + username: entry.username, + globalName: entry.globalName, + avatar: entry.avatar + ? discordAvatarUrl({ id: entry.id, avatar: entry.avatar }) + : discordAvatarUrl({ id: entry.id, avatar: null }), + role: yamlOwners.has(String(entry.id)) ? "owner" : entry.role, + permissions: + entry.role === "custom" + ? normalizePermissions(entry.permissions) + : access.permissions, + enabled: entry.enabled !== false, + isOwner: yamlOwners.has(String(entry.id)), + yamlOwner: yamlOwners.has(String(entry.id)), + createdAt: entry.createdAt, + updatedAt: entry.updatedAt, + }; + }); +} + +function addUser(payload, actorId, oauth) { + const id = String(payload.id || "").trim(); + if (!/^\d{17,20}$/.test(id)) { + throw new Error("Invalid Discord user ID"); + } + + const role = payload.role || "viewer"; + if (!ROLES.includes(role)) throw new Error("Invalid role"); + if (role === "owner" && !isYamlOwner(actorId, oauth)) { + throw new Error("Only api.yml owners can assign the owner role"); + } + + const store = readStore(); + if (store.users[id]) throw new Error("User already exists"); + + store.users[id] = { + id, + username: payload.username || null, + globalName: payload.globalName || null, + avatar: null, + role, + permissions: + role === "custom" ? normalizePermissions(payload.permissions) : null, + enabled: payload.enabled !== false, + createdAt: Date.now(), + updatedAt: Date.now(), + createdBy: String(actorId), + }; + + writeStore(store); + return listUsers(oauth).find((u) => u.id === id); +} + +function updateUser(id, payload, actorId, oauth) { + const store = readStore(); + const entry = store.users[String(id)]; + if (!entry) throw new Error("User not found"); + + if (isYamlOwner(id, oauth) && payload.enabled === false) { + throw new Error("Cannot disable an owner defined in api.yml"); + } + + if (payload.role) { + if (!ROLES.includes(payload.role)) throw new Error("Invalid role"); + if (payload.role === "owner" && !isYamlOwner(actorId, oauth)) { + throw new Error("Only api.yml owners can assign the owner role"); + } + if (isYamlOwner(id, oauth) && payload.role !== "owner") { + throw new Error("Cannot change role of an api.yml owner"); + } + entry.role = payload.role; + } + + if (payload.enabled !== undefined) entry.enabled = Boolean(payload.enabled); + if (payload.username !== undefined) entry.username = payload.username; + if (payload.globalName !== undefined) entry.globalName = payload.globalName; + + if (payload.permissions !== undefined) { + entry.permissions = normalizePermissions(payload.permissions); + if (entry.role !== "custom") entry.role = "custom"; + } + + if (entry.role === "custom" && payload.permissions === undefined && payload.role !== "custom") { + entry.permissions = null; + } + + entry.updatedAt = Date.now(); + writeStore(store); + return listUsers(oauth).find((u) => u.id === String(id)); +} + +function removeUser(id, oauth) { + if (isYamlOwner(id, oauth)) { + throw new Error("Remove this user from OwnerUserIds in api.yml instead"); + } + + const store = readStore(); + if (!store.users[String(id)]) throw new Error("User not found"); + delete store.users[String(id)]; + writeStore(store); +} + +module.exports = { + CONFIG_FILES, + STORE_PATH, + getOwnerIds, + isYamlOwner, + bootstrapFromOAuth, + syncDiscordProfile, + getAccess, + canLogin, + formatPublicUser, + listUsers, + addUser, + updateUser, + removeUser, + hasPermission, + canAccessConfig, + ROLES, +}; diff --git a/Structures/DiscordOAuth.js b/Structures/DiscordOAuth.js new file mode 100644 index 0000000..70e5bcb --- /dev/null +++ b/Structures/DiscordOAuth.js @@ -0,0 +1,106 @@ +const crypto = require("crypto"); +const axios = require("axios"); + +const DISCORD_API = "https://discord.com/api"; +const OAUTH_STATE_COOKIE = "sb_oauth_state"; +const OAUTH_STATE_MAX_AGE_MS = 10 * 60 * 1000; + +function discordAvatarUrl(user) { + if (user.avatar) { + const ext = user.avatar.startsWith("a_") ? "gif" : "png"; + return `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.${ext}?size=128`; + } + const index = Number((BigInt(user.id) >> 22n) % 6n); + return `https://cdn.discordapp.com/embed/avatars/${index}.png`; +} + +function buildAuthorizeUrl(oauth, state) { + const params = new URLSearchParams({ + client_id: oauth.ClientId, + redirect_uri: oauth.RedirectUri, + response_type: "code", + scope: "identify", + state, + prompt: "none", + }); + return `${DISCORD_API}/oauth2/authorize?${params.toString()}`; +} + +async function exchangeCode(oauth, code) { + const body = new URLSearchParams({ + client_id: oauth.ClientId, + client_secret: oauth.ClientSecret, + grant_type: "authorization_code", + code, + redirect_uri: oauth.RedirectUri, + }); + + const { data } = await axios.post(`${DISCORD_API}/oauth2/token`, body, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + timeout: 15000, + }); + + return data.access_token; +} + +async function fetchDiscordUser(accessToken) { + const { data } = await axios.get(`${DISCORD_API}/users/@me`, { + headers: { Authorization: `Bearer ${accessToken}` }, + timeout: 15000, + }); + return data; +} + +function createOAuthState() { + return crypto.randomBytes(24).toString("hex"); +} + +function oauthStateCookieOptions() { + return { + httpOnly: true, + secure: process.env.NODE_ENV === "production", + sameSite: "lax", + maxAge: OAUTH_STATE_MAX_AGE_MS, + path: "/", + }; +} + +function isOAuthConfigured(oauth) { + return Boolean( + oauth?.Enabled && + oauth.ClientId && + oauth.ClientSecret && + oauth.RedirectUri, + ); +} + +function isUserAllowed(userId, oauth) { + const allowed = oauth?.AllowedUserIds; + if (!Array.isArray(allowed) || allowed.length === 0) { + return false; + } + return allowed.map(String).includes(String(userId)); +} + +function formatPublicUser(user) { + return { + id: user.id, + username: user.username, + globalName: user.global_name || null, + avatar: discordAvatarUrl(user), + }; +} + +module.exports = { + OAUTH_STATE_COOKIE, + OAUTH_STATE_MAX_AGE_MS, + buildAuthorizeUrl, + exchangeCode, + fetchDiscordUser, + createOAuthState, + oauthStateCookieOptions, + isOAuthConfigured, + isUserAllowed, + formatPublicUser, + discordAvatarUrl, +}; diff --git a/Structures/GuildManager.js b/Structures/GuildManager.js new file mode 100644 index 0000000..7e9726c --- /dev/null +++ b/Structures/GuildManager.js @@ -0,0 +1,246 @@ +const { ChannelType } = require("discord.js"); +const configStore = require("./ConfigStore.js"); +const { withTimeout } = require("./asyncTimeout.js"); + +const RESOURCES_CACHE_MS = 90 * 1000; +let resourcesCache = { guildId: null, data: null, at: 0 }; +let resourcesInflight = null; + +function getConfiguredGuildId() { + const id = configStore.supportbot?.General?.GuildId; + if (!id || id === "GUILD_ID" || String(id).trim() === "") return null; + return String(id).trim(); +} + +function setConfiguredGuildId(guildId) { + if (!configStore.supportbot.General) { + configStore.supportbot.General = {}; + } + configStore.supportbot.General.GuildId = guildId ? String(guildId) : ""; +} + +function getPrimaryGuild(client) { + if (!client) return null; + + const configuredId = getConfiguredGuildId(); + if (configuredId) { + const match = client.guilds.cache.get(configuredId); + if (match) return match; + } + + return client.guilds.cache.first() || null; +} + +function evaluateGuildHealth(client) { + const configuredId = getConfiguredGuildId(); + const guilds = [...client.guilds.cache.values()]; + + if (!configuredId) { + return { + status: "missing_config", + configuredGuildId: null, + message: + "No guild ID is set. Add your Discord server ID under Bot config → General.", + configuredGuild: null, + extraGuilds: guilds.map(formatGuildSummary), + }; + } + + const configuredGuild = client.guilds.cache.get(configuredId) || null; + const extraGuilds = guilds + .filter((g) => g.id !== configuredId) + .map(formatGuildSummary); + + if (!configuredGuild) { + return { + status: "not_in_guild", + configuredGuildId: configuredId, + message: `The bot is not in the configured server (${configuredId}). Invite it or update the guild ID.`, + configuredGuild: null, + extraGuilds: guilds.map(formatGuildSummary), + }; + } + + if (extraGuilds.length > 0) { + return { + status: "extra_guilds", + configuredGuildId: configuredId, + message: `The bot is in ${extraGuilds.length} extra server(s). Leave them so only your configured server remains.`, + configuredGuild: formatGuildSummary(configuredGuild), + extraGuilds, + }; + } + + return { + status: "ok", + configuredGuildId: configuredId, + message: null, + configuredGuild: formatGuildSummary(configuredGuild), + extraGuilds: [], + }; +} + +function formatGuildSummary(guild) { + return { + id: guild.id, + name: guild.name, + memberCount: guild.memberCount ?? null, + icon: guild.iconURL?.({ size: 128 }) ?? null, + }; +} + +function syncGuildHealth(client) { + if (!client?.user) { + client.guildHealth = { + status: "offline", + configuredGuildId: getConfiguredGuildId(), + message: "Bot is not connected to Discord.", + configuredGuild: null, + extraGuilds: [], + }; + return client.guildHealth; + } + + client.guildHealth = evaluateGuildHealth(client); + return client.guildHealth; +} + +function logGuildWarning(client, message) { + const name = client?.user?.username || "Bot"; + console.warn(`\x1b[33m[Guild]\x1b[0m ${name}: ${message}`); +} + +async function leaveGuild(client, guildId) { + const guild = client.guilds.cache.get(String(guildId)); + if (!guild) { + throw new Error("Bot is not in that server."); + } + + const configuredId = getConfiguredGuildId(); + if (configuredId && guild.id === configuredId) { + throw new Error("Cannot leave the configured server. Change the guild ID first."); + } + + await guild.leave(); + syncGuildHealth(client); + return syncGuildHealth(client); +} + +function buildResourcesFromGuild(guild) { + const roles = [...guild.roles.cache.values()] + .filter((r) => r.id !== guild.id) + .sort((a, b) => b.position - a.position) + .map((r) => ({ + id: r.id, + name: r.name, + color: r.hexColor || null, + })); + + const channels = [...guild.channels.cache.values()] + .filter( + (c) => + c.type === ChannelType.GuildText || + c.type === ChannelType.GuildVoice || + c.type === ChannelType.GuildAnnouncement || + c.type === ChannelType.GuildStageVoice || + c.type === ChannelType.GuildForum, + ) + .sort((a, b) => a.name.localeCompare(b.name)) + .map((c) => ({ + id: c.id, + name: c.name, + type: c.type, + })); + + const categories = [...guild.channels.cache.values()] + .filter((c) => c.type === ChannelType.GuildCategory) + .sort((a, b) => a.name.localeCompare(b.name)) + .map((c) => ({ + id: c.id, + name: c.name, + })); + + return { + guildId: guild.id, + guildName: guild.name, + roles, + channels, + categories, + }; +} + +async function fetchGuildResourcesFromDiscord(client, guildId) { + const id = guildId || getConfiguredGuildId(); + if (!id) return null; + + const guild = client.guilds.cache.get(id); + if (!guild) return null; + + try { + await withTimeout( + Promise.all([guild.channels.fetch(), guild.roles.fetch()]), + 12_000, + "Discord channel/role fetch timed out", + ); + } catch (err) { + console.warn("[Guild] Failed to fetch channels/roles:", err.message); + if (guild.roles.cache.size === 0 && guild.channels.cache.size === 0) { + return null; + } + } + + return buildResourcesFromGuild(guild); +} + +async function fetchGuildResources(client, guildId) { + const id = guildId || getConfiguredGuildId(); + if (!id || !client?.user) return null; + + const now = Date.now(); + if ( + resourcesCache.data && + resourcesCache.guildId === id && + now - resourcesCache.at < RESOURCES_CACHE_MS + ) { + return resourcesCache.data; + } + + if (resourcesInflight) { + try { + return await resourcesInflight; + } catch { + /* fall through to retry */ + } + } + + resourcesInflight = (async () => { + const data = await fetchGuildResourcesFromDiscord(client, id); + if (data) { + resourcesCache = { guildId: id, data, at: Date.now() }; + } + return data; + })(); + + try { + return await resourcesInflight; + } finally { + resourcesInflight = null; + } +} + +function clearGuildResourcesCache() { + resourcesCache = { guildId: null, data: null, at: 0 }; + resourcesInflight = null; +} + +module.exports = { + getConfiguredGuildId, + setConfiguredGuildId, + getPrimaryGuild, + evaluateGuildHealth, + syncGuildHealth, + logGuildWarning, + leaveGuild, + fetchGuildResources, + clearGuildResourcesCache, +}; diff --git a/Structures/LogReader.js b/Structures/LogReader.js new file mode 100644 index 0000000..b0f4dbb --- /dev/null +++ b/Structures/LogReader.js @@ -0,0 +1,181 @@ +const fs = require("fs"); +const path = require("path"); + +const LOG_ROOT = path.resolve(__dirname, "../Logs"); +const LOG_TYPES = ["Output", "Warn", "Error"]; + +function todayDate() { + return new Date().toISOString().split("T")[0]; +} + +function getLogPath(type, date = todayDate()) { + return path.join(LOG_ROOT, type, `${type}-${date}.log`); +} + +/** Prefer today's file; fall back to the newest log in the folder. */ +function resolveLogPath(type) { + const todayPath = getLogPath(type); + if (fs.existsSync(todayPath)) return todayPath; + + const dir = path.join(LOG_ROOT, type); + if (!fs.existsSync(dir)) return todayPath; + + const files = fs + .readdirSync(dir) + .filter((f) => f.endsWith(".log")) + .sort() + .reverse(); + + if (!files.length) return todayPath; + return path.join(dir, files[0]); +} + +function stripAnsi(text) { + return String(text).replace(/\x1b\[[0-9;]*m/g, ""); +} + +function parseLogLine(line, type) { + const trimmed = line.trimEnd(); + if (!trimmed) return null; + + const match = trimmed.match(/^\[([^\]]+)\]\s?(.*)$/); + if (match) { + return { + type, + timestamp: match[1], + message: stripAnsi(match[2]), + }; + } + + return { + type, + timestamp: null, + message: stripAnsi(trimmed), + }; +} + +function readFromByte(filePath, fromByte) { + if (!fs.existsSync(filePath)) { + return { lines: [], position: 0 }; + } + + const stat = fs.statSync(filePath); + if (stat.size === 0) { + return { lines: [], position: 0 }; + } + + const start = Math.max(0, Math.min(fromByte, stat.size)); + if (start >= stat.size) { + return { lines: [], position: stat.size }; + } + + const fd = fs.openSync(filePath, "r"); + const buffer = Buffer.alloc(stat.size - start); + fs.readSync(fd, buffer, 0, buffer.length, start); + fs.closeSync(fd); + + const text = buffer.toString("utf8"); + const lines = text.split(/\r?\n/).filter((l) => l.length > 0); + + return { lines, position: stat.size }; +} + +function readLastLines(filePath, maxLines) { + if (!fs.existsSync(filePath)) { + return { lines: [], position: 0 }; + } + + const stat = fs.statSync(filePath); + if (stat.size === 0) { + return { lines: [], position: 0 }; + } + + const chunkSize = Math.min(stat.size, 512 * 1024); + const start = Math.max(0, stat.size - chunkSize); + const fd = fs.openSync(filePath, "r"); + const buffer = Buffer.alloc(chunkSize); + fs.readSync(fd, buffer, 0, chunkSize, start); + fs.closeSync(fd); + + const lines = buffer + .toString("utf8") + .split(/\r?\n/) + .filter((l) => l.length > 0); + const slice = lines.slice(-maxLines); + + return { lines: slice, position: stat.size }; +} + +/** + * @param {string[]} types + * @param {Record} cursor byte offsets per type + * @param {number} initialLines lines to load when cursor is empty + */ +function fetchLogs(types, cursor = {}, initialLines = 300) { + const validTypes = types.filter((t) => LOG_TYPES.includes(t)); + const entries = []; + const nextCursor = { ...cursor }; + + for (const type of validTypes) { + const filePath = resolveLogPath(type); + const prevPos = cursor[type] ?? 0; + let lines = []; + let position = 0; + + if (!fs.existsSync(filePath)) { + nextCursor[type] = 0; + continue; + } + + if (prevPos === 0 && initialLines > 0) { + const tail = readLastLines(filePath, initialLines); + lines = tail.lines; + position = tail.position; + } else if (prevPos > 0) { + const chunk = readFromByte(filePath, prevPos); + lines = chunk.lines; + position = chunk.position; + } else { + // No tail requested and no cursor — skip content, anchor at EOF + position = fs.statSync(filePath).size; + } + + nextCursor[type] = position; + + for (const line of lines) { + const entry = parseLogLine(line, type); + if (entry) entries.push(entry); + } + } + + entries.sort((a, b) => { + const ta = a.timestamp ? Date.parse(a.timestamp) : 0; + const tb = b.timestamp ? Date.parse(b.timestamp) : 0; + return ta - tb; + }); + + return { entries, cursor: nextCursor }; +} + +function getLogMeta() { + const date = todayDate(); + return LOG_TYPES.map((type) => { + const filePath = resolveLogPath(type); + const exists = fs.existsSync(filePath) && fs.statSync(filePath).size > 0; + return { + type, + date, + file: exists ? path.basename(filePath) : null, + size: exists ? fs.statSync(filePath).size : 0, + }; + }); +} + +module.exports = { + LOG_ROOT, + LOG_TYPES, + fetchLogs, + getLogMeta, + getLogPath, + resolveLogPath, +}; diff --git a/Structures/ModuleStatus.js b/Structures/ModuleStatus.js new file mode 100644 index 0000000..aa79ef5 --- /dev/null +++ b/Structures/ModuleStatus.js @@ -0,0 +1,269 @@ +const fs = require("fs"); +const path = require("path"); + +const PLACEHOLDER_PATTERNS = [ + /ROLE_ID/i, + /CHANNEL_ID/i, + /CATEGORY_ID/i, + /TAG_ID/i, + /FORUM_CHANNEL_ID/i, + /BOT_TOKEN/i, + /MODEL_API_KEY/i, + /PASTEBIN_API_KEY/i, + /YOUR_/i, + /PUT_RANDOM_STRING/i, + /example\.com/i, +]; + +function isEmpty(value) { + if (value == null) return true; + if (typeof value === "boolean") return false; + if (typeof value === "number") return false; + return String(value).trim() === ""; +} + +function isPlaceholder(value) { + if (isEmpty(value)) return true; + const s = String(value).trim(); + return PLACEHOLDER_PATTERNS.some((p) => p.test(s)); +} + +function isDiscordId(value) { + return /^\d{17,20}$/.test(String(value).trim()); +} + +function isConfiguredId(value) { + return isDiscordId(value) && !isPlaceholder(value); +} + +function isValidToken(value) { + if (isPlaceholder(value)) return false; + const s = String(value).trim(); + return s.length >= 50 && s.includes("."); +} + +function scoreChecks(checks) { + const total = checks.length; + const passed = checks.filter((c) => c.ok).length; + + if (total === 0) { + return { status: "done", subtitle: "Ready", passed: 0, total: 0 }; + } + + if (passed === 0) { + const hint = checks.find((c) => !c.ok)?.hint ?? "Not configured yet"; + return { status: "todo", subtitle: hint, passed, total }; + } + + if (passed === total) { + return { status: "done", subtitle: "Configured and ready", passed, total }; + } + + const next = checks.find((c) => !c.ok); + return { + status: "progress", + subtitle: next?.hint ?? `${passed} of ${total} steps complete`, + passed, + total, + }; +} + +function evaluateTickets(supportbot, ticketPanel) { + const ticket = supportbot?.Ticket ?? {}; + const ticketType = String(ticket.TicketType || "channels").toLowerCase(); + + return scoreChecks([ + { + ok: ticketPanel?.Panel === true, + hint: "Enable the ticket panel", + }, + { + ok: isConfiguredId(ticket.TicketHome), + hint: "Set TicketHome channel ID", + }, + { + ok: + ticketType !== "channels" || + isConfiguredId(ticket.TicketChannelsCategory), + hint: "Set ticket category ID", + }, + { + ok: !isPlaceholder(ticketPanel?.Button?.Text), + hint: "Configure panel button text", + }, + ]); +} + +function evaluateSupportbot(supportbot) { + const roles = supportbot?.Roles?.StaffMember ?? {}; + const welcome = supportbot?.Welcome ?? {}; + + return scoreChecks([ + { ok: isValidToken(supportbot?.General?.Token), hint: "Add your bot token" }, + { + ok: + isConfiguredId(roles.Staff) || + isConfiguredId(roles.Admin) || + isConfiguredId(roles.Moderator), + hint: "Set staff role IDs", + }, + { + ok: !welcome.Enabled || isConfiguredId(welcome.Channel), + hint: "Set welcome channel ID", + }, + { + ok: !isPlaceholder(supportbot?.Activity?.Status), + hint: "Set bot activity status", + }, + ]); +} + +function evaluateTranscripts(supportbot, transcriptCount) { + const ticketReady = isConfiguredId(supportbot?.Ticket?.TicketHome); + + if (!ticketReady) { + return { + status: "todo", + subtitle: "Set up tickets first", + passed: 0, + total: 2, + }; + } + + if (transcriptCount > 0) { + return { + status: "done", + subtitle: `${transcriptCount} transcript${transcriptCount === 1 ? "" : "s"} saved`, + passed: 2, + total: 2, + }; + } + + return { + status: "progress", + subtitle: "Close tickets to generate transcripts", + passed: 1, + total: 2, + }; +} + +function evaluateSuggestions(supportbot) { + const sug = supportbot?.Suggestions ?? {}; + const mode = String(sug.Mode || "Channel").toLowerCase(); + + const channelOk = + mode === "forum" + ? isConfiguredId(sug.ForumChannel) + : isConfiguredId(sug.Channel); + + return scoreChecks([ + { + ok: channelOk, + hint: + mode === "forum" + ? "Set suggestions forum channel" + : "Set suggestions channel ID", + }, + { + ok: !isPlaceholder(sug.UpvoteEmoji) && !isPlaceholder(sug.DownvoteEmoji), + hint: "Configure voting emojis", + }, + ]); +} + +function evaluateAi(supportbotAi) { + if (supportbotAi?.Enabled !== true) { + return { + status: "progress", + subtitle: "AI is disabled in config", + passed: 0, + total: 3, + }; + } + + return scoreChecks([ + { + ok: !isPlaceholder(supportbotAi?.General?.Model_API_Key), + hint: "Add your model API key", + }, + { + ok: isConfiguredId(supportbotAi?.Channels?.AIChannel), + hint: "Set AI channel ID", + }, + { + ok: !isPlaceholder(supportbotAi?.General?.Model), + hint: "Choose an AI model", + }, + ]); +} + +function evaluateCommands(commands) { + const entries = Object.entries(commands || {}).filter( + ([, v]) => v && typeof v === "object" && "Enabled" in v, + ); + + if (!entries.length) { + return { status: "todo", subtitle: "No commands configured", passed: 0, total: 0 }; + } + + const enabled = entries.filter(([, v]) => v.Enabled !== false).length; + const total = entries.length; + const ratio = enabled / total; + + if (ratio >= 0.85) { + return { + status: "done", + subtitle: `${enabled} of ${total} commands enabled`, + passed: enabled, + total, + }; + } + + if (enabled === 0) { + return { + status: "todo", + subtitle: "Enable slash commands", + passed: 0, + total, + }; + } + + return { + status: "progress", + subtitle: `${enabled} of ${total} commands enabled`, + passed: enabled, + total, + }; +} + +function countTranscripts() { + const dir = path.resolve(__dirname, "../Data/Transcripts"); + if (!fs.existsSync(dir)) return 0; + return fs + .readdirSync(dir) + .filter((f) => f.endsWith("-transcript.html")).length; +} + +function evaluateAllModules(configStore, options = {}) { + const supportbot = configStore.supportbot; + const ticketPanel = configStore.ticketPanel; + const supportbotAi = configStore.supportbotAi; + const commands = configStore.commands; + const transcriptCount = + options.transcriptCount ?? countTranscripts(); + + return { + tickets: evaluateTickets(supportbot, ticketPanel), + supportbot: evaluateSupportbot(supportbot), + transcripts: evaluateTranscripts(supportbot, transcriptCount), + suggestions: evaluateSuggestions(supportbot), + ai: evaluateAi(supportbotAi), + commands: evaluateCommands(commands), + }; +} + +module.exports = { + evaluateAllModules, + isPlaceholder, + isConfiguredId, +}; diff --git a/Structures/NotificationService.js b/Structures/NotificationService.js new file mode 100644 index 0000000..09e85e2 --- /dev/null +++ b/Structures/NotificationService.js @@ -0,0 +1,63 @@ +const notificationStore = require("./NotificationStore.js"); +const { fetchUpdateInfo } = require("./UpdateChecker.js"); + +function notifyBotRestart(success, errorMessage) { + if (success) { + return notificationStore.add({ + type: "bot", + title: "Bot restarted", + message: + "Discord bot reconnected with your latest config. API and dashboard stayed online.", + }); + } + + return notificationStore.add({ + type: "error", + title: "Bot failed to restart", + message: errorMessage || "Check the logs for details.", + href: "/logs", + }); +} + +function notifyUpdateAvailable(info) { + return notificationStore.add({ + id: "update-available", + type: "update", + title: "Update available", + message: `Version ${info.latest} is ready (you are on ${info.current}).`, + href: "/settings", + }); +} + +function notifyUpdateInstalled(message) { + return notificationStore.add({ + type: "update", + title: "Update installed", + message: + message || + "Files were updated. Restart your server (npm start) to finish applying changes.", + href: "/settings", + }); +} + +function clearUpdateAvailable() { + notificationStore.dismiss("update-available"); +} + +async function runUpdateCheck() { + const info = await fetchUpdateInfo(); + if (info.updateAvailable) { + notifyUpdateAvailable(info); + } else { + clearUpdateAvailable(); + } + return info; +} + +module.exports = { + notifyBotRestart, + notifyUpdateAvailable, + notifyUpdateInstalled, + clearUpdateAvailable, + runUpdateCheck, +}; diff --git a/Structures/NotificationStore.js b/Structures/NotificationStore.js new file mode 100644 index 0000000..b5876c2 --- /dev/null +++ b/Structures/NotificationStore.js @@ -0,0 +1,86 @@ +const MAX_NOTIFICATIONS = 50; + +/** @type {Map} */ +const byId = new Map(); +/** @type {string[]} */ +let order = []; + +/** + * @param {object} input + * @param {string} [input.id] Stable id replaces existing (e.g. update-available) + */ +function add(input) { + const id = + input.id || + `n-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; + + const item = { + id, + type: input.type || "info", + title: input.title || "Notification", + message: input.message || "", + href: input.href || null, + createdAt: input.createdAt || Date.now(), + read: false, + }; + + if (byId.has(id)) { + order = order.filter((x) => x !== id); + } + + byId.set(id, item); + order.unshift(id); + + while (order.length > MAX_NOTIFICATIONS) { + const removed = order.pop(); + if (removed) byId.delete(removed); + } + + return item; +} + +function list() { + return order.map((id) => byId.get(id)).filter(Boolean); +} + +function unreadCount() { + let n = 0; + for (const item of byId.values()) { + if (!item.read) n++; + } + return n; +} + +function markRead(ids) { + if (ids === "all") { + for (const item of byId.values()) { + item.read = true; + } + return; + } + for (const id of ids) { + const item = byId.get(id); + if (item) item.read = true; + } +} + +function dismiss(id) { + if (!byId.has(id)) return false; + byId.delete(id); + order = order.filter((x) => x !== id); + return true; +} + +function clear() { + byId.clear(); + order = []; +} + +module.exports = { + add, + list, + unreadCount, + markRead, + dismiss, + clear, +}; diff --git a/Structures/TicketManager.js b/Structures/TicketManager.js index 85455f4..37be85a 100644 --- a/Structures/TicketManager.js +++ b/Structures/TicketManager.js @@ -4,8 +4,8 @@ const Discord = require("discord.js"); const yaml = require("js-yaml"); const db = require("./Database.js"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8")); +const supportbot = require("./ConfigStore").supportbot; +const msgconfig = require("./ConfigStore").messages; function escapeHtml(str = "") { return String(str) diff --git a/Structures/UpdateChecker.js b/Structures/UpdateChecker.js new file mode 100644 index 0000000..34a73ab --- /dev/null +++ b/Structures/UpdateChecker.js @@ -0,0 +1,55 @@ +const fs = require("fs"); +const path = require("path"); + +const UPDATE_REPO = "C-h-a-r/SupportBot-Dashboard"; +const UPDATE_BRANCH = "release"; + +function compareVersions(a, b) { + const pa = String(a) + .replace(/^v/i, "") + .split(".") + .map((n) => parseInt(n, 10) || 0); + const pb = String(b) + .replace(/^v/i, "") + .split(".") + .map((n) => parseInt(n, 10) || 0); + for (let i = 0; i < Math.max(pa.length, pb.length); i++) { + if ((pa[i] || 0) > (pb[i] || 0)) return 1; + if ((pa[i] || 0) < (pb[i] || 0)) return -1; + } + return 0; +} + +async function fetchUpdateInfo() { + const axios = require("axios"); + const pkgPath = path.join(__dirname, "../package.json"); + const currentPkg = JSON.parse(fs.readFileSync(pkgPath, "utf8")); + const current = currentPkg.version; + + const remoteRes = await axios.get( + `https://raw.githubusercontent.com/${UPDATE_REPO}/${UPDATE_BRANCH}/package.json`, + { + timeout: 15000, + headers: { "User-Agent": "SupportBot-Dashboard" }, + }, + ); + + const latest = remoteRes.data?.version || current; + const updateAvailable = compareVersions(latest, current) > 0; + + return { + current, + latest, + updateAvailable, + repository: `https://github.com/${UPDATE_REPO}`, + branch: UPDATE_BRANCH, + zipUrl: `https://github.com/${UPDATE_REPO}/archive/refs/heads/${UPDATE_BRANCH}.zip`, + }; +} + +module.exports = { + compareVersions, + fetchUpdateInfo, + UPDATE_REPO, + UPDATE_BRANCH, +}; diff --git a/Structures/asyncTimeout.js b/Structures/asyncTimeout.js new file mode 100644 index 0000000..a736a96 --- /dev/null +++ b/Structures/asyncTimeout.js @@ -0,0 +1,14 @@ +function withTimeout(promise, ms, message) { + let timer; + const timeout = new Promise((_, reject) => { + timer = setTimeout(() => { + reject(new Error(message || `Timed out after ${ms}ms`)); + }, ms); + }); + + return Promise.race([promise, timeout]).finally(() => { + clearTimeout(timer); + }); +} + +module.exports = { withTimeout }; diff --git a/docs/readme-header.png b/docs/readme-header.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5c9367f3a6907abadca329ae345df45a70f630 GIT binary patch literal 1470505 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 z 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'G8yO*y8BRHy7!h^=*}6M+!mtNtK?L<9H4b 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�N2~>2L_CnRD*qzb29%TcfvmICHX|VtVN!r8QeN+m?J96LNRAWM$^E9? z^J;NuWIX%X>fQQN5L3ac&USfD`!FeMnF(|LP)U9#y#;W=G|fGTjwre08N ztSK|Dc#GswIu4d>M0Mi~oS&V=D_;6yeDMA6#qt$P__q7+dx#yRCv7H?8N_ z;J^Uh`{&nU&))s$9~|IHgw`hD_V2vM%$ROxr>5}iXI+R-e)3wZS+kPcy!qzaF+Mhq z<2G-^rsIymhIOmCI@zDTsAac8pPql!#Lw62KuW(_|7um8@D+tkiERtu;=yK!KniD zBOV2wOm7RpW_}$K-qS)~doo98@{AU`p(+G+3BD8BRZZMK>C^vuv~kHS?`FYK2s{w{ zCFnD%naac518>g2+PtV%?+F0k_qh>3?;;G98$Qb6K}geoY1?n!Tq z664T?fk&ejAa-rG)nJ5icWbw}ZZZ8P*tZsqEZW&U67d)MvPijP<0mtsU*=RWZgBD%IK6R$+tpTi^NytXRF0&lx4b zE!|kjR${F1iwr}5QjLNe- zM(ZeWrAf(Qkon9G*ognkmpHTM^eDjq_)JJ+SQ+f=!zRO&308G?UMQaz=SxzxFk18I z=v>GWoijOwMN3!U!VAvjG1b_a;HE-dad|SuwXn$OPUG?p+bq;>a|Z``1E_yd8Pcre z<{6*ygczJCN(Bc-=IXOojkEC7Eyv@T7hYs>z^pm77dH>i5yj_wY4_JgQjLLE|u-pPuB%A)WhLeD>TY2qThCc!$FU^S7w;EzWW})+|&f06~JX< zS;4WJN&TcUNF{a=!M<%~HyZ;R_Ixf`{!Nq+gb>_P7G}W^7aew7l3PiGx+KsD)Jl` zgh6M{?%cJXH-Z)xB{q1H>^OXIpTV1lI5R!2d90t$&IbzUaHV32&K4VI>>FPD3O?JB z*PdzIin|vv87Wz|Bac< zd7y1?P;ZvMI(f-YMQ5#2(HR_RB@>@LLaCVHpFA(MI;*Pr;FieGeANMWup*jjih8iP zHFPEFxy%pYMvjp~kD>$Jc+;z{!}@jSV|;YhtcR`H>q}B{xl<|;S~iZ8HadSqbGB2@ zV1}K0w_)oeH=@0>lh@C9Q@Bh!m#<|#Mj0p1W`naGrcc8w={z5EOWBni<>|u)$+Wd8 z>_2$GI0gO}rS1+cJF08e2@1i#XbyDdpcdcJe|2}}&)~o+gYOEl$fZCR0doS84UFO9 zTK2`!5(*lc8O&pGvl8vo-S| zkK5Y1(cL{@-~~Lf{Rg<=haWahi(#f?s@BWnCg)j0dG^BiS)Fg7VhlN*9fQu0V}DfM z;hzJA{e8eGUoE}lbQtRcwLFxayFSP*&|UH6biAw-Uj8soZo}wZrLyAXr@tk)A7I`l z-SceyyDjk#kiC()rjy<<2*yOjiovuU9jE)v8p&HZ#1H0+Px&<%Aa)L*Jm` zmy?JaE`?AnAhVhOnHaw}pfSHUxLKW>F$Tlsc-m=~aJkyre2s$wS!eV^mvV&8cQ^R_ z_^$ggK55pk(h+`ZYws}*u|3#-Xa|?TX3m*gd2HuI8G$w{GdDCnZ5)kV9bMRR+(kT( zc{3KSgu-Ad7BLm`lC(~GAnTn*rp{Gy@`;yV`Qi-*x8_}?5C`%Cd!TiqX+E+05sZxO zH}mM^eyM5=mF*u|wA|2p8&?8lQ|s8DzBgNVorvLI|0bpkLcf8t-w4di4DGQ4kc>L4E9eXrRM+TR;>7bq6a ztyN5~1p8Xe;8CNDla76cabBN=x#Z_d*Wv8XMiUtUHY1{X(o* zz8q6icI|WL@Z}6;p^9ZHz5+fe57R7F1`8WeDf`l!RC*JCt(zMVGBoH@S|`%0DWI*W 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%0A0ZEaXx-__A>EuVu22eD_@ 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 z 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

t0jRsJ^sXJKabCU@yocp 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�Fp&G0TRMXv5n)3dzEduNwREp z%aX6U?$y<;Pk)}%_WGu+nYCu`^GNXfwsfC!&fc?U)~s1=)|y%KWxV|--h|)$2S1O| zFaI1?Ha79gzw+z̗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

hmy1O&W`9kNpnc!^A^KT;Ap2@m*(43^ZXd<83!6 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ص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 `t_qXeu`*%~zr~Cc)-gByU?b^9&SJhdXv_wQ! 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%0DuIYkh$qZ>%`0+d>XaMb`50HW{i&J$Lub zHjWYjTtQ zo*{=S)M&L*FwQ7-Z!$T4y(&bcgAG9Pl0VNOFbgKDPjt~sivP0Tg-Bv5uFytySro%* zrg5(vJzG&Ei)m#zso}B^t5Zx4B&B2N%+f@4cpAA%A~R&&04_a(ml z`g=Uyf}vx@-dvGB1Cb*E_k5eg`tj#K_@WkG-tDvJMph2Jzu{a6M^4upssqP*4(6m>IT2}4^E3w+D zdjwZ=>2iR?5p|MaO@Jm<@A;wG&H-z?O@O``?-@A;ct_~BQ$0VThEnjBTwHoH}P%5!yvB^4}}CH`RsD2j=T8tuq5EgTcZGcA&M}}E>B9b0$^FP zp>&sEY5OZAUse1Y|JAW$dL`X@VQo676%cCB3M`8#yjNsTqBGvO=5uFGbcOCY9KXqQ z)x{5_yb{^rJT81GxTd;#j|x2;YWJH+zVr3!U`Dfi<2sf}-7)}h*-Tka`iUiaD&!=U z{nnITCvQ#Y}7<-nc}`)Ed+>KdKe-QerZIau5Hr zFCqErUY3uYbD6*E6Va_m?^D`3r!lBR^n*=RdFo(f?2o&3j~6xb@<(A~Lri~+I<^)k8&N6^HD@JPN_ z1o@NrrRfvZY-GMSmileA9ADmH8a~w+knyCTu0&=13QfGltIt5;3M((+uB>NGN0jhF z+9@g4u+yu2%u<@ZCt?JoK64z;v|$V4G!^q-YW}3tD#VP&J7KScV5<;q5Om=a2ueq! zeB8NcVN|)x?9%h9ML1SbT-v>Z$TEfw*syVuPu#dooHWI@5scbdj~OI{L%Iaq z*WsV8w$pJY-ldMywmF?PCK#mA*842BGxV4t6}G?LM;glqg2%+h)o3(3J7xDeKF6zm z)OG_p$YbJv~qcOP$m)&sE#WecqClm6VjGsrCZp5pUxhgm( z3a4|m(U=UkiKAl@e4`_sjksYyH{>z7b8Jq1P1eaiTDv$({_}gK-^7+8J+1Pv{{Nsc>{DXmzo-UPnT>TpFPuiCj>o(EUSTk4I6f3qH-6y8&>>T3M-3|0&dr0{a3 zYZ|7050qFEz7G^fKbuSAQ=w~!bqQ1?MQuK|XT_PNVfR5q+IlT?jfouxw_)%Cz?gI}#nH+`kH_k(E{5^DE6QNr?Gli++q%lOotIhdbar%F=PaMA)jft_83 zf7x*%sCJIn3c?IMVRuti<(n0g$e<{b zTt#Yjl=!Po*!fNBe|A6YO-USTli!=n9220&zwv$-coJ$Kb;r>r$MHG)b-eHEdYeEW zEA94q49R@Y!$!T^YcB+a$wGqcUH1M61sj>v*(fQKD^pcc?s-?T;~zGZ+tvJ@3FY}) z8Vx7konW1)_N)ZPtm!N(=|i0+sW*3QP`Mbk+~gvwo$O zbo%y2NUT(<{W5;diAIy0VnQgH+Vq-_y!3nQ%TkYm{aLD#K5_IxG7};E1oa1YkCRIv z4GFevkTaHq?cxc&2{(>zQg78K!y9+K|AT(Vpm-0OB`y-Uc7GpedUAm4s@C1pn*Jtl zl2}H9VZ!$#(lro0E6pEFq*s^W1szs0;F9Iv*rL${6K~jG$~v9od2Sn^__?avM^Ck zBUnTF{CgLT6$3!rr~0h#L?2V{6Mv`FKS7xYC5FYKk}#m>xJp=8EuRw|O2CKgYvHw% z?HoASEdhBRhG$pW(>x!LFZx1Go(l9$w+xZxn*F9lXgM&Y@g9wCxZedZVI zzigMXUD@1(ee67Yks6BG~=3U-Y|OqFp83B#7CdCL z`G;}ZnZ6nCvOji~!g5xl*4(&@vS=fGv;-N(ud$nSzRY=$#(j%0C#2!SeLBB*5%Fw~ zY6?(K4P#lbsLz$K)vJxT9i`vw*K1MgfiKq4SX3qGCP{Gi3kzheI8aLuLgdRpK#|O- z2(I7P$u$4ws~SqsNF|u8Cn}B=-2hYSX!%})?ZP@=0q;SUGg;1CDmY1Hl^=mOe`)a- zjW1b?lsRo;r9#JC$>}Hw+g*A&ja5;G%(5E4sG=u`-Z8q=%q-fSBmIhZs}$pTa!DhZ zwv?+>$5&dEGyux#-0?5jB{ZXFfS{*n>XPIl1#YzK@ATm|yl+uftB&RBR3QK-8qyS^ z_=1Uqm8&V3C>$`f4ieq*dwm~F5*xj8aTbi9C-h?#SoVbzinUilcxmZ_cD=*7wh*MK zUU?~1&#nLCS4$jX`Lzt+oZfMLX3~Kf+=*~V6Aq32R>3`3V zEDh&XMMzo^iQ5`HNIJ47WctlIq|=hN#=qAliC?30#DBt97lcoGMrI;qoc*GbNvHH$ z$h0<_>w$Yp2AfPy;FkpY8GgEIcs{$&voaA+o$HGja(PGXuXQXxq}m{+0n4l7T77h) zfS_m6%D{)MO2P_%7zp!_N=f5Xa6oGe7&<65ahsDXzUabmZ#&>~H&N@85l~5{*?T!< z&sHl7H{jonn|tEW)ltYHN0O@&hWv$Ot%n~{D_i0Ai1r>@tR(pPDH_prZTZUch`ghyAH#MphX_u1`cv$x7> zZuT0v=z+%=T*vV$epka12WQQ;Jos{#xEn|`pOoo#&W_*a)$@p_O(MB*~P#eajccC*n zZHw-?cmb~4RL1cM{c>OL8shjMWz!do6`A5c>e{u};Q~!I9Dj2i$Xo~;@|OK@)3wz3CM+Z3JtoI1Sm9#=c1(s& zdLZ6gy(gR5{zf;aqQ}JN_&z76#okfta-AZlMK040A9!6%z2-u2ACrj1)3H<1kRlOe z6lb4RVv;NUzHK_d!pZy_`p#!KFdvMZO#5yW#dT7{ueeT58wF&jP>e0xc+(6%T9*4UR zp4f!B_cQWF_8UNEf;8o7H{0&|WMd(JWl5nS!6>8+JBi{)IENM{T?#n*A?1ej;JJ{s z3P<<>poUK(#q@>=9zWWXHgJ_vgZg)Joi4Js>%qDc3R-+YXnaift#C$wnw4S|f}5}6 zbaF*oOa$?2u@2mYq;N+QFNDn{oGXqQpeG*}HPF^y(9QUjt2a?aufU>~K*ghgN-Y_y z+(6#61HISQQdYA~zC>_GTp8QbvfTVmlbfNP6(x{_t>x`H1E-FK5IDL(aSx~Gv~@D`WMieGvOB7fGr%cGVaI# zO=epQ{qE?+yw#soDwNHiLbS3`AnTygA31?ldZ)Fob!D!n8ImuI-T1!U^`YfG92vxe z283KrD;{UpV!ZF^%Inv*Rhu=dYLNj+Uyf6oJ$P&rkl|a}s${p%4nlJRPso15N{wB5 z`hvG_zre4){vK~0-`TzED0Qs9zgz?#pWoxBU;aFfjXL06#9kN=8su1enS7Vrndt*2 z<&Mr$JOM5oBneAFl7ag)o(9a7rdB-YyA!>{%5NJH-d!gWML(9r?GvM)hvyjhM*(SOxKbqJ3tN@Tz27o4vqp$F^L|-;AiHUx;VNQD(&*$kBKdeP z=-3G=a{w@R7)&~ign;lQ=!+%8GAbPwy z#5^V=N9{$on{7R@7F$l>I$xsxSdEOvN@`d`x=?~5vR`OHBQdR7TEcPhV@y!(RyILv zv~8a>S=Fz!C(>HfkVozI-Y$QQkVbhqHGkUl8!;dOPLXo^COMp&aP#k=n;T>|UP6gx zO`oKSyEHy&Hrw~|@yEUxLOE#R$-gE7QKiZY$T6!f;!6!%-;I~9AIgLCt(h0cO|{{^ zr>(QXG5OWv9=C-dpRT_V>&m%ppQR$ny)%S^;T6>m0&t;xNf_P#y^tdK;jpDp@@i29?xRpjhYaqw` z0Q;kqGNG`KrwLbG(Ci#eTb2o7{;y+__x<}1_~$?T0pI`n*ZA<^!%bC=800c0L;cuP zfEHA^&J7^Cih$AtACNHuAHk}*+j=K^xQf*LHRm{I{bMs>ZW3UdYl+&Ujop0|g74z+ zr~#g=6zZHO#k}7v#oqs&>_0)QK7e>bVN%7TC|>gkQC`RgRVUsuT8GY>k6A9NYD~-|2p0i>JvGJ>$*ypE?V$leJxMJ-%7+p6J~b6 zTdJ>-B)*zI4F1C9eg}~ZuG6d&lU`{{m^>0pLzJsyoRlXHG}88<#vH-3d}p7kC)2$x z1vP*wEgEnt6}M7q{btpGl#g!F)NM;z<5E`|T#_@Nknu?r&;-gj0@02O4T6-o-F0^h zEMo$69G^I6mFh0ISCZ8O=G=LHy^Yhahr!wBe(&o%9hUUSW2F2Su~aZ_{vNyEO_ob6 z?(!{DW@GKCEdWzt8eSlccOgEr=fx+43?$p9pYVSm-M<%iN8=1q;@zlW&Q&Th#-}BkHoPCXBV+X7atD%tM?n3hCS-l9IpC^ZoZ9?J>K}>?&z+IB;Y|oxqmO9KADic&JRk2q-SVIMg#M1OYFa2_`GQHm zI*m)6<8Hy`e*b_ha$O{$hTQ{FHK6gj~R86I7 zSfFu>A>V%X7ZH3b}#@Ya5UDZANy|Z*><;(p` zUTv#MZWtoDTe8cbzS6Fq@bptPW(kP_cs~2@yXvHuV?-A1Ze`Zum;Y-|GtN zP-{D@OO3CQVi(3AxqC@DtLlaXK<;p)R;B)S=t_ehPXvUf(F81$f8B8`C%@3_N)Foc zra3)b)#TNfIQm)f=(KC*i|pU0ug1auS=Xu6)B0TKOR;h8D76 z>oJeTJ^mfXlpHIfk88Zs;xbp@|NP63_~pY-w}AV3OpYFPM`9zOIUd{rCb03+%1iuB zd_9l|dl|^OEV!MRt4gPA(#l13Tc<%1ukWA>da5*-r-?T~OFm^E2PL~5_d>Ukmu@*> zCN$WOaEJPs37l-VXiC@$EV3!cbn+BrklUbf3>7E54@v!#ukd4c267)F2 z#S=68Jnwc+x^DBFy{G3FTwmsKxO=>-)$N5YeBc4XwC56-xLsJZ(&~@*)M}eRQ>1@w z{H{u~!t=p{gbd_!*BOWJG_SY`+8H1zpXApwl$Ykg)6T}AJ7~1x>q67iA6})SR{CLW zC^R+G-Izp=HkG+1CT`35a)0SXQ$=0 zJ_#@234Ha*^3(;mZ)>tzldT*jxlE9Kb!?4ZJu%J+m81R^<&J;0=p|9H?_z!@H9i-; zASaF7|AbOYu{p~^QmuZpR9Ul%4N5$-Yzl_v z&M#SIOM!GXeoxrHvyWS)MhX3p3aJx;to4efzpf1NwEfiep1^^~sh%3ALY^c*RZNUC zfs0t>SLaYl=b2{;N*#qQi`YH7Ar;r%7duIzVd)IF1*R*bV(rnrDg3o3N;I3g>`AZW zPjWi>sY)aNs<_bQ_gt*@!w)~;&Ep$<`Q?}R`0)cSj}K#_^yT@5L{tl#z0Znvwf?)0 zRn}8C{BENIXC<0dJ>%V!k$5-#5KU^R?@FK@6NO(rh6USvKx?BxGo?Ng7=n@uOMHfb zVQGmowAgUw*~&k{U%da^E@Dh77Mm7aoPp%T^0W?QOi}c5)+ux$1zpF|PLt-pgC~e^ zVT^%vzCU%br{p8c!YMLFjraTgM$D>}a71yk(=-OzmGfGfZ6fW~G$U*g?$}48Tbdm`E7FAAMhlZvgu&_NEN8*b#2~S(`TdR17eYp z>EdC-wwOpec0u0wwi73?7oqs}|~9y;{`&xIT-Zv;%2Q*EM4 zt8ohOMZi{kA>c*EF}54{ZQ=RnIATM6;pc@6q4!}*+Nix9a`On^6^Y4i6er{QL_XG! ztsi-peV#h7kK>uq`eOP*+QlZcO|;C3V?Q>D=|Nm32>SYftD+a=D^Y*kDiCPb1*<<958ee!u#nhj|?Iu@S&=l`TDDOlS-Hk3B;{$20yp@>0~ci|^n-aX>~R z!MW4wG;P;ZeTS*|i!K|7C8t{xdU_YNM#?~awtgl&LH$PGP1YXFWLJWmB0&A&VAmmr zfop_G$qRn1@aMNMf~|zQf_q~p#3by%!KB?exrE3QEkO&p5Gr^I<&KcJsM=SAN905Y z18Kk0AY>acSm&}L>%F@eon21T_Vi?sds>^4Ew8sI=!4Ui2|R;Ne=BYrh*Vw)^i1|n z`J`dk8Cw4~`9ntI1WP@EeU|j)ff??g^cP*)sN;sc(IcN3WjIigGyc`pM^j&2-)usn zAV4}l#7J0Snxi2da09Acrx(OKM~MWT_gd|Xw=GN~g05I>k>e+Zyi!YD9;>lEMI8pF zV7JF^77d)K1EFIUQGCC#k$Z<68Us!+_fC=N4&so`9KoI zvtYg>0U4xQSry5Fe>9)TC8t%L#0=Gp&-jo`f_gIl_#8WJ_%#u_gC|4-A0k8dp`hPM zk1BO8+o{vlZ}O2mk-p_XN>VejbB<>YVALi$w};DkiTuOE+zEP=9IH^>u56Pg$4=1e zZL)m7J|mOFxGXG-Py??0UeuK{~|Au#hXJm7>7O zuPLiu$NQDG49JP|lS{HqA89Q64DPsK_m!&|w%|1;PPp&gZ!kC?@H-gm9ay$xj1W!%xWhi z^c*6|BH2NT752UQjUoTlRE;t&mw@ZoR&0h8n?lH{R=iKJ^}!wM+{xBIfX6I>N&6Km zd~>j`y-?R*W$-2wx=s?p;p^(Byr4E4Kki8FcdpYKb@ zz#vFZVzkbmRd0_ckHqj#J>a;XZB|$-N&Wc4AOD2M$H!Yda>4U$67(;KDyr$nq?iYi6J!nX;}!)Z=!pPVK&ZcGiIEXG+q^94 zx3hhi&_{f{+c;KImirhBZ0?N~-tH>7Q*OiW^RE3;=2iERx2@aro%Z?m*0ez`KMhom zG0c`YBZbRSJ}Gq47nrmd-OEkcpSOw(0XDWlX`9E*d+EFH&a$=yScppZdOX0YBy=}- z&T*V$KF^Uy_Gg7b&oupvnJ@Dx*4l{>6uQFfW@)5550X#Nb2;lDRpa(t_6JG#xhRzU znl^!B9Osy1Gr2h?K##?xxvS0x>Su1DdQ6)L)#tGr^!W2~936g>-Irq=9}_q`*=N!t zG2fv%fgQHf?8RYw_MOL*(+G0Dm+qD@yOq>Q?=P{SZq{e1Px~j?l*a$d`tufRl zpcFlKr0@y9IeqIp2r(A|A15S<@8nEA?g<$`Dzif z_4B)?-8dEo44u$C62bI8#ux@{cbK8X*YQuQh9o&p>|l0PhTM#uxMN0ji)T4PvaHs| zq>=J{{Pc6}(QQ=H6ZD?$7{84E_)*1^rh-C()R}T=+I#yxCgleuufwhlecR`lQJV!C zpSlx0Jdfg&;`80_a=8q;3>#6@;g@2OgP7froV<2Y&4nuV{?yCE_&0bgoPQ%d0qKF(MUn$E*<-J?5dGOO zi`00h%F67gQrjUe$~^kS@(8w{_sT4FkR?^=qmFHBdAbzs6agVU%zh}>*A7hEci`dF z)RoG$9klY3c+!+kOh~E{x&dsW_{t?AsJs7e@TeqxuPMO3c8APQGrR&qv_?s0MSQT1HzPk+{5OBdPMOG}*h(hVW*C67&3nd$iSJJO!_ z+TIe^qj$s^O`)8Xa72F+G$lk=mTO>~Y4@yFXF=;e4P$HOeU zr$HEj<49*9nolDkNkNnHiyfy7qR z852m}wrwlPU!}zOpi8uX(&lCpLCGgnqv8{op785FExMs3KbpKS>Od;k(jKZTEDKH| z(PIe(pNrlk^~`KOTc(_h(;^dr711lP?zYu*(fFErAap;8T79ZpJt=pR4`%PGQA3`v zG4F1u`dbH!T5V#pwbEL33!7MYg3hGX{Ol;ow@PnzsAI5lRm$$>EFC zA1@?D27{;pW3l_{Eh78FhDNeJqT8nX4pev|E_H7_=d&Bdl0Z>R+oHTY7S|^Lg6B%O z`JhE>lRjbKeD;>N=2wI$Jkd&f;ID1ksl%~jGMK=^++!Q9Hiz`rW!Txxa|3-5Nw;~` zCeZP2*72Ehlb{{AbT>iZo2(?$u2(CS3!+Lbk{j=@n?31G%4=F$dnzP*xm(2A?gMs5 zNPu+$G$)XXjvU{2Epi2aE^HUYk&g+$Y=u_D;tL6(q5Ba-_+*Y`|4Z@!W2~S)9#yHaA+-1~kPi!fVot^!lj`F% zlR~i|K$=)vwB9`Bd$O@?k+R}W+UEZmDQHGAsDtn^N7@azOH1P zm^*gW+50=?8e^J0Xo8?mWXMD;4w1Rr>2k3ne3jIE?mi1?ceHg*>>kILkNI89@zUl$ zgt^JQ8U`4ySo?1Ba^xdk_A##X3E%yehqzwe_-YfQslXTgxU5aGitRSsY-gyy+;WQ? z!M06*aS@N}k)qYrnRy347TNl>$*L9`85|E1(+m_MLmt z)-*W8t1bJ3f>iR}ClkZcSnFn^H_{_T<^|j@4)$KnXlY%99ja`C;{Ax@rb9m^9tc-XH0P%uX~l}IL&JEgm#ApZ#DeK?88mYRLTzF{7xby zGaohWmETXyCa>+7>oF<&f|(Dt(+PtANntTyn-k`cjmw<;AB!qR9`AyEb4s`sP^JWw zg%scIu<5e=fWL-60nIn~E&^NqB=aQvL$Fqh3n?QYr8}(eF1oDqaK0q{QFwX(VldH1tFFW$ zX_YcmJJCd~{@@fwIDggw%`uN0?+n#alrS}c#CeC7hI}W2GSZFsns8BehOHN~+=<~W z>q#9g6`lK41q#yV6uWb^9yhc(jlEzN!FUC8HtsC;Tth2P3b~O+IJT1ohd8C~$>6m- z)|Moo2&C6oVKf4harCy)Zq2W{u%>rgUu(yHujYVx=AAg}xApN3P1fSl$|j|S?gdu& zz!qQpdfV&Mbg+HkILa$4Yo+;#b9!$@@RK|q1hWrGVuHMRnB-U+wH zYxU5Lzf8wbj7=ZJC-4(F;zU|_lT+YW?8u#~kSuSSFVgq`8MQa8n0`i&8c z9q({FjywJOSKp1v(8IAGJ49hY?!!gKr05Sn|8ScO{do+oj>%Ce^0Z)Hf5)PSCOkCw z4z;yTO!q<^w_v~%*ou?M8ykQ+&l@F7w1mhdsEb+BA8|r?9XA)Hs?UffBS1Lj@GS6& zge48|ogFKE{JT~k9C%Xi#OVdH@6#urSt1SW$oHTpE)2>(gYV;=pvOBrd=fO1IyP9A zdF;sbHW4}}K`lj2eT5|c-RyFIsyPw7X8LSK*=UgRA_U1{Z?Yvd-Q*C-dGPA;S0@4z zFAhuvwG(HqzTcA~@JrA0w>sDLPMNc-+5;9jZ*PI3Yu%--DNj*YGClS9-7ACc23AH9@lSuocfa}-UT*Qnk&Jxv<^k{DKaJQc7J12@ zI?(hc^2qT!7nK~pXG(elYtSfZTkU)^gjh!>svJ+!q_Qt^{r}VUXG^;4xYig7D0AlQ zR=0Q6e{N3r{h!4T;5%PA9Ja%Mvuic8%SNz762KTB^<}Q@u&P$hPZ9}&ATU6JjU*T7 z_{^h@w4=Dxv+=SgH4=;S=Yjw1HgAFvmL2LnEwqzf2Nz5G6)(=*0-`_NLeccfd9t_u0A$KNM9Y7b8Zjq&PXP0ev4s$b6BH95-kFcD(3$ ztlq#T@$xiz^u=n)`~rlyw35zmHSN;*SX@Kggd_CUZK#qbqs;|5K8~}>qAld&<*OB0 zjzlqg&U#fzdj%+PY;wUfzs|AJZMd2XuJ}0YO`$Jr6`|)lX*E5s@1l$sV2e>1zy};Bw8_|WGPDKWx4ykgI|izMAH2C=*W<$DFdsiAG`|06 z=Ol*fSHX`~u;ix<+eGL&ZoHGbd+k$(FUM~kCkmarCtI9hk0NDEY@Gk~X)Kl4N#DMO z`P621`>y$O$M*A({is8q`5g8H-|FlY>2*2(yF0&0sqJK|KKa=Jce~r#@4F+-t}l%@ zTdT4_?cyb?m$4!eSw$6BA@b9pvar|;yuyg)yyO5tx?G-2qWT7A{?VtNSmksEt>-{rAcX#)t z+yqz5En&;jk6AVwdjCA$v;DWcTelGn5`)9`&nAAH>s?#Ke(;lTT^>~5Mmc70-7^l~-+?Y6LmJ@w@)zR1J44W*bHjHNYT zRwBu4mr@fuk07rLoAes!Y$k%!7C3llGN5W$ zDI!<6)=sInt&fkXUACME*u6vO{M(>9c;3gzK}R`BAM|i^IIOTYNdo{VMACek2mK6q z@wEBZ9WTz0vlz((=RmPx9-p|CEm(em=$+{WzUIiPt-_KOVo! zU*CS0$LH_TCr9s_4LJ{1B9Vz`BA|Zx!&e(e&A0FisqYqlJ$MqD+E$kiIf1M~nwygT zQt(EBN6Ysi8fe(Cyg^{KJJb{V@ne1Gp`Zka0T243v``~+pbz;mct^IKSEeqyA>e~7 zr}Z)jhrWR=!P>6iqx*kr#l3M=6y%@ivh^{q`Gn7E@^zECILF&I@z{o(G8n)4juqEmv&^H}Bo@aYYw8I! zL%NkS@y7i){|mdNTr90M;7rnrTDhx9#>;FwLqJAm#o$B^^G9^yZES{6w^v|}mKG}f zlUSg-5p5m7*3DnZ7O~!)Owy;F12P5@P_$uv6rF)Ge?dba%_M?AAwzy<3jEvvJ1#G_ zi(8A&INd0~sQ`Wo{K|VNmBN0vRF+swwZiaw3tdi|U{d8sMuE0PeU*3^&CLD_YNa`m zIIMIULs_W|;i_XEE(Ueg(}5u*Ti~Vk#R{&c3MEjn=y0a$$;u`J7ijxy-^vSQsNj@wj_$^tgeT?XI2e3L(pzUePN|0Iv!f3(G0=MK@Q$H$}HVd}Y+n|Kh- zqDol1d*@QeNWJwvc5*HI2v&Bvxtwww=DTSSt=+Hmz8(bZEPK5^$scwYRYk0FAhGP9 zi0i`WC(-e=HmZ+yZ&H^_qh30oSnzJphAMuqE`fWa z&u<3d8-vBVo8<0@-mbI|5qOAwG=(p`BG`G-JoM=dguk3YXplhhvdOQeJsE(iW^0Zz zgvWMH%1y&D&{4s>A7)gvDH)&`jO}-3kH&sJFH=v2F)~xcQum{h^}>?Y*z3OLLTAs~qgz;|u~@pw;}WL5cckdl4)kuB`I z+u(d+9G#jK&zsS=#mGJXsnh58k2jz30zL6;fhg?=*_W56BfqpG!|m~y#<_oz=f`Jx z{_%Wn3~Q4Q=Omv%`$h~_vuy_}^87TumAiLkJm2qo>f2HbV|Qu){%Jqzw(o22w%BmP z7k{{pC{JFrBRGe_>?6(o{Cw2wdz-}2Hd*!3>f2*HebT4x^3>i2%|8zx)5hp6NY^K= zyAOWpyLj(LJC7|}ZHMN|n25YnIQ>YX9aCHPM)TQ@iKZ7{4kZTL8jKkWmtZH#xFOmrQGQ3qaG=cn&7?f-GC$-*w3pKQQ9R$ND^ZBpG& zD%ecWn{AG}BS)`CJDpjc?_ScT&w8D^d0%p}lg5?O_ivt=w>#^)GW65NL~&nyZNWdr zHUN$LqMC*?CpUM4%=wVd*y)hzlh7g6-gKvpw4I>VE@+YbI;s0M{>dA8MnYH0(-T6xe@RU(q)UHMvOd zO+bcjAj@@z=-ZmhS|E?kSxndm)IJrYWe#p!w&!$zH!jFn<_ldmfDVEPClUlPXM zs-QtDu~tD@`RN07m6W|@c3YI3dY>SjG)bFzAXGbe^2(*~BRz;zkEHVUYgMN;Cn~k$ zz3k`$g{8f}IkoGw&Z*L8Aa?`o;6O#{u+A6n;>vZj^p%qUacs-kUZxsF(}bbQ^%f3K z({-0q;iP)M=e$zts8cSjiEUxDomrVL%`@{CLbO}T1}xunGMDc(!I;viTsFlkz9|OA zx=v{5w_vwDLWc*J9h(y8MM$PzZ_8DG?O2ZUn;+-#7KdPe{`ueJ*I)kGCc93DzK>&Q z&+jjt$B_N?_1q2mXX~in>0L}Z%}5QpZh)@}lTK=+BVG>?<~^Q!a0oGf6xFLUUidgO zf=N2c8XX5L73?XvRspY|;83%1WA(praAWs?p#T=gWT)rTD42r)HfSf0X%{FHk!IiCqy8HQn%#v)_c&m^^VW_sxqE2e+M4O_tI=u{p9?WgB{bjnF> z+hF3DaJ2XzOKsh#ZH;*3wqQAW5XfKqx9&p1me`C#HkTZw8SfIEG>`KU3;8%d22EsW z;V>C#kO(%ghGsH+nP5$2@y=HjhHp`TQ@9k4S=M5$Aq6_FlZpwwFpS`X{BSZ`JZ-cy z*wg52QqZkbODBBI68Q(Ao5bz{L0-myv*PQ>7+o{ak+6R&`lhAuQs+)jd9|abYgrZk zy-33kf!Q})Dx`y*g2pjw;WIi(~)9eXqXOyEgC(bAk*=i^MlmDVego#|t+* zz7)0M`f^Njofv(TW$wXV9z*E_Sm)c*6*gI9n%dJ+<7O6Hz;4UQ=S_qb46hh7*M?eA znam>O*GztszyAE%7VEu#c#t2*BvZgW)5d|akBY{C0g-FAGUAn4i1mrRL_ zi2+ZQ(+&k=MtgeRJ;9*m=Ly%SaoH`o!wGPEOq}4=)yajZu+Cu@?B{#?xF7KnP!T#m zCe+yzDdTe^dZy_&T!*qh-23$}V`9VmJ8Aa@=FsV?QO)4@qP|s;wWjxWgL_z5mhn6E z1xtQ|d{bzYEKgsu&j
P;ny~$v<(~R-*7}94D}zk-tTG0Q6823@a|Xn?U(<5KR)!_ znI`|yCLY>u(1)JEmlwcKQ6%Kjh)-2ayqn=w_(tgBu|E)>IvW z)^s=Lj`xG7_Yc3xrw{+ucFk^wzc{AvTHQZ?{%7+M_PDnrG|$PGrXc&KIhP`#)biA~xC|@XY#I#^=dP?>~GzMDje2+XagYyXXsRdw;VN zI?McUwAI(A|JEkUws9nCwo~%%GE3X=AWAMUIS+SzcZ~nvzyBzA``CfEy=%JQc&2`w zGx*THM(vQt`(Ned@mnjR9glqe+TfU8w|Sr38kpobbv}M~|KVt-&vGsZIOP%^$oAz} zvYk+Ho?NEy@bd z55B=zeAlttgpBXuwzfE)-EW`e{@va2-+kX9x}BQ{UPke5vm)px;x0g`A4Pjg@8SM) zvmZTUad*ylv#?&ivp*(7+a&%$=j2(BiRt@s#P$90{&^b{!60*KmbTEoCVS}O zhfhBr82czMlGy07wV@}iSK;)uFTQ%X|2Mh+_({G!{(1BbAKT7#8L`nO^>fnp#NR!P zv@akT?R~~Z&&l9ze|PBT&+_T`uj{Yt_vrh9fNkuawb6gLlaEJi?P1KHZfz{0!*_eU zHhnkrRpj~tM2dbutG~$9-B`KCY_;2$P34KK{49G%5u+M#UkM@>B2zjMnx_b5Hz>Z3 zSG|7s$W#nKpmz|(0l}LBj*iPpNKT{E>v+PQoFGE!jq^gKvx}Ml>2De(6$ULJm4R0* z)_GUrM*#>rU7a|k^w49f@32}5DXhpSI;&GVdZ$sO4`SBs;?>c@1ok&sy@Vze>cySA z#XBdy;Drr|t!&t_RPLcUYEG!jil4!QUF0=iky+Z%YQjn}e+B56)dVHiHBi`9Hj&9u zs53YTfC=_~0k;9Ecxl_wkATb?<>z2XSZPK^gEqsnx3Pd3oT1HQ*{P82WzbqyZhw8L z7F}M2c#KHpq6tYy9?Sv%TJhkze!&j#Bul+AMjFDNQif)_6!DcT(tS`s8+n_m0v(9< z!&f%-4$#XH7`nfIFTecy5BcfyZ$}5~uI&c3)`>h)-QTrUQ-6K=UA}$)tL5pP1sjup zm4hqZmB+!D&GH6Ub59gT$3TIW5xy?;YP2!gV+cA|7Wsfguyidfk~7K4qdYslc2pr zc}{>nxBs5RkFvqCfib~JQJTOgy8=cbveK!w4hifo+gLWEPF_s{P|pZH&{eW$L(s^7 zz)dH<4u_Y!*D`1r3!BcOBADo!rO8|MuC~CS3twHI#<$0vmU2q+eIo!<17aexHdTDh z{F45}L=^i2!G@M@nW39!M!YO+#vr!d`v$3LaVu1rfZfDR0)4umfcG7Nf0RD zx)>hE)k6A0lm1pA=+WP&o#u{e3#wu>9HBMMZ$`e7a>14t8nW&(&BpIM8|f&zgGFs8 zeiWNC9+yTb6-4es!?ZA=0$K^acop3~ z2+v_mPV+NJS&I(f&uALPBn&1q{Hff+!E^Hd)2Giz!2hTIP42zxY2TsMC%WcEyyL$k z!^<&g@^DPXe1HB|>o>IBa5i>HZe!8WOXh9W3bX9r)I6s!@7}5W^z(0R@0sOrJ`PU~(= z*2)p=fBEbC@$QHG{M)}DJbfOYpxmQOx8H1$fo~_(b28|ZiF}v;^S}KsZL;t2TjLvROYI6Lud`ahv{(?|_<) z-~F43?I_E`7d$;b$cN*9zyJBai#|TdkH;UP5ATi=o*KsewSR4s6hEGSKV~~L zw%GaKWwYy;@I0mQtn%#`FF)RWIcSOea!f?O`|v4o1{Tf*78y*5S?@nRKYeNC{{Hp< z52doCNn-Z8~S=oB0jx*6C20v=7e(B-E=f#8IPS4k$v(0_HLJ- ze*O1@ho9mk5npg5LB&$yF1Mdp$;5k8zv#l(utX`DJT$|Ni{nj|t`j*Up6#W6@fZXrq%K zthc=%x7^7eJRG+Ac2Kj8x0eufD68tr~Uggr(9#}QwvZF&_xF7@=sAY!zo-{uG@;@0K<>!^4 zqcZA9%CfNRpvZKY!tgGfmZlO%zzd~4)JK_PjDJVC#cEoK^60oJ;g+}30rn10Ruek2 zD;~N~pgf{pA4r|pa=vRGjn_a`p_CYrc^!d26^XE^k$sM=+=fs=^AEs5A*;#R;I1Yq15IiZcTcDmn-> zynN_Nh4b~5lNcnAtYe2u4lFJ1p(->;c6DryG6u^6gDFo7;0HXpPDU9Xq|mH$$gtGP zoq9MB(Wz;x{?Vl{AP;-Qpps2lD0|UhTRDdS`%Fs%)*&Zd4R$FwBxod%R+*N{0(k_S zM^5C2BnM^$%Vq?pXa^W@#Q?Sm7MdRyKl=rfk}L6G zJRToyl7B_W?Md!nqXyNZhRr|>CU#XKH~2_Ny>GC1Yrv~ zp)+LWjLQmESsyd+&^NHtr08X`J@)kDekxDrv~dr=hHNd`RwM&FP)~mu&^zoX^bOLE z^w{E4zb;-#;6eno3KqJs9CJp6!S8{+4SKQbk+2X4k}6Zw&Hb8}7B-;8*NlIK`(}tG zB4zOj@DR0$tm#V!pk{fdNgJ@n;GP1nSm3D7Wgo?iWL=6F<+w_=bLBh$3y=DA1Z+a*F~ThtYreOYYh#;J?jGkF2TVX{odW)3OZ>Rgaw8 zN*)0|Inf3cbDx$t;`TXw`S4jrXB1hsmxe%OC=D$LN*!^V8$5tSDXmEOK80#!4hg*p z%^o&|eE`H??#EB1g-?*BIkQcmQl{ur_Ezw@bjC%>gdr-65r!3e2Xnoi3=O9x05B|r zc<*-UdNx+58}R18NTI}4Aluv*Kn(f!;-GvsqDe+`-&MjUtfF8MiefN$@Yu>93mCl3 z&dG=SV?yA!Uw;*!fIGhf*N)5GUEfh^AUl+mb7V&SK_mPXiftq&@`SO0A5dJ)QSIHe zKlFaQJAe2NDZ&^PJOzTlOlBXUerg9`IF<~X!iWA?v|C>Y8Oo3v?6_f!?cDDMxmo|V zD1Kft`mciaDiG&Dn?&8v(9eWswg(jx{LF&Ci2BF#PUyuayasbd_}JSmcCUCj(57fY zJfVv|MHus;esT0L`0wOSNtOb2NMQ~P6Cr&K{+vjpqpSH(kpIg z*MOfo8p^1?l7g)G1J^k*@c#V=`S|fuOiU(Zq#a1`U+*RCO$$y*lIdgQ4=;k|%b zwDQ}e0P2x=8|Hn}g=1WOZ$Gu2L(MksBz6R;%b^Jeg67XU8PcYmjv7z7N)U-ZvGbQ=J74sw19JWY2Sso%i(jk zFJs3Yk6$;(JkIAMl zUEdn*y|@T-q#XbEGZXr;#itJ5%O|;OJZRq~to=CUer&3OuJuZt_10$ar>>sIC;xf; z`*=*mzZ-3CfhoOEoD6l`-iM42Ni_S}x8e8}YPZ*MM6~Y`^_sPb{JV|| zM?38L{V<1j&Hu+ytx$h2Gh}1QW7Fi5mzM(t^p``{5B=C_bv*FN(Ebfx_XCYybM|+Q zpYyx0`*zsK_IU7oKYXV9vyS7vuQv#w4{D9vdDE&5j#qv&R96MW z8%Z$q2E-IbDX|Jn1_T~TH>WJr*IZpCaSsqI7?FmiyT z6}v=LHB=}~>WUA6h02YQB!>+t<`;n_6ea&$wSql@m}y=zCgoGIEj5Uj6&*1Nv2qJ4|zm;i0x&M=?oMCU^u7Ff1;)&pVvC?1=* zUg-FR&SZtK+-xffr~?@VX!U*?%n71N7of9iS5$ORfdhjyI7x`S_1D;tYgAiJG>_^E zE{L!Qlq_@yZjlQNN{du?0Bwon0Nnb*9+w5^uQ3fFN=z5^G5rqPh!7PcJSTbMrC@P7 z>TOUkNWvC*Ctv~&@?Xue;&EwDUC_7G$+S-mnW0|^F-~~N4m!+2WYV*JhZUzC_(nOK z80e7|L-SDr?^@(Gov?c7T<-1{5LcZ@5~3BgLOoZ3;O=;~66c)gJtBBk@&Wu;VB$^$gpdU$IyrAZa%O`SfC zCoJuHHc{cfP!BHom206DR{cRCTz`v9{mH}zA->m3RGTT_Sy#4 zSEdI;vz25=>qQ_}*%~x;sbfUn#c&=WcLs9)_51Jg+i$7?_A5__&Pp5FW1`=B z3&-@Fw@>YR8CYVm9jyxsid-_GOzL*}wtcblPXP~d0S{6ILRzfJgm}-1BZGT*7C@^~ zTyU{x;0=q%AA3|xN-2UclJd=T#l)wpwx}TXk2dr$1}=CZ5GBAV#4oNo*15tREB{u% z#hAv|IhXeR`#1UajCM0lc7<^vzWU+vDRV`XTHZVLKr*sd{^u~bSUwlgGnEUiujJ+6N=8G(6@%? z9ml;~g}#SR>M8Pd@;;6jZHsx&Qpc$<-hXLWw~vKZ+rZtuF6oLhEr(8OKN<7jr^QYD zL?!nXDWPIFJN%Y5d3GMnYcKz`e{;Nj-}PDe8WVx)wj~nB)i#*EYZK9=++&d2+vFl1 z4Ai^bZp~l*`SO2{CLP-2b4G?ILG|xewqm90m49>l{(c*B&EE*TbmQP3ud)M1jKmL0BSGS?~9^_c$BYp&N zm-Pmd@NMF_Z4KPy-Fu>1CHPCH{j|E*8XkF#BI;h6Xi-mVHsxACG)UMIGl z3mIPEo9MWpWK=~&aQT&6kcB&Ze)=DsdK3NF#p;c3vlnm~byz-H@Wizz3Ee}!Wnjjp zpfTPjIc@u{*YoMX`Mw3$ZCKiU#uO7{v(wozc0VVU@9!d>=zSZDzCiX(_1ujLeK~3+ z>hvJOs1#=tU5i3t@RjwR-`YfHB)e^PLCa>oWSz`_ct%zG3;pCfLm@S< zXhu*UgrMW9kxXI5pK=Z@+(7Tpk~e`Vf?*WdkOoTPN4_Kz8j6{!k%kZ|uE=jbh*{(k zL`T8SyJL-i*B&giiG!6ld@7PfdKb59(smX{BB2m~VGTw6Seig=1$ymK%GNM~35gV+ zEfgxs@oe-?p@ZxitX}(28+0U4HBijOMK)D|v zV^A|ATL_jEk`f*Hz{(cMs|7xV~wvF2z>3f|;D%UA1%Z{%^6LQcq?9kJzO5IW9^_+GS4SD2h zEsH!Rte1-TJ!tyc&aijTeLt?t?lYfoQ6wq@QWBaoduRAD0UJx@;8M z3mpOII<_t`T6h}Cv%6I66H_~uxSVP~23kV!dn_Rnag5Wbx7P=CO)B@y1nZd2?Hjz9 zr;_li_@3QU7E&iH`FP934(iKII*$0ax(0@d0cJzm(l2j0+!hHB1av_{JhAFJ?3pJ9 zaTg#-Vd@u>@WXec|8jj4C=Y{#JN3IUXHTE)iKjHQ?+Y06x!K1FF<^jAylPu0Wv@R5w;VJ2OUF$w$yh|-!q|tVe(fZ_b5iU5 z`v>{;mtXqvmLsVC^z_290n3w7kWTP#qfR53yyHsu&~J^gz9Ek|1~ADq?MGk4u#flY zm-sU18&f}_*@ANln3xHV7(n;-voer0L83No0>P@xXfB zLUtR~Ya^OF(2G8qX*+?(T%Q{oU~!GT%x8fw+UtAn;4c$mo1!m;nn7G8D7q|%UY!%N zG2@QjmNO|X^Y2Ps!{WcM%=SD1&F%xL? z#*=>+LDe^$kuM0n*)^o&{2)@Bx6k0c9gR#2Bl5Qi-uh(d7Jcyk-PyZ1)uSE1D(QoR ze`v$7|KY3Jk(^$y5D9`5F+SMYVsW9<(a_^b~G zegUzD;Es`_SFh=(NS-zddZo2BkoJ~(uiAE?VxO~>v_n3^kYvtAdAs9G_%m-G;7OB0 z>Z}a;OaCsfW546F%Xci`z&?o+KpCC#z*_r43LBHE9HF?n42@I-D3)RClubr;&W#H9 z4-fLM|L8kIg<>c~JTr;p7+^Tz9HUhmb=~FhW%g@zW^&MqqjGU&uJ<`Q6|$)NT1N_q z$+bkFy-{Ze;5jmk;-Y?9DZtc0H zkvn0|Ob$huNf0P?#^7!KaEAcI4HQsU88eNB42$7iT;3Ki9fm}E3ad~hX_y|=7{4hi zLZR7It`#2etyX$S7Qxx}LiPG;Ft@v$)@h?lXcxd!vzbu`VbWn7a0^svw6#q$6vGKB zq_rdnW|%e#WsF5xQEdC7%btTs4iXicBxuN5`CzfzOqP|qUp%D*HW=~_)H*hzb3#xR z2E#O_@oKSpN+=0zf(^ zgq0@wIlv@+khPBh&9=2~f}Rth?f4|K{5I&;zarDV3;OifzR$3?RkSL&!nUeMw7Ml0 zY<*Nbg6vz2o%(l2W$n{YZZ13UafTU`)6Wwi`5q@pdvfLS(lq&BW+7fB>pT2bCNLP* zcvpA~ovwkbY*PU-%;~Z?3YZGxjHf2e8}!`gxgGOnF)exXX-r^&MDjEy6kf`W?jlg6 z1Y}k-Y2HND#tSQnx``Xe9MXX;RbGlJ7nzw{;d!T(%zg@{r-f zQU;EFX%{ld76v<#TaW-Zp^YqlgC1IPVq;QDtMO!knMWZMsIt(vp_CVpVN`yXTljnv zS*Y(+2HK7lKb*L(GS0RW2^$qo2oECZ>Sg61UhA@c+^=WMid<&wheu$~zYmpTZ2`=Y z6u<~Nd)jnUVX$pS$d4aC+BZah`Q@k4CpNh|`n~6_pqxDIpN~LbMG1s|JDYWUzsUox zSakB!*@zv6=D3=RDZG#0sPEZiRPx^Oz@o^a2ZPzbsh!88uA}>i+r%!@VOx>U_OyK$ zfTT(axCt&h@w5kAJEJ|;mA3691pA_G2h>TnAMYo7!5L5(U+jCfUE6`HpsdZ@_E3EP ztOK}2QKAU4b)O(ICPD{Tq4R_+jvrGO(*zTsAqmC!l7gT>74KX?6_drHZpj z&~O6MO)BuDn7?Q8$tM|pI^;EUFwt#refWU$$WOm~zu)rw52|0MVq_UzXkjBmKA6k# zo>UR&n&)fS^engl$>n4*(K2?|E7lLVYtKeKZRU9nMFU`p#Nw>(YAySLgO})jjac}Z zF2AlYCK+9a+My~IG^_3RdRSts`Iu0~k<2~cm_r#S7)bP^d%FW>j2)zgP&A50eGQ2j zXub)L#dPpM^3|Xl>4r`C@zaqx3mvB+^wx~Z2%??2q73Y2JZn3av4KZsKP_TU>cOXf zhdi4*v@C2qUm4RDe1$ca_=dW(ijKi-geqOGqpAR3K%l=_eXrLR&o>c4=}x=_OD_`f z(smfN6d5AAajmoVy^W%$O3mfDO{Un5iyZuWtK-W)FpQ0=lS8a$j?9-2sB>$;qqG*q z=lE`YDHY^npXUEd|2A}>P{1)H(hcv8y5Yv^FtImd^Y0e*G+e!AP&*Rn&@w|k(9o@}XD$efcGbj5nMNs5D6o|LA4>+w^ZoABYYcW7Pzv*}eQGfdRH~Hn~ ze;fgzck=T1*ixU9p!erdI`%Aoef>kee*dHC!Tr1YoDdVxbIT|FpDt`J+10^d2V0RE z)X#C8C)>GmfBn4(Zrb==rshHopX>Yt*!9MA-BQsIVqpauPg)+nVga& zE-2U!u8tNICO-xKhu&A=Lpq!kLk;xBAm{NycX#jGWN6Dgz5&xGa(l=6JPP;uxle@p zB(fs-4&Ej3ZtyiQq1wr&xUMV(6)DNpfFLcssZXXmc6mLqq`;7~*=-C?Oe8#WbudO2 z4E&A!&X!3|XoyT@VlY6fAtU~RC0UULgNM}SFB9Do`IZyFuII)RZ781w^I6;|ON+V( z^T3zer~==;ZHD|o_kED(m>>BSh`GL9)lCsa1VmO zyw@VzZ2M>p$2XD0El;V%Mr0-%^#b{(zRJXTQZh(mRE116l}z`U$Fjgs{gil>t-tpm z4h14aDP7hVWnr`DgSHl_dc!)D^2@S2jlr4O&4F9$Ij*{Qya1ha2oodS?EED!8ANl* zkcLdP!1g~eeRDaI+718ZcIJgD`_S{+!d}WEpoN_$4;!>_wub?JlWC9I-~@z`lA@2N z+UDQDz+9k^eTYoUcBforVVg`_t0l?;7T5MDm+1v;g4>@n#vjR@gtAUt6+$a#{RQfi zKl9xlNuQYry95=EcN7FsNz4+t8h={l+mgG~FKrWCbrd^X0M${zW+UjGsRb9!wWrpP zul@1kyZrg59DU)>TS0|J!?g&;QySTpG`4yKT6Tb!r~Z>J=_d*RX-+*Y=w!DcnH2P@EqVFh5}<@idr4gV|j0C#=sE zK-#|}%ukiXusMO-kl9Z1AQr4XMU>x?r(uv-hpA8FAgqhJk7iXME5K=uwPOnvNP>==ZaNmC}ZFN=M`Eb!8*7NKvaZIs?(YG1g1uQcmaWBP^ZRYye1F#_y!pDBcp!uAH5 zqK?P-CmXhl%cxQvueo(A=d0LYo`|GCNmdC3`>9Mhae{Qq>*bTWb@xalH7*Be(BhI& z##%9$cCKCWS~)8>TDKHKj{xhUX$+oIm&f&3g-lz)GkUuY8?F#reqON38=V*YdM#i|*DIXGGShUlm&s)0#Nob|;;ZJSgFvm&x|V$P4-i=oqVJ#Tf%!CCt|?5ghgh|8*$l~4G9{PVj6ryV{& z9}`{g<(HrST|R&Qwc+;5c`UA3-}!k4h#tSmU*FE%px@dqLEovT#jtH)B?iMh_!^Aw zjOd6}4jesy$A}0@gwBjK;D^%Yg{ZmR8by;ESHq|F9XxIDw(jI1tH5HCFq3+ZY~kDB$ni4$qfcKN9!d z!*PE%FsawIZ!kKKW_oFppy!TIKk60@-q5sK#p>V@0_qM%5D>FrGyS+02aBBG47!fJ z6x_=ISWnMK@#?6rAwCR1>ebsg=(Xn#k6x_CCL^?QbKfxq>V)R=Dx$RKLouQaN3b*@ z9Jn@wpoxVW zC=K~OgbvVyl_1e4>%y1`y)aIovXmn{xtL?SByJf-o8Hh4J?uzz&{wQEFZ7> zk=-h#`3I?NH=ImUsIX$cKv`D4;vZMYXSp300&hl13cf$o9HFchBT&yFHwEA4!B`!c z@rYg%Y^vT~h*LZ08`oKKY$l=oqi#k!KC=)j^6LFY*C?Mn&0sg=A9WEVHL$h!krZq} zkuikR%t{<3_G!}vNgoLq-$iP%K*#0aK0als;8O))Vz#je&bn^XTcea-zU#*BOo_`T zF{!mzw1JNv`#U53wh0$dI2J)+a|*#u?hXP!)I>IR-bFxhQ6;l>fkFX5>DjX%(pEet{Ve2a4`&`f_{7pGkT`^l8^wPFFm2by{=qbm~pFZ{Pz@57j zw((uJy@!8Lw|6L~*`%MLXajA%V&i*eaa@Y~d+%H9T?umHv+qI_m{?NKq5hq*lvGQx z!#}&nEi^Ewlb%P%*b-uifsMj8CKl^>`+ToBneKbGocA0P?jYv$(JJnwHB)hac!P{G z+Es@Z*g^vp{SwEIe3CSB(0~>6Te^OAJQ4=s$z4|yg?*!d8Kqu(*5E0x}>mZt<7^7-Xg{#Gn%E#2jTaUg15Y7nhS{nqUsck0#hDoW~P5>6r+>!o11il~Dj|-gmP0U2MDNqAFK_z#-ct z`iqkNac@7{WShbER60zlT zR1<@ARrinwTc&t&Av{TnpT!0}WxBx!XOHAls3dvLS>OKGidup!~ z7gl9Y23s}!uFe)r_&8k%$T?0l^1>j)BoZwTOK{Pk)hqB2i9*;gfCGHkoRpRDjh8JSfQsuv`Bu5-o+WfX zE(+H5D}D3B1z9vOYLB_CsVg_NCs+r`RYh;`l9QveW$IdKph%tdb#yXj^+Lb|6mffu zHyUcuH)oh&fT-6`c(6G1iw3V^fEjb$LQ zckGK>2th1Ng;eFX9q}#}E3|ZB$ChtY*lf&k420pBNuA4F-Q#JusG}8qg<4pugikP? zgRh5o{aD;jAAXYO^IISG+$TKG556A*fv?~GY~Kfcd3ii0$ND!zjeGyIH>z?9eoVLz zGZw`r3Dwd&ZQnR~KJ?+~@yDS;&x7p^DkRh%HvUfKqVgE35k4~(VYG)QX)PNGEGBd- zC#&b9Qs&1ct4xOZhHHg+aA-!<(;x#jKUXgKonUdo5=0nVy&9wqQVkn$+i3srB&Y~? zK2vk+rj#MQsGEmFS9X`LsNi(r`1FT;0s z?HSk(nGps3%nV?Am>l|hIf#&~woa`+(J@b_i#Cy*bQ7_}w9@vz=xF$#I zl6_y5X#olbu0sric$(4(eff@+A{^}fk*R62pb&Sk$!9}02$@Yka z3M6dMzukQcg?naN=>zQz$9O9%5ymn@3Rn}69~6uWOp;z9FR2sw$%Ki8i3Ad^d=nFr(>U{cuU?+G zIQnz-Tbu2f2>G=**4ZXr!!C!t`vgTC)4i&s0%t@>sGPfV0pRx^EzhTqpV}gu7kde$ zXjkZ>1+Cy=m*m+JzuVhA7yCG`>iS9b+moY_M!}{#Y24wNWg6iFYT&4Bjqh`FLRVzu z-I2BtZHpc6CIICr3)3K)>T1I?bY1BAY(S2+Z&Bd_#-wYc06He7I=eQSWdsIcwJ(l~ zWA~Y2<-+x@n8aDMi+pRJS;`Z%U(P!(@Rc=<;_Lfg=wku%F=+`o zme=5U=j^>W10EFpr?X>o0pPx4@*tHa(`4fVp9|s6VgwWvh^N^2zp{csF5l%2x#9IJ zp{UYD`66rs!_yV)G2&-!GqP?VH0{Q`PVb5TAy>j!ly&^Zd^$J$EygYtsq(Jt^g8TZ z4BD@z1A88M@^NUE%=+T~M1zI25m!pU&nZ}Gg_cg_Rg&gZZX=cXGKJ1Gr>10dnBi^c zld8-UQ?}HsC5IC}DyO+nP#OzY6N)BupC+X)Ow?}R@Kn5N!DCpIEW+w+*k(p@d;L=W zIfOB7urs=&x+oYdEZ30KSt)g)*WgFE7oMNP!GzAr$_|8i%A10Zc~zf(>q?*PJ%;jL z3Ng*O1;MPGX?{`7uheyIU+2!y)I*}tSKoDwt;RuSKm{k5MB|%~Vz#GR8M2u{Gnv`F z7JQ~N%CK(owW1SPm4X*~H~V65H@)3BU^NSt7|>H0sw9N)(H5k1QEJldDHl{1l&;>F zlv=d~`LhdtR%Wr35SJC{Hkmt%ixn#Z58rN2iUGJ^c~bFnTP(aDE7|^DDWU1}(*wlHhCp{w%JWfeFn8 zp#m$;rjQoutVzWEzS>#*wkuZmRFFU>%RmjSJMqToUC@G?u%B#HVT9DEyIkm{LaF=s z0Qculzsk=)|5M)GJ@gM?OAqFr|DCI-|NQc=V>0yjCZfChd%0W@>t!rt$-x@rHSWYi z@ve}a%Pm%_89bl2zykV%9_MbPp_}FbxhyLK=|!I~Xex=9IFZuYWa~QtXjg!(>)CF{ zyUnY*Kt;x9W%(KCn^@sj0%u}ZH^`%xol6-xDBp9RLGru%ekATG{}uo`f`Dgd`rJu; z2Aa{_ z)(bseFXvjf#6!k|_Kjn=GxQ%}Q%NsqNBgrh z(qsmYmJ2IVXGh_%fho}VpkBze~-zV60Eh%6BFwyV8=@3oXLH&1MYSel*J$r0dbO{Evy1~?ZRcs=nRXW-?3sjux`EznF zLiDPM7nT&UPT61SN%~@~9rUkOREz(r#>jH;mv@H`efsevU-qx^@$<*t|Jk3T25s@f zG8k@?zYN<`XcKeW+}kHA+5$yH^`fIKPa3l93p@4l-4@W><%ue}Pp5x3R40)M@vC`~ z3Dq$f@Qp~(hsFt0vzWK@isK}qUppXed_T3(hEtEE_zD=l;W~-5A&^W=T7rxf@hLIQ zTgfLCedq6{Dl2hSSX2C~j)VSE*^!O5LTgQoOPhDbOxPz)^hY9H$zNul%ed^sif$2b zWL?E}TjI$myIE2SvGgp&nO$ z`?K2TeS2Ie`Sd;!HA87=H6g|Gox5BG)XaIR#73I1fT3cFc}qE&TZ@vejsM5Kz~FS=dT(TvOBLjG3se5=7Cn=selRGa&_TIeQE;G(HNUU zU|Ws74AI>Yb7w$Tzy};7$@GoM`NER`){}vyjb70$p=5|BqY>O*#LH8uqh^Q>j(X=6^xTr{o^dux-0#M*ICE&)_3fOrFrFK))t%SIi)(;-Nj(@ zICR)cH#3#x1U9s%Qn{`V%H|cXnLk{v+|%V)OhIBStCgi#EvWzf`1Ai{xbipT28oa_ z6`^7U(?;7_=wp9|^vA=pO5Z3bmle$_!KI+AQ=LEz3l=Oi7cMg!FJh9>7c z(G;R@RW~tkY*<>C8?o-4M5pEDOOaP8-;W;j3gBuz8+5CPvP~dDGR2d7#A0V%M|{d$jmMWa=0hI;f&&T;8gz(L&X(w19=lje1;98S`Y5W&6S4 zDfBUdDSY2MD9%Kt52hlZU;{Ke?OXw)!*)|xnMNmaRW=D(22Trg8}oLxAan{78}OFI z1i8R}dR>jmO!t0D?pwm@*L>>qQt|@!kocjBIkn7%-bANI;%>Wo7W_6RV6be`c%u zo7FFH&67XTdNXh$Cp6ITrSP5zva*1ruUsD4LzSVGTs>j>wX|WTEP~OV=rft;7Zd_j z$=@Kobn^;jc_Z0ewn&^FV3iL2NLr>vE|Jt2*7aJq>ncT7cB4vajS3lBkO=nEY~m@Y zCm7^QBa$W<#718?3qnOMCID2jFKL5+(vA^?^qqJ(@k97c_X9g6S9{~cTL#r7FfGkO zL8MjVQ7`%cI4fhQx{|&_hc5wq7%Jx2kun4^p_17R6jYt1LHdbxlMIj$T(kdBg7&p zOhedJ%-hG>r7h8uRr_)r=)X$&BN!(E^_ulEURaeo{*>CMf6~CxCPp+SdU5VUuup94 z1yqIlbs;VCo1LGtuX%reFCRaC>__GveV~`NNX+DF;$yUEl;^mR-}OqlICfT@%P5B- zOPw#_K5Jk>=u`%eyrdWxf&4|#GGy3~01hQ?k49m9V(sMmI~Wg}2wkz1%oN~)`WDV4 z(Lmr^pd+2;1oYGuYXllWJZIqbic>luH}fALc|!Ft-MCUy@- zqdlXps1L(_MsZN5xo(-=vTXIXS>uT*>uH;KP%yiKQ9|t^BsW99I%LQe0{wddoQ(iI z`h!}t*$z*;efRF+u-nha+m}JdL*0B@6XDEtvkna3C+94}-7DLd3Vhai z1Y?!j_hK&7;W%zpSr;A!cp{yFOfj~!mBtajR-Lj4FT$Mk3xsAsd!dJ(dV)!XjA$PL zMGSV;4)di=s+ph%XNjLxNc#!i+ z)V?yXRB)jsc@1no!bTD5DdUK2*z$&e-`T#0kukj(U z%JW?yy56<8;qSlyOZJx+nHD*=Y7^O7;zDQLX78gX z6-3erP-2C~5Mie28wk*k zO0s2D^oF2N(L`>o&?6D3UbYbsE2eiNEijks-6aP9d0zn??9K=AK}TtamCI;-Rr@Ip z5{$QtlWhXia%UK{NY`B)=QJm0YVarZ~4lBH1P|n;`An+VY|~+ zq@DPNm)F&fzXr9{Q5SA9EA&Axklv^W1!M(8;yFfQ+Cc#w__l+39I5sG!)N*B=YPuk z_n+kD>G>EmJ|7cccjIWPUA{klmA}56$KpOUN9Q=%v=BO57!M%swKK>(X06kKgVVF2 z<1mc-Vc3PH zrCeMr0BJ1=Em)U2lIc2PQC~x!Wsx9CNPzAc2q&&a4Z#ibWx$-4l=)tyhV=~7EeD(a zKI>}0Uv0nDGb(YAx#}u~JsSIysI8@b+k&4IZ=hA$$I$tn-oL}y8b*}()FRzLFsefY zSQO;m1qps9@5O|DC<3Vg10FENB=}x(g2^!{P9*@NWD#HJQ$SKV^8~Og)x1o0(p^Og z33;b*b;!zO%6|3*#_RL3f9q1+#!LGd*$NQz;-E8d2B|lyu90xi)ErNvCvB{2y-A(_ zUT0pwmiF#?iMw2#zy3aHB1_JrmmPT{t&#o3Un@Ll6>?aFL|Y&^m_$(O3yZLU@I)kD z1rkXU%!5p4(o}oE^zmj^Ij}p|O9EoHDU?%_VaPghJ=>s&v{hB1Xw+mJ zkBquP@gaYzE8B5kAjqbu0M*lZj8~|0EtWuy7LEV|U7(J2jo2E6D3p{N# zN3dm?g*gYnw@T2_GRb8!H>d_8MKYOUA9iCAuZc`RrL(?pDx}R?*+iu9 zVc-+7z|~`9UdvrXOo?HWTs&6muy_O$7i3okrZO|Wym(~5u}A~!5@Cr94S-)jhXTkV z{K}Foz>e;axGw&Kb}B+2jKUJcdE(M}8|ds!5qnHxbll zmGD{BuA>0FROB^%2o9{+6bs&_2?b2Y z_KyT_kLiI_`?=<+tf(zq_!B;%P11~2_-Pou%l&C<<;b8=mh0S0WToxB_66wSJMsg)p0 z1hg0=oENUUNTw+Dp{6%VcawKvBU!C3uvLi_=LLZB)-}>r=It^$+5|XFVGi;2)VZXW zvn*&LRFDSTYjFf7>4*Y6xGaWmqZ(zApzWpo%`h)IV330WbzSgX?k^?1zzba_0T7E9 zYrMeKBUazW;C0n;m?>e=%cK~vs%%yDRenJT=`wG=M5PZVOZt^}!vZM?cZ42a`tOgQ zem*8b{~>qVJ9&P2Zgt-_*N9#I`uh73^!cmp2F(F0((ixL&iG{nMi{U|U$Tk2-t?e@ zjo+Lx>{(?pF-3l~;zzE&?rLIzAvuLO>r3FD!PATF#}xc==5YD0i14K8Z1%M%dZTL} zoSvt1%oE=V!a@BQ`aPa|F!|i=yWQQ(yK^__`EAhAey#Y?7B4TmJUuW)&QcwN}V&2Z!2A)N* z$fT)|zNb@`1B%{~yKb5~dFo8ITA>Z^F&|ELI4%qG6-}}VY$(?%9-};!t(($Y3D`^l zN0DiA83GzO-8>`Tie1*4#Al&Kqxhu&>W%?mpZG}rcdB7+nVjg*ifzUklYx1Gg0-n# z9A#uf-$NC(z_|@oEwU7BODr>TNu9(-JxqM+c3_0Zz<*@X03C#wo^6->{<%QF$pt^; zq$sgoRzEFEvrKgvI5N zpZ8~(R|%SM!Igl&$Q?Mjz(@>x?^+g^rH=PDamClfzL1fOpp|)3364=FEG7Mcg^(dE zPlpR51p;6fmo5syYZ0l=i5OWk50?7C#vH@bDmacm11|ZPy@to6>cwdfF+jf(%l$Fw5%lGUm@x zFG*%1ayhXSWpG;8UuqA{vT@RxZ7}Yc1;e za7VD!k9(@{!t0^0=kML-Ni_F?IHn8aDe5C(Qiv~E7o>-{k8;GaH479BRIY0c^;ZE{ z*3_Sq;Es4!_`kU3Vp%`KPKDqXQsj}f_zYVzRaVOznGR0F1y0G4)3LUY;isQ|Y8m=T zH&*Hi_*BLo6xJp6twP`$a!j#UYFXiLA_P>?udHxnw_4>!n@w&>=^t6N<&~>Q{h9N! zi!#78#H5kdSVom!sr>39nI_Q{KjGJ5j5tfl^=l;zr6*WFjMZgds_^A0ZNYqkL*mEi zXM|+TYU<>3MY6OVa5TN2-nqdF7F*<{vIt2OpE3ih)cyow8}Y$Pn$L^9PZccst2e}r zjX1T_Q~>j#f;4Omy;iZJ>Rgq+lEVl*O28hxLfhJGS3ysa55`g_&0;oMz{9Vs)I+f8 zC{Hh&`!~wPNXotTj0)yjty7T~ryeqN?K3F>yq?d?2md=;dUB&EACbBLeTySwS_xke z>nY`BQ-=mjzxb_OK!A~AQ+&-W^u|03Uo4f?e8&0v?ige~KOb@9KmY2V45PP&qROzd z6&8UG(T2;6DWe`O7mT&!mW3@ZBMVHdJ$Hs?8fJV+rrw*xSF{%3fbC#c@AQi0>q}EZ zGxdz?7Ys3M^J{3z__=3imI*=e#h|NuRnAGx=r>lwgSR9wU(;k73?5WwfWVyC!!15S zSb6Fzrb+$0zflc)Ln2mSs}IQmTx5iMo%F=s%-_NZt@10TwadJjTyG|+Azcrg2T*GU zwpxh}9O0m&SCZ(Yh1I6SX%(Vpuj_H9<@UBwQoF^Il%hlAiH&&nphWK40Y=ZC=a_zfX_KGlvACZ; z{~~9rpF2WN=e2EpGW0wa_pdL19RGel0zJM9!vq~X1$1ckXh;L9@9d_3E?P4>Tm6`Q z6_=_Fhv>d8YFs*Eys9_@nKAiY0>9V#$${Vuo-8m%K*Ywl+Rev`a;2>i-b?B)#k!IW zA$E0TJUTtfV4xEAt=AH{0?k?A54xP5X%#l+g68WTk; zLvwC%1`ACAZ42%*uz7uj|3K!3-SBZOwsKLC!%;ErvAJaJ2r<164R!oYtTonaY+0r(_;2#E#2jbQB@!nfz}O(xjY1IJF(b2% z4umGXjKAxENyqeUZcfGepEtYs0;8B5Jtu*-aeThlmuxfp5E=Bb=38**u7!NNolmZ= zVleD5Hub)Q&=}b8d{CefHg9QGL5qsCAVBHNpnZ}_TBR>Sf{XybNRPorTOf0wvcjYk zybiyK&qT{4KN_=vzj1!KOkR{D**10^);EL_5MCG0(A)SUQ7623k%Pps{O1C!&Xf&)tmQfBca55ATlt)18zh2)#a3u20&hUvlB8 zz``iEc@g1b_`H4=?rG9LPXXW7)M2+P=?9I!lD_U<=B?* za}j>(o2ry~l&GCl{ZqKX9T!=q#&3Q^C$lH zzkXDCv;h;Py!qM|#34vYXQOZ~IO~eE&8Kgmj<8rlKz%yZ(#rb9(bTup1 z`En;lI_vdGTDBB*l80lZCCf*-F+ED>(u?5TfBz%*B6Yss%g%@)9LYx z_0J(k3BN4`yDRGR4}cq~`9@M`7q>FRa@4EpH}L(mEWs*|HtU^SBo7R$Z_)neXUnvt z;wY=3+aeXE;+Mg{Ed`zFjW&99>5bR`tF!J- zbY1t0v|PtgEsTluBv@~q?MDe6N`pu-I%bfYifbLXVJh6(bDJd&OW-b!nNby2Egm*C z!+8ALC&RrDUo6iip;YS3$Hco_q*1c<@nqcdq95e{O1&tCJ>iu1)peD%l)k=<^bIJS z?i$7g#o3N`fIr?}Fjl3Y7%-)toH;Be%Gd=d7wQ~I?S^4_r?9;1{?uk-QC^iTpz`RL z+@1ivec4=MJ5lgFK`<8AfkH(Ms-0Y5r@^decy)|5RZt$!qvZ#H@oTFd zxq>_9ai(jpa0Yp*Em}&UE8tkP$K;SF>UNPsrGy`oxZPlwih%YXx7^{d zYdYdtZ=~0J7D3LpDAPjt8i33B<4C0#O~;TsCqgAH&Ze1aohyZ9hBLH83*}Z5dd-Lz zIE2MQlhQP5VFh=7Et@qaf>jnsE8ezo6rX@D0`uHPeBFLBxwbittu^?$hgAV2;5kM`}9m#1@a$KH?n8hZNu$2a-&m3qEV2oj`92iNZ3-t_ou@YWeJ}6c z9h0EPzc#)h+xt>|Ci2vSr{~Axzo$V4+DzD{BKYLb6!o)MFVbo5FL5g^@yxSFdLN{r z51jgnh&kfADHI?>Aq1u>+h_L0K#ouzB7T1jjklWg1bs|G#4?nQ7=3YN<6peiVzX6; zbSAh|#>9N5P-|zaw@rRHDPx7C3h5{nZMlLIsC#BcchG$mR7b2u zb{;a-mKs-5f4p$0RCXl>2jElWN~h=-zwd9{-b=tpvMj{VuqlBB8k$(5H5fJ8yMJ$f zVKX*%Sej9v4q_ux`xjtJ1#O^~q+=QWR{s|hvEvkmN)4X2p?^>3=OqrF+hQ`+v6C>{ zC3b9s0>!rvUFuNZ_6Z9Cdjwl_9K;@=EqqVz)b#rG%xWNSRVqJp+xE~M>|g0h9-x-a z74qbLSd*w6v~@4L>p1Lsmz0~=C$n3c5I0k+Tw;v^hN|TF4`ii6{J71WGCEtpj|O&< zWWHkzurQ&Jx$_^c#$US4Y64rzI0^bf9-PpNcVG~;k1Hb4zQLjiK(H|u6_E%(iaUHp zm^7~bX%(aQQT8Y|FZfLu)-@k&c&> zx^CcmGPeMKD?uV_z6co8JuDaR%mdx@2HpoY&3Xd|~&p<{K zz+9em=T2tzMTn@x2Jo*k%Xd`)UDgM|DeB(dL&ZiiyG5@)F}qBwtBy5uGv}=BWX0mV zFR|dsmQR^gb)qE~{~F~jY)8PB144C?ZuAdlv|v2oQ;)jd6Penaia$(9VL9iGy9J`f zLW{&<8C=%yS67{9`W7<5MLny_ZTRAKq#+q1L5)8$Tg+M`{?4Tr&*~hkUgcX5SgMrF zBV#B{Ru}q=iq{n(sBkbJMI9=Qp-Vn*a8?RR&xG8$&La)dAX!kyjM@lQ!+8a0%b~X#&Wgrr$aK=1YE2*s8=c_UlIEXso14FNQE`jT zF6{xJdfH`SEWsjR86xR7OFL8lBM_ao3~zNW8*7{uSy9|0Ua*m0_vq# zv@Y}j$myl+;HpKL#b}o-$WrFYPLWbiBEM<_Z>fP*C7`CNYrfnh&r#s<{=>(g<(JR@ zY`XxTUwm?FYr8>DnSA~Jr~LKxkGAUm+$rh-o8sDpBUAWZ2OL}2TTfLQitNTX*y8XF ztEF)V$x6vG5K!l;VJ$Rx zGB0(Vvw0j@fI^#E$yg5J`m4zt#pug>*^{Y z$bPoT*RGJyP3*xoPyJB8kA}Ar3-VykELABT7MfUw{$A)guwgg)Nh^OGq)_O!f1o^! zqc-+nU@2pz+m$V>dY$$UQ33_Ms2EwJE#B6kDdJVd8^AXM!|j1GChocBNm!UzlQ76q zI4^?`#H+9?#^;>yS5SAuVi#5}2oTdUFfFVn6KzO8c+Sb(%)9K0Dm0C! z-%EdPgGEE*M`+3=n87y(p&C0?2{EzD$D&^h-_a9qTd5d)`fh+#dtIuusq#Q$z0T6cbsc_liKv@Fy`mjmKPaAaj+W-#CSiN$+LS2Rs!D z7lTeRbo~UH3scAwAf%MLx|GTCJDq(CDCN{8ySQ?kwDQw(lZXKy(V zow#1b&j+aT)i%C%}a$xrjx+7Cok~8a*2!8)f5q5@WRN}>mfVm6|IuJo2rw9ud zB5T!x-zLBUTMtB*=y)hM=60;zIRN}se*XOL2d(p1+^2CYZqNQ=FY@K**|HPvip<6(JXh=m*xOe1g| zmGAm}cYp2%eJ^Kl?Bu8I(hxr;`_PAWB<`cU?0v#~6CNzY%4h)_uwuBuj)p3sJzy4H zjvPX%#qGyiW_c8^CL03nX5JPPJx|Y=VsK-CmA$!e1-c@a83368MT)K(>0=y$h5SuSoIkoTPlZYJ>&`Uas3Lc9yTw9UM(*wU{Hj6091U(7YiFx$ZrwI1fM2W z*%mYbDXQsqrNyyMlRN^GuNbw&s#%(Q=&^*EOIT>6M<#{sQyEW4d{DpM4gw2!Y^r|f zKM+ch+eEmgMYToSB+ano+2xr&Aq^$*VcbKYp4!l5FodijNT?jNVaH#I0CL~$b8xX4 zVYEPiHOeyqR2Sj}k6AN#??-SdOzI2RVpdr_OZq+)5lv+F>?w7qL%tj`5#U!w+bX}8 zaXclKVc7$8oUvhp?u*E78}D1z$8(y|Nd`3WyF0&7hFI1;WH)#mZLh(5(hZu>zt4be zsW&QU+}rYnD)b!&ww}fAhPo=LyC9D!6L2JV__;xXJfc)$41Q_iAhJBc;$=v-Si6$X zi~0z#=(34&oD;T15w`F2A*p=5tbrMh&rlwfYl(%PJ55VNA9r(mx1;ZA$WF=*nzg=* zz8Zm)PuR^D;*{5I8Xp7=1X8p~6bRSTM*nGld1=qjg=X8(8|pJl>R^@&I#u4O6gwGD z`&g<`JLK1&wXXQS18joU1dW&RGHr_b%CPVw8Z>xtl$IsVik0{Y+862-)LX?*HR>51 zLnNSflu5R-(ml8F%S>3<`L3MB-?kMb{eQRlVTa;G|3zE-z_g)M`Ci;Qy9jA zr>giSG$|{6k;J(O#_-+XDE+v%cV{*i{uc}gmks!ijDgLiOJp61Ngt#Mg@Cq&&xy9M zGDbwdY|y^Y7IfNzh^%&`7*y~)Cim&-MIPQA;ZA!Ilz?Ib68;I7DHx*?!rW=iuH}#H z>lAfrbsaXKHD5k3L!zj+s7M7fu>H+yRmh$uoCV*{eLbmEruvBC3+NX}ErU%O$N&8w zg*H{eZzk4$Qg+#`FoKGJ%n8%tVki9dLS_Vla*fl@^;)MTpIT0Cb6ZGPG3&Tg93lO1 z9-L-kQKoje7QZ->Widn7LafSZMIc;vYkJ7bB@&Yk3iZt~m*rwi$1+1=Oo(*WfTH7^ z-ry9OLON8G6YYYT^rj_IB4aSFFjgFiwwH9M3eTk2=U`nI-PA;7xvf|0*kuayCa~U_A4_ zUFtMAai(F3^`MqQg{cU}cMQq^E(V=qzwLKU!Zup8GZY3X8dRVpd`7}5N?Dl}2KuU0 zbBzb6nqaL*O7nV50hkU65BsAn_r z)G45%T)h9@s5phravvC0EBM(|U}-WEM>DPX$P9;>n# zJfp9i6h@P;+UW?zc1Kf1q@=GFSRf$+{2WH^Q%cObh9WNnrV!eoF8MlVa~1-5d0xu)au20q0l*-wBlBi z6~9V$K=rgjM+N)2I0#bWor_UVz{N#-c{vGtSkJ1d8R%vml@Ppv;^5)|#?v~9Wbxc_ z%;lh{U!!bNgQyQo2DEfr=#;;o#slpcO#DvQO5Ycc%>a*BCsY_`Aq(>|{%ipB=rb`N zwqe%06X;E2UVnix^QyhMv2?O;A^O<#{T3gX5Lk09Ua{G36Wa(}o}ZscwQ>EE znWm^rP+@aAlPj%J)@P~4TT83T2^d&YU_0Qw*Jls)h{jV>;P#@;6qeZrj^w0Q)Y-?4 zHosSyF_`#Q*I0k=M&K-<-eoy)kHR(qzYlq>TK)iCK%&3+rMR#Pi+0~@VUIKxMsZCT zlJ+jpF0SLaxZiDn@xd1Qa}l^NY2-$W8sMq7540dr!^If6c%}&?-q*<+ZUPrSwbY4gJkMCdtu!+$?t5Jq1Td+lvmz74H(3U} zlj)Azab5G*ui3w?7r^#1TvwIySX4GhWcxzy`0LdVEaf^-UuT(FLE+!@P2n)QB`2e=Tznvn9;hRYTgUQ`Y~DrhDKE9M;-eAN6Tc<{(37H-+E5Z2S8)KbZF@!$FAk8@Y3Cn48iOHWPzkVusK@aTt%dMxK% zjO#F)uY$tp63=*NXeD4wEN`zGZhhJGW06~hoiG{<^^;gp!m$I;8&IA=i%_l%C>D*x z9n6ahg)BopAuPQH3Ii^exPn?xbz%+lQ_Fa}TS`SKzm@@6k(kaM0h=uCatai3>7}Ze zOwFGTdcjw{qV6RPX#k5-CI<%tor@&nQCEr)-zudTb+3HI<_PV{+`YdolioSS2V6!B zMq1JyaMBfRwBwBafqodIhjuf7FiR48!7D$IrBZ6uA;Gj&(}X4;oDUsb;9#UAE;M<1 z4QiD|aRhw|I3tj|FDW1~+*dHs%9rXr)`K;x(D1N;5m=XmK&Z|vw9smDuOo0CK z)4$98-A8$Te(w1W$JK(8$A4dc{3Tz${dv%NIVQ+-9Jl0J3Rpw!$;eYzo^c0H1Ti(A za$Rvp3J$n5p7m4_P^$Q7(4IplGM`M7CWhP?1kWTbGtyX5U@bC_Ad*~Q3ZZNNckn~u zE%Ul4%hHuqmC1s<>TiJnXb(1SvK^D4=aIN~+g${-yZkzSohzmvpMD(wKDI*I(a9Dq z2!#S~URKb-RqL*!-lpt>NDsVfgtshj6hAttSXr)CV^QDL{gkP(a z0%`;LECruLgoIM6OSmG7GL;m869IBz&Jn}1; z)U=dLOnOD)YO5Ubt;NfrdDZ$@E6-?AjN4a#(OFZ$Re9)Mt;)meMY@y;5gQ|~*;RuK zax8np8|8XaYt@QQ&6!?$Ffz%_s(oe^Ax@`+)f)6U7fFclO`yF;$|2OMxqzfl_UppLdn*a8kf2w62y^O&Fw3{y@YRbDSn z$=zi#`_sX*g225ElPx38&wqD;_8zkGI=es8iiLG>ZzK4mx>6KUf(XLf;GmhHfxbgO zTXT|iscmiyzB_IS7;sh0bqjZXt(cNgty2nG`7z1wZb_J(VRXSfz=QbH%SLe-@X8Yd zR%EeB+O>&Z`JCVn_!klMZ)ujnczmxua7~lkYOz$G&`_z@G^SIXe3;gB=3&Of2vx4n zRc)zk;l2&0wM-+L{hQIB4tZJ9s?_7JO^>HkiK#O5+Dcwy9-%)F?NBJEEORFk7Hq(^ znU%6MCq*sW-rL*JHO3Wg=T&|_{#c4f6W2#&O@SYoswwG1Ls-;D4HGx79ca1%A>)u5 z_G|HBQb;|5)2qBs)XQj^9?BTWFz= zx0xkBNng^3szMwDR0w>=WPeud<)Qg&{rmUrH{pQmR^H5H zsBVn87}x1I=9!iGHIX&`NY-0L^j6t$XBY2dG`kQRPrxi#(D@C;M;sTh&*7qRD&*vD^>;)v za2-BKmvsX;l!-fZIspC}?--1TLiqZHyy6{l0K5Z7rF#nH@D7m$_fx*ik4{1-7FKjF zi4kE7kf-BKtfC70Ye} zPTu*Xixo#^R7Y?3)!Cbd9f}D2v@9kLJlknZ$R+(^Nz%8r_h1Y~r zlKey<)ooOTnsVYl>W*b_;77^EmDtRkktR5ary^4EI)fPkfyAmD80gk$WWN=sv5j(Y zGAC4Y1ST{n4u07lNTW$H0+A$lm18~hf`5hY2;Is3!~3>F_zYOZQGxC?j{B!$67=!u zyVSsWFE#_Iz!H>{^4a{zMKK7}LJ$ilEuamA_#ZMFz4gRV&K?5|P{MevQdVbYjSb{m z^N)g)3-Ads=_*`SAhYIg3EgHpvXsuu@04&<0?kOAb@VmNdvd_-NL6(GBKA@zqi?5Z zMWv|mlqQD;&sGzS_JWdR`7KYA^!L#=2>{bhCa+Ba32=AQrNCEmgA9*!1`MgByJqDY z&(gLlDVsEHvidv(w-@;_*qJ~PnbFiPV8=xY4%=dHM@WtSOlkoI$GNqW{hmB^H>)Mlm)6p+Bo(Got}$Jy}gQj9dkk` zMF--jQA3;oN@fut(x|h|IvVm+kfdgFhO7{Gq{v0j*kbH;k zfDPs;=p^Z=RO(AIxalSf_f0(cxFE+6y`aE->^DysDm;;&AQBvI+eXFi17j(urb0*l z0)zNZR#&-~q*MEnXezlm(dq(!Q=lesH|%+g(*u`{>ehd2V*6;P@IN}Zb@DMquy*RZ#H=Yl*4_A(XXM9Dp(rzO^t;D(^rr5kicDjEK6* z=`zh&xM9G|WK7J5Efx#Smt_&z%O%zJM~+gCCBEp`F5u^g%nDD_$k#f@JZAkX?a7L{&Q|aO z>B@YslfBt0S={KVu?v6o)@g(s9LH6tkGP^!F;R<(iY?}pq8~NNt7HRkxz8Epp}r%9 zP+PL3E11C&Wy%ocR&dSa?1zyF)Hy5tP?P(+`xak*{QiB6e{EtV>NaE)C%wY>nAExh zzj*vhrQ(msB*?d1RE|Mez^7wQJtjAuvM$PY)v==6N^hlhh7jr4?1M;d1s;l4fXyc7 zg{j>*7m9)9M9~&}DZHXK)k4Z<>9ZlLQ-pk05l##YRw^2!;VNoyFaf-cz=SQh0($G~ zmU*!Q5rtLUl)_NkC0nm(8P(^iNCtPtqM;9!P6W$12Tr)?TpJOl7Pm3z!=x*gi!nyf zJYMG$11@5M#3bHT2iQf5lGMV+x;DJB8zxm9V2B=aCE31&+F%HSF&`{*urQnW*2=Mo zVYslpf@hJ^-@8;~FcF&_A9WZ?P#sKb$rF_?6kH8FuX>`16$mw`yG(EBuN9Eqz@9MB zsHNg92(=#ry?goP=YPoOPru2_^B%#NmgV^GdH*4QefdLvJbfGA2i35-)I+Z@3T9;p zR)SE~1M`Ku1be+#lN%zs7$ik!reFu31R&(BBOoJH{UMzSMcQ zo5+NAnE`Telu;jD6hL_4b%*j#ecXD8JiiM zT&MlUC$M`!1$pO5$X=Jkm1%dDWMzCJ;G(9IJFajtxaz0N+kGhp`fL5Tt|)3+j6?aZ zDNJ7PL^nwQ_(rvc~zIOabc*$mkT1Fen;Xy1MA30Z9xXAKYH;sYjwz zmGC1fMX(IS%V3rzRw2;dLC4%CtURY( zyHRs4x0Prl&{BJapaUD71;-PUQJOF8h=pQMjrP>CpX$KU$JwJ+BN{e=nIsz3YLx+Y98FLdGxVi@b7QyZvo z@+E&JQ`hah-MtSSvd9VMYl`~X5dD?>gG%Xxrxi>Tg*&=6$B@}5*F@%VfX$1dT-G{O zMk7zDRPuv&p^t(v*0BUgl3$V3xj;I{QU(0-c5&Gl+b!{=AQuy`D+`_imj@YxglXT5 zNIapPHs`vi%*FCI^%?6J2OmSG7*hovi{SW&V`c&xu|%cC6HH4Ur%nE!$5{XT(@*XB zZlGV>Y`~Vn?|e_VR}5CCbQc%Y^YS(FgU@yG>;f}iDdzej9a)rdrM8kf%SmnV3}~+j zUE?zesQag30OAdSexduD%CId8T+4curLtFHhj^rhSO9lsxN%)sW?{fqW!{jt>Re4@ zpCsf1WYTrVtH4NIaQ(NGaqW{X`>>f{MT*P6S!zk9iyO0Bswt#=_IjazgT0$n07|EF zE1slLw5Af&)ahEO-22#ikGl-J;W;Ro{~mMk0q?@+w3 zpX%7kbEcPXCI@H9(~5#tzAP!JAg{_GLWDGe~LbR45g#1B4kC?zp zu2=j*iSgIC7T1+#cXP+g_8EiusaKR=&XTFm!RuxD-{_5=!I3NgvFid@t$SbnriRC z*Y^*f+OfC~_n+kXsUQE-cDrnyzpvl_k}qF>Kc2tHb~rLrhQ@=#%joSGIIgJ;!zS^e zz(iF%5)UNAV0}v(b>N;mc1Ecn9Ku%g3o zpzYhB(q)o5TP9(=gqSRl#D`609g>t)B!zl7T*V|s$WX*e0LGU1D3ZIRazZqVwSptM z)F0$BvisyJysvqXY*rJ4qi7eJa4kCZBQU_{nH2BmnneAC{HLyfGw;ekNLQouQ6I-) z!*?R3JyLS>_@+v&@WPyoza|1J-y=Y;a%22sr9M_!i+e>Mu8cb-7d$HLk_q|nqJ_S~ zF?Uj^q9{{tIMG(9O%kujMS~7#@k1Ht zPL$-nr#VE!1YFu!@Ad&tC%^ICGeqtzPqBPiTtm--zwnX9eMJ$jXO!rtO4!szF>KtB zx&H=kEFWb#?h9g?VB|0Q6sD~#S(hP=nlTR}n(J-YxY|ES+q^wIyWdg+QbthJ9KWSe;EMYTm*1n9UtZgNMZ z1s3@NhFFvVnv+9XFiy?MWksVMJNN|pdq#CkQqjll+@v%c%`K%8z6INF9J`#_)9*(A zvY%+83;yE}V8YXD9(uJU~l{UcdL(sSe7aB3f2Q3xCcH+;=pCD@Qr`gNOw0s8p|YNmHy8RU>i=8m{RO>CK|G> zwiVOhR5(cqsM91^ZB(OwN+zkndK| z>^#;B;{@p^1#FZTM@gYG$X9~m^2#(y%%_T{-GbVPtYQRtBSQGn)2Hr2TI%T9%&%i~ z0Awz3O#h{%(@}nrQ@pd4t&}oHW7_mam#M>^iXF1TR~@j|)-iHwDz9YUn%J z*A!0`|9WiHv81Xo$1O(x(}d%kmi528>z~{D^5qNnrwjk7d%Y0kpExERfC`0C8T?G? zcfPIkIT-VJ=X8-N-B}J7X=kWd3eT?8O2_|QIjtBS7@wAoFAa(et0VZaa1QiYQOtOp z6)M6c<<^qHy!q2XDNAS0i;X$k&1@DC5HOiDSw%8>&B3Xm5aF1OP0f{H7zno6yfRWI z0DseEv$6vR7xZVqp@G{XuhxJM(4z7RZTz@!CPIP6A6cN__-7@n3UZtWdDWWFrWS|5 z&jLzA6%%wbC~9*#n&tE)CUsCk93lP~Rwcn+!5$3Xg3S)boGfU!4xai8U^d(R`Fln0ot9rpIT ze;@SUjzQkNygZ#dUAFe!$1}}tFY@L4AM*YC7a7r_C?9L1KpZ>$Fh`_nL1NUQ-lq0^gUKKS?e9;TFBH?6JFv^)-6lPzbV5R%Vxh< zh?ds|0m)M2B7K&|n0Y&+O>e0IBauP-aPkb8)~tqqLd|vD=D^*5%redgvu`uT!V$ox zVNxg`l;iDyfHa=*;{&H(gzaFGCq z0F8>w{8-c_V+r04%W%e#AmC_r+<*uViJ*+d9rchf^ zd(F0SIY#6n`d3mgJj?TbE7l*Q9)f)aOa2Y{U0{x2nPlV0KL@wZ$x8F~tA4{d3;oCm zM?8u(O#u3VsuZXa;c)@K5y?J?2p$8PeM_bODK6G95H|Nq1#koPPorL1@ ztRRFnQD5LcnQ)(Bi3=eyunZauBfnA#5)?(;oT;A=oO}QN;g}Hp*!X=peJ;|tR0xp? zVlI-cUlSlN$@PbJsTaZ7O?@5h54eUt7jcp!iW9fO1+C;_#5U(PrmQA&1EGCDR?h`G z_3E`sb|I(Q0@uOwb$-49C7%)~J+g(oblI2C1+CZL;mI9nW8VG<5hkz6RiU*^E|W9t zM0>jbBXf;}nDK2_4X+^9^!GEp>=XO_1?};7xIn4Xym_1b-dDL_^o6)gwo!O-k$z(4 z)fRjOC~l`UOly#&Iz5GPx6LM@h189UV$qjeuAT1XNknqHXq}zg#M5h>Ec>35uh6N? zur0Y=zAmw0PRTJyy>?>;O_@p$eq6-+k>`Ux5o&EB^juJMZf@aIHe~54YF})+G|Xz; z*l_d8a0-E)iPCrwB`vYsvfc{!PWKN#pzGHE8z9%ymBt)pc{|tzj}_o~+c1;~gQ)N}G&oTCdv0{r zHc)%J z%Aw0C&<3iVPEM0wPh>S%ZCsw%1$^Pcpp{Z7`>#~2Z0`sri5Q&GX-&Q*HN?c!C=hS~$a>vwIr<6*`*LF!(F9ur}T*kB#J1;dn}+zWePgU-nmoR|yyu+o(=IkdKP;;eF7Ow1f;KGoK=8Kbv5SX_b=*V4^Mk zjmvCW1i2X71SZPP_#4dxiyegRzwx~H#M_1ZMA9d9+>YZMT3UeS^Z`N*upl;>3)HAg z<2JPg>`NyJ^{5vv5>RjK*}w?Tpv>_uTAS)7T%VPF09R}KSJEqbTOLt98gJS}Z+?pH zE)dM9{KK|wk(!1WWfAureU zuk^ctcs9XMv)boLvp3S${#S_*O_1_z(>#YWbS&u$rSE#E!JINPBR}f1Bv0r=SGq+e z<(LTzEX1gN(YInl3z# zzW^PtBgt*NCts7!V;VnD{R#Q{U#;y~7(iGP(&Hjum{19QwZ*+ACs$Db+`+5By}t`= zF}ajm=IM2e$@Fj$S$aH%_QNsESW@6>GZjZzqRhwAzC_!iqw~nWPoF7%bksiyWE?^KiCqsYsouNaplAV!AhQCE9;84SZ+FO4xge%hK6?<-}T~U=gbXEZZ zekp@HhI*2VbvFmIFVM_e|hkAaYaTO=c#kf~+T0Lj}6fXYf; zl96%0PzD)I5N4!oOjk+%T%((=&Ky@fVkTF=~r-_{@dbZousafzPW7LeKo)9>2(6U;owGEhkF~wu;Oh z2GAJ~2vKlNbl^F+fPh|kVzi0Ch;h@8F*%=ZAR7({E6CR%u%gaPk((Hmj`g5UI)qgjQ6}-LO|B}^IWNQ|L*P)^n0v!_VxuLCq<~WAn1a@}L$}R$Y9%Tu&U5A>qUtl5W2c%c~ zWZTMxS7}#KM=|KY=E9KRYv4$@QwmC};OPri@vvYp(TzS-26_nBQ*Gi1R_9lM-|UW9 z?lg)rkpU@qojQen$eekzLG`{fh`Zf$h0m2`|~N z8Q7aZIsu#^tl|-V{|?E*U(E($T`W1tR2pn0N2=mqp z+qTT-?Tx(RF{!l!p{aY+S2ceHcDusk&}AhfP|atktF$vrs=Y$+Ran3ZZPNcS&|B7z ztrygxviLq)RDku7)F+oUUKw-*Ch{fG@qWfMDRsWu6#NqxVxe%E!Tpu({VZbn6yGXH;lHZ8T{2`wh zYoe@^-<;^svQx8@+s9D~?3<$Tpd4;xExLdg@6Ny%0+YR9bD%35@az4TUar9cK6Wn1 zlebA?+xcxg0SvUHo6bJV7&;w1V4VQ;5(~E7}hBccL+j zcVQd&RGTM_sh=C^nIG&YqwhlwmGW0tqQ%GX_yam2h-#eUgPJj`SgvYzbZZOtG82LQMOm!|2?{BeQ(e8%Jmi&ji2c)%Xq8N{C{xW zvY$(3UI4?Aj%fIsS!N0?{{Ol~h;ClDHTbpi|Fe^!S8e_Oww}xWIP_(2addqLq;BEt z&3F0tZP#sv^}^KcW?GbuiTA0_YwO1h%J=Wz<;Ra7BOmK<9n{Ga7vQJP z$0R;U^p%hYrt?}ukN!@Z3~e3v{!po~{)8aWJ5?7KF*&WePo&EZmv`9o(jF~1iQ2&n zRO$>e2^}wT%VFpOfHSFKJ^aYZ_S>#iQ?WcvK7%+K19CF2WHF>=lCAM7@LpfsVZ;j* z_f-X2DX-4Iv4fi#J(XND>Hla^?#UG5ZJihyjL4FA*S}@aS|2P3u$9CknE?ZFmvuQi zreR|jfaVG2l@A#1fip8b#&sR0M>iUX(z45zXjNRy+ zX{C#AHG#tGF01qf%rWj*2xd&cU}DgNJA1dwhYug+mtX!N_xjLwgl>1*)1OZ32>2~d3^fOX$*gJwr;qNm5q+_b)nN&6K)=;(RdEnWFWuVkx`+* zOUNl^hrBGIa=k7B|6p4={#g7KYHz5h{C{x;D?^vinkeRlI&P5x_!DSv!>8raA`T0a zStSL)k|p1ZY_t5XuWB6_$RheT{Y>I9CKI#p3vvANobwna15 zTa&A{%J)*Mix_(|Gh(iUQf1)KSj;FoDa=E=+9ZQ)7hCx@1$6@X&OyYiOtnF8U+S|d z>;CF;Y$7ah9D!%q)`NbkdR`#bA|6N&9#>-x8k8YbQ^|6?uwrV{sC4<{8Ta4XS+zS?K#M%!qn|J=;a;YD)s_(^5a2-`oLQ zwHSQXN}r%!oktO1m}P3I^+_G#fv&jJo?ypW0Q3U@>!s)^$=y>S{v}}3CrpL0qS=hr zGVs@xRI=>Tk3Bp*$iw>wxj!aH6A*ppeA+z*kyn&ScZ#jPNsk0<{uRD2-iS;HdG)ri zpjXHrsy%4Fa$Wdlz3~9)&#%WKwpV1bAUksJ<^A?|GQa8FYph+#{52NrZ@jxjhXBHH z>P8-;2NsGm=b4|ZY#U2Z<+cq7fdxAOEz3$S%Ea2qrx+J7>v06w=1}+AY6n#xAoq zSdHVz>lZFkTNbL$)rLDmlU3ZLxfox_yiyCn6G5p?kT_95I}aFO5L8xtFT9e8EY7eL z3SN_7D{Z^2e7Rgdm79BXvbv0WvqgvO(&-x+Ijp!_de9QHaEv}(}O(*ZEQ#!IeLwA)BlI4z}yzE}8m%b}H*BaH`e4S`h)uY~Ul zL(yw?35<3KV2!HIyOzL7y0d|i8ru3>G;kTD3*K%lRWL*)AsX|J9t;#1*{-L)VdHv3+5Q{@ zB^};pj9FT+Wr)M+Ks2@_t$eKBgNBTVPF*!`Q>4djJnf3HOQR9G`IUx=@>Wbq>yVt2 zp!aw0x~L86D*bzNeK+Wfc)&UW7$D;e9I4=UsH^^AyW{&w$3t&iej&1vFRB3eC&8al z{Rh8AE}l2?slZE%U6L6vk*tH3XULn>3l<{)joL8bVFXpW`rObdfjXQ2vQiG< z5HM?l#x;UbN>|9#y&FEcTFn(^q#H84k=#vz42RN7c0fT==Jl~46Zl|t_rZ*@J$Wh) z*3lQDpns@3ntl%ISt9VMr#9(>Vl}}S;@cMnx+)i!f^5rG^)2e_?C6x5eu6~{j!+Ok zdJ$FzM>g>>)jEJe=kja1i`R~;flbJdq`rI5*g{``FBQ^@L0~F!+93#xB!(HtMkn{3 zv2QClHS>$~o8D{LZRK>!@xZRbNnW{+Q+cOb7PeLYGVq3QG$?IQ6R(xDS;bt`WyIf1 zrLZBh`o;v$;3FpDi6^%o6@Dt*hA#gh%!wzry9qPj)`#u1T$YI|gY+PUOk^FoxS~jd z@)ans{J<{uJrmgIy%mg^>Q#kCzF^h`@`1=ACRO&yxyV_-r=xvVd&r8i&86?2`1E42 zd}v>>GO2|a7xd642)&O!=mOK6GTLPOzh&MmQ)bL67?Uj7JZ1p!wghZ0LuAtDynsI9 zy`(A_Bvq{C;Fqn?(tfN)WRxKV%8xta^sQD}%U04a6Z#Q85+}+pvfLm|^yNil z+2^HtWmRSqMSWBfG}@FxpJVcs;j~2N&MUXC_is}wGe>yESjlYCcSuz11>5&xf!R_5 z*uGxhlqu3l{mb9vMM#Gk9}5o`^A2DVFlD2<-O{X)+^p}4O=ULt`d@8 zu9WeYy{chxw`>-Z^$Ug8B(E%Qxg1-cpP%LV=~*719uI%`GW=gSZ;3J5n#whsLq4ls zmM)(4M|z_e)~lO--pY@ulh4?V4^0@SyG&Uj6byCqX-GdBQ#&;hQgqrK>W_ov0oMTTK0hu5@Xmi8K zG?JYnBV2lIhuWkq-D{{@f^5@kx$+;cwYHK;tqex7{OH7|6tCQGU2{1qy5Q+{kLeoh zw9}hEnlShqybgQIiK>z86^vtzgPQt3#uIZ|1mY7~{p}W|BPXFFSE^0CX;rah+DYHw zp;qa`a|;_B1V?*C<0)n_sbr?UgugSkPc$Rp5)*{YCACq|r|nWSrMUnqwhYG237d># zd>-VNU;jSv$m8`7d2E7{T^j7otJ-XV*Ev9@#u|YL3LlM?Ou-?{ML>N9DOy!7 z+@=#<&7jZfQji(yiP4VV@zm1hMp5hQczJ*SPToDdk9<*|GeCXR_37nNo*#cSN*k== zvdUW#>+Cb2P-GPrG#G%XL0}17SJboFOh)2l>Iz~rfe&_-tuWTH$HaHB5)BGA)Y^c) zO4+r#>oVA^(lkiSdUTQwhg)EPK|8ekkpWm z+Yuj!AG_;9_cU-U8gi7`pKNStL#Ovq6w1>EQ#oNP;hTJM+lD9>Iw&$vaPmDAo<2Lu z7 z-R^jpoi}j5&=&yNIL`0TUNuOD<4MQYUZ;V{1JD)Aq{=wkLspssI(L52#Du!Ojf4Yp z=%Tm*J$z>|OD!cH_SR#7W-}&w*MMjo$|+#7ANbE=1&d!-e&S zQUTD1NR50#8fcCsa`8iAkisAr>rM+uIu*eQv}Dh~hYg9KUJ}Mg@&}b;325>lx!6ur ziv63kjq<}s@`6vFs29l41x1UGLb)yKw?RXueQK>V*je^r48}%@DN6m?X;M)I)D_3A zxB$&DyuUP1Tv&cCLcg#L1lrL>0+amsQEL%0nJ@!%f?7*+41hGNc27`lb-X+Nyu7@$ zfbjY5TyT81-L;)E^8)Cr$xx(!t4GK9hj@4+saSn5Dsowlu2ao)^tD0@-Rqj&VBzA% zbu)ke4T?nL)pnW6K)tXt~`yWZWEvlwhE&ZDPEaC-kywK%UTg7)Nhe(-kw5Ia>w}t%X#SF{0x8ver$R&W!39!w@bushP-m=Etz1f4=~AnkG`c0T-;qKE2f&VjdYpMGAFTa zO9C_9*<%4W$jecw)9<|;@#g*bw~Zf$|BL*ik5lV)#TRxX4HHJt#_NVo{*4#9^>J^L zv^f3c_ljY>s~>-XouP)|?^?RV8!L}5;}3XjA~DfRS*_rfk}`8&H*M${_EeDu4YXGL z$OVotSkMH3@L-yRIg+|?Ryx~$HQ+|q-c2K#YmUZ+`bXaGIj@RQt zE;q}3wIm6ivNQ4qYIe=fvPdrM(pg|2<_el3xZSFft1XD{OD~|pgUgXvxs0S!?M806 zt}8$(?T%&)>0fi~QH9JHxKoQ-@}oC&#YC2?R&MtPGSLdeu-XWETI)LNUOK9&g*Ztd|Og~73d`{XnJH~8z768(_{OmkxyI87qG9(Ht;N8)UQ6 z{Tgp@#upU?RFG}*!dsusZ`%M8evdK5lMFjxfy#GKbYVktIJ+2fU0ZFQ8#id1g>(dd z8prD-#(yx8mcDJaCmz+!aQ9Q+UM0wL)2CSQ5pKDrC@tj^K+X+?>qewJ^URYV$spx} z=HGLWme0XBk;?V8eRWfaKd*V>X3L$a!$ZuNt{?QtMnAdfg~%o&T!_@0<20uU|B1Qq zt7Vy>f^81GV*<_ZjmOwDq)1tF5Ej@k`U)?M?LMC<=23c%tmPSTe!%*S@6C5%VFgR( zNb(2hRlJ(aDjM(MJp-s@#*twc1 zjO)%%sUvYV<#$)DTWwq* zGWp=|J4U|!4pM$NapV)E4nGWQ$3W=$QFM1j=aNy@Swn9L^k&xVW)0WAw@Ufne~g+^ zJ5Dj-qs`T~zlVQbr(cZVr|at)zy9>l^GNko+yCCfFTd~-Iv%Wxe(`QqQfkDsr0 zNPe|Xb2Z25=C>Q|DDnWkUZ%+FrPu{ti6?DD`+)S=MX z^y))oM5{wti`K_#a}G)+Hj{>lL@wUfpiBE60U?wO`ove6?qS-IU`YyjCh&tZI`L&T z->ON8U!N43{-w$W;0)ZvUpUkiKSpWWiKYm?f$BMi>QQv!B}^45CVpkoxy)9%6I!S}3v_oho~ z!+|t5XF}!>+M^p!Ylsl*X!~u&otF~$$pnrcSG3|n@a`dg9E%VxwvL-7PD+dZ*}$J0 zULn{0ZK2?=zx)Ni{P`cBeBQr&!SmI1o5WXt!{2`USA72R`}65g(c2bFHZP)h%6#S% z8xVYvyVR{>&O!$rH@P4}LdPB7Sr{QZ)>zpxndn8}9*4CN2;!eHF=W_UaX{`Arw!mp z>c#q;1oX{LdF^HDjeUpRZToHLA=DR(<5j&Cq&Bc}$dzxqM}we>(D z{>fJeukv$<;gURdUr$*atw=0#YeCG!e)C{!rIh029iOXx3wy8(>u%QsG@a9T4s6?} zGwH!okTJsT?NwfK=67RUdi-~X+?BoYzlMoiMd#B^E1r!`_tzNO0po6a^Y;7%*pfL5 z^K`jfH)8P~(}(nrYEGZ5Sgzc*Flv!=ebv0MRQYhc^4&}Sp)VJ7-8qBTKij8y!^Kj8 z6=788_O+<@ z^qju`C4L!y!W{1Efnl(;Kal#VwS;B$(o~#K&BH_YnMfdm^OwdSnD5=dWS+&W{Chg@Y; z{n?S;W&8}eTw?C|Wc!Fg%~`9THL-@Hk0WceMARFB-D2L3uvGSgiEJd3XvgZZtB`dt0ptbFVS?~dnX<5o_idKge zlrh8H1TFbI_0qTQ!#+~jUc>w(vlYv-C?Dj zSZppOY>#!+p&v9&vRrC_3MJLG`Ak!*J|X*^x+VMQhCq!ODL6LHoavix5@1YZfRo>8 z@rOm!2`I1if*(uYDZW8GxiRo;Kr!O^rL!Ln*M>I2ts4Rt55-36{IK2QwYb0j@{joGhd<+e&-1wfmgS`PN!H^jz~6rVSG@Vx zT6kIGCdNYe9cn&^vZ)Hk|CUali=`;~2Gw*dR6=v)0zCb)!#k`d9T)y0h1%zW#wj;x z9Qbk4=M%FGvN+$Tay&VChAfLUlHg-T~Fu<#z`S`v8`g|?!-Kr*oJ)wB` z!IwYq<$WXcsa2!#T+pZN6^5Zu%Wde98{5<(H*+@upXqSo)?yrx@TOG6oyeg>bSe^mV;|up^v|YcgI}G-+^1(I?G*?aZ7TR@hn= zk+j`mzI8=2;@=uZz~|Iu^E=KZ>)+sA`jZly07yW$ztY9SYL!=b)%r`Zti=N_qeqnp z;+z+9mGAjz(Y8e5^^nG`>M5NZ@gfO1<@mg>N@!A2jIeG#SOroeTzM7O8OfUf#RBDp zlRppC>ZkuchrCFlGsu{g?ep@LKNPs|X?+6+jcFxo-Yh|L_-bsp zoXZp;iZ1FO>v5lR5Gj}+oSLmuEi%BF0ldNrOa7p^eDG)BfD<(W#7EQhwcu*qqY3Lz zHsA~C#ZBdW<4KNka!ZD{-5_&F4CNTprtc6o(~@{^%Syns`~vYI@Jdogk4 z!j0U4hbzFe;m=d4rWgFs)Id*q($h&y!%5-R_mw-0o+ZuS$T%G5DNq9zzfQ<`XA5!l zOnet!??)c2*@bt~UmQL++VpOgLxf%NbOh7UJO7D*I&Y|)=N z4Rr^kBUbEwN|U`nVO=MSf8Eejzw0r@3-OR8?;JejQ16q~gY4Gq_`FNi7r&WI2#l`} zDo%zy;Zzts4o)SX=IH=E{TRF+g#o1AR(A*c z(=WL;z9og&MEv9NTHHVW`d)gZ-#{80J5@H#tw*a#fK{{n zPNk399O0*!0Vz7&t>g$=#v31DbcSbF9=B5Wxbru_xEYQZsATd^F*Lx)vB_pc30t;R z*mZmhSf#I@7a-nG$hdxmB+1LCPe0mRHl3ag?#oYl z@jD?=H^r?pmQRFE+|uv18y$*xG2W4{Nwyyv1+*bd>PQ?WF|!!Ggi4vNGgVXM}HGc~17HoNJhHkwr{X0DYa_}`HSMj^*b(-USzHn3J$57bNk~wrZI2sxc<3{x;bc_zp*mQjlfT}MqE?OA9kTU#^3z+n|tDkEao90b^pUp z6c1;!Qfc5H-vk{UE5?c6@JI6DoJ>sZa2N2+lsqw_kKw^}^hbBw97G`_ZnQWX+a2NwUrm9V8&AS@v z%OU2=Pq~@;o4XQ>4L0FDzFG6HXmn^_C}^VlTGuXR$I~VkRxf@>JU|pCu6V<*|6V4-fzU|oBKs}R&z`S z)U&5@V1djb746jL zV3(_*`DUa=)(^SJk8xe8|Fx~tju;iyeMH;4?(~gZPz7|ov z7DH^BA4kt{sJKImcyexsFhq0U?&~z0_jHJ$Sj5a_rUM&^7^J`&Yi&SXY$gg=1Aw(* z1Gt=EheXOA5r&pzLQl5;$JPd* zV1J;SN+B#5$rSw@$(e1YPtZ&P<)dj+@2N06H7cXc)r%?Zn8n6g@P@+mvD?He3V<8j5A(+MehNs z;&A9W{2+8y1<&X8t=xj#vPocP6+G8kC9S9OD>V0CAFdXNsFXDX`M|niaOD@e88u;Mrcu2tr2r=MaOqL>#s#Uc+mGIu2QCr*&O zuH+6M7t1*haS_1K#FO~BtvAI-o-ukdlIJu$V&nv`bM+cN1*5T+5Qagt@!WTebxoxV z^(U%V?hTuJlJa}ymB;6`$yjD7y*CuONvw7N2$0?pU^`}R@IrlJ!|%-BA7ch!$s$}Dl}+7~hh(dh5Dyl$4uvCVY5B)c ze2V_bMtRD(bYEkIPHPUbG0G;n9MB2r#ROi4Q>~@{F1|he$I*yvXBf6MOaAnwS$qDp z62Kx$F_YalFNx`;7<9-=92haT>49neo8($aY@C^HbJHOeK6qy1VdDAhU@zO~u?{#9{N-URQD^W8U^s z4Sm0j$qF30bfal-2~zmJzva9MO`g>`pZ>K21LzDOu@!J#Ha%%v`8bbGwinS#300$k z#!$MuPg-n4hE;U2cCUWZ3v~z4vt8HXb-Zzd(Vt>ql2eAf5$L+!=N#dC5ImJ`-KY2~ z5Gw&l4aU7Jz7d88X4PRI(9PQp9RI$eKWu*?mU zThhtdXgEhus$isSrHXwi359}kzf+z37TF^%s%c}6_hR^R5w%4wf9p8jUo zo$uo2`18%@B8+|&+_R$yW7#BnEBMwbu9;9-N`wRnwH^(D@NJNqhvOb26{#eXNO4^2WAg2YSxZ^ z_g)F-mtd7muHt7nFX@OU8*A6UCq9?}a|T+(dFNOv)nn{qy6g zoacI$Xmebr&)PuP^3&!M-LeB)5gX4$krG)I%?zb~8dZ#KEgD)|?i2K%r=~o?2St@c?}GmDz7Yy=5w8kXk5}S;{rUxgJz0oD6+3Ip!V(CkluWuPSQn*$ zV649m1jz3lf4K-fjk6xIfUxLAl?VjA6ag_4wYsU|sj*ERd^v1ApoK zTj6mF0**@~EMHBU{)Q9!;nR^LTv=i88cbozcuj{dPRuMcaK+>^z!AO`#wOlLehca` zerBLo8!|<{?YS>_81w27DCQ(cyYJ2_R~uF~UW*hOQ%9a3_O2UDtN~>Cb)}lx zjH|f>G6yNX>bLGPF@%2hv8lq>7hK&1gMDle)%TnSZBwrTe%v5;BcJuI8Pee_R`^$iM%Vz2-{*Hba1soOQx0Ck&t(d-#{|dRwfLI| zLI~jUrzJREn1?6`1Jd9?1zIn}{=oQb$^$q3hF*oIyeyZ!> zA*}bLiDDL3zQ7e93 z={0@#F&D4l6Lb>;*|ujE!RWZOCmGfPyw3?P51YPo*;gji(O7Zr>ZXPBSsKx=8I-qJ zjy-{mdVenD{xIlDmE+2G<&Z;#`Flm<~aI6Fy@?f6RQ=d$! z=i>oJcsUUYA9L4-%baWZoZ~jv2Oqm6AO3B)m{WX{0*y@A+ScTJ$a=4l8a)i(hn=T- z@{4{a9HWk<`#wf(hJGLMAo$X`hhNa0uGCV@oU0up5H5g|5%z?l?xvvRDnBq1iJ%tz z5Y{#UUaU38??J74s0Q--fh5C0QtXdOBLgqp%}@!&bi93z3)!jXrsI>x_Jt);!THkp zEZg(D0*&+~4&MFG(>kCY^=(WN2*{aCzcZl))$n5Xi*^?ZOR{@>pPN0hVM0I`6GG8p z7(85({dIpYPHJ+Y8wxymK3L8fUJK?@hkE<4P8P|XbHU!8=$7lr)TYm|Dz@snwb^%n zW*f_*%uF9TrzfDmkdXM$i95W`kAa}yId<~5qZstjTSZ^l$)|0+mULn7< z+FT4iWHHZUZT&{x;^JcBfVdSkBEl(gFGLvkyI4Tw;+wWLq9>^XWQ% zJ_!M%#V){iQMoLh$ezg^kH2V&DDliqcVCATk8@qB*M@23&B!YY5Uce~Ell&n=;85AoaN4l@dp|Ryl^6HF86M2tlGw7pIC#>$@r_qq>;~qid351cD+**T zn7Lo%ig{tolWlXIMUM5E=RGNz?eY1Bgv4+Vegw_1+vY1N(TxXoE({sTE%Pk_+q#*c z=9B6pFvTNJ%*C7|f#wY{hqC<}^-3mbNRDMnaaVfObf1JKFmKFF$U*rqc+TkPZkb#Bp6dTOR{~pKRb4weh|_BPK#l zJGIrOeMIyGDQm=rOWijq8zq)iUmkDw&Z0ZD9P`M+Okyha=WT5z?JK}lVEITAP&@{y zS?#EEabr8pPSid4O2&RMM!y7KQW z7AQm}#$Sxl@jfbkFnTVj?aY)WINSjp@h5-BghJ7>}Rw|9CAUX4TZkJ=1fBjB2?xh%b;-v-O01x#3F>Bf%1ke?YO24FVl>kEl*DNaW8 zbD->#!?poxe8FGGf)t$T(;`uzos%*^H+mo_oorm{UHW0XzF`CmULWZzuK@b*Il7J7 z9E#m;voYz?p2jNN6mpTQE=6M>e7Iqj z@3Ge+@=gh?WanaEyna%P&g<{}S;V^G*Ps7_pa1-q^;$m4P>(*3Couo|+rQ(t-~au6 zvn+gI`;O~^Hzu)}<&6BzYElrd|6|=7+tmAAl7;&Bd%d~{AUC5}WMnV0R=hw-5HI@oh4ibS{wq2^`vEkIxgbK0FS;xW>##ZUTwDhR@V@K+(+>_Pn!Z%#ImcBDV% zpYX79FcYbK#G5D2)^|UwH;P~H0UcL!?S&kyul-~e-X=3n`ji`hO}$3jDw}7U0v&`H zBQp;TxUnYZ_BLtP2%ES3G~g?JsF6lxh3Zr{vlIuyVcN;yFTgHC>UiCnJgqZz!^H%1v4NkK(N7 zKf7&{>v~8X516&M3w}g>zS{~koOzdxw&?B}UBIM~0}X43b{Ttt+UTU&OxA0>!sT#y z1EY%)W5W})_`{wfm{1J{Gp%5lZ?|y~(+HH0H@!&P?=(0jI$bo%cHi6-1;!e#&pk4> zo|~ah?DWy4ARl$`<+a>c)yzfIDO$F=fNX@SExp_YEdI9ef|C1E8WSF zk03V9qW$7`9l8-6V_oqFoQAA|nMtC(DsvhRn={ zE`;Nx2S*heNhP6~dz+-ihO0i^fq^lS&{GE0TVfSsImuUImR)j$EIc`BK(!HBhcl2j z{R-bsC1NYyR}rCSu)0B^$HAlJ$B#ek*WzyX3?;q$z+;@xpMQI9hNga~AaI;8c<^!& zURHVm6w_2M!4d1pQa?%Sn8S8k#>p3xizT+C5+uK14m9(Ac$8gmwBrW6~=9cazV;80OgWVzS;Sd-6pxJl=Xifnz0k?j4Q( zb$EC0Z8X6xRG6NMo2ti6-{QJSPFNdEh7ngmBL=DwNVVRfe~-mJQ@-d@9P%o{1}#@Y z?JGLI1VMu zwM4hXVUrGa(Ge;0I7$7Byya#?pJP;v5`rX7x`tK)iw%sKd{O^>ak||F|2cf+kGNS` zitY^I?Z|mt7J6C^$**VQIP)hF$)SAGWV4E(-B#UR7YmPTTB~EmIWqiB1aR;UWJKcWL)L;hRFt;0> zal&oTH@kF4Qjbskk*^&%u8;?^_UrzX?y`AZwmvDthmK_CVBJfL!+xVj^Y-IVGKRz# z>%}wYG24D1)Nl3}i?EfD_L+U&&|fBa@P)pz@1K|{$M?S8)aA3r)7a3;8{WE$hF)|w z?noynb+mQz-fohZK$)KyTr9Cl4#xQ+eO0zo7a)&$BWnPiFS+c{bBWYwf5y3DhJm2 zzWfa(G)F$F))ZQ^xoK?8j(VDJid0ZF8Cd-cN4%2ri}lL` z68X{EbQlqTe{PfMaE@%CknR%1PIP>4NSI!~2>7lfYeAeTLs$0OUrpF0CNSK#aJU?` zAIAP$DSGfmfp=A#jkqfQngeo?v@Nt+83w(;&I1|==qF~p7&_mJ8R}96S{DY_vRoZ~ z0(QJ3K`@GZ6&PB`b`7jMH)8@%@ob_r22FtP#$P^b(@(;Wtm!Y3e-QN2u~Wa{j}?v( z0O2t+er?m33Cpa>DBTxlS9fo8z_iP6E#VL^k`(M9l1)2V8^g;GC?AZDUaux5EF5=e z-KpU3+m25>y+7U&m!^Mg8h-lpC;a*k{}G=){Dk}0ug~ktJ=PeX-~PZ~|N7tX=3ky0 zqpF9E4r{PP)YwG0DpCYb@if)?9WP`OcJZxP6kF=+apq?2u3c)+HjYK@^MAsJLGLW; zIA0&bcg04zD5Y#-WqTe!3Q;%ufi$*T@M6$@L}*FH#Yt3GII(P4Px>0?3!qPSLT}H$ z?{@w4=?8qceT3W`@zmW7Z*O1m$LBxZ>ApQ}l~~eo0noJ`tHUb>Lxx@i%ioTmCt#AF zoTQP>h|X19>A{Re%s}&(>E^9oSHXRZ=IJmkRl^kIl);`$x}CjC!AjmS$UNkyeg`uF zaNvqTi@8hAyi)&lXrpte5j zSj6cl+O1Tt`7iouXE@m5LZ7D^7wfz>N($o^ZpWxhkJ_hwh`|Wh5i>rT*0rE}Pv)Ng zyT8$RmAASKNi+N^u)CSW#h>Z3gKk_jQn+Un1RWEaEK^-bY;OpAvu;gGaK3x_|MEq} z;J~l-{l4>i32uPQN%*L^x5CqiNr2`r)&6n)wi^rnkW=QyY3_2YRzj1R9PVy3+%3*u%qFA{{uxg(h8BV^lj6r<5;J4%&hhPAxIL~l!-{Z*U z{!<=8#9Ut<0-rIL6kvpBr9Z{zC7&gBm77_MPjKY!oA5nzqDegRn2?$UDCY$x^pz~e zcu2iVd?nOsjyLEmLa~L=#ONB~loKAaZ=7@!*yl|@k@J?W!$C?%W?JY<*KjBQLgi2| zUk`beC#WNrIN-~{Ck-S13pHbfJm>hQa8ATfl6NNr<>oD9>MM;{J{Y=KIX&=>d)oa(NjY%*Q=(ib=}I4jFX7l5iEHd?klnp zrJy4Z54kXuwKh{((bSM)Y#KiJ_i7v99+)9k;2B{8(uJp~uhi8#5mLA`Fp2HVpV@)3 zyy=i`Z7nh8-WR?d*v9@L^P?$Yp1E4^(D#fXA-t&iL z)Nc24qM=R26;FDPw!Lq5LixBs<^WE@I$Z~?0s0!JjfyaW=b*beg?af^bu&6y@!oVc zf`NDo#NaWRt0eElCdaD_Eq>dm{q*bq#ZQ8dq)ddEGDe-+S0yk!Wmj(NF~eEBPy06&e8 zJOiQ+$rFq%W;ou#j`FQhER6<4SeJ~`31!p1(O7D==kKR|`tgVNzaO7Z=Ew~W?;qDj z=o=?p+I<;J=I30Gc>49OqMTQ45$z7$plIR#sR_YzhU3=;Z=01;kLa{;l9n? z^xT`<;nV5pg{01n2_~TyzK1Z+*aG_j27ekU zo4(JnPm0K!DIhZ-Wck;*mmkLmpfHG6DZ#)6e(&u!HeA`C^*3(lan03zijZ=!e7ITTXIvfsN}-2&GVv50`$OVd1CVU{f<=^aDX~)-Sg81|?Hhjyh z%GBSewqf_jW{ZLq2P4sH1{&*3iMe9ZyRY*mD)SDGQ$TJO>xc6uLX4@j6r8v(Sa{{V zU1!hZCV-!>vo3OsmVge!QFt_9YfL@J81rG5oStx7 z1uv7C$UNqIInZI;?sx`_O`F}`opZn*Ap6(mE1i>z>gQ^_$taViRjsr%%}Ngt5LKG-?iy3FVIDM?epJrSPP6ngX{NZM;ywY zW=CG0Xh?e}#|IR~cvt>W16;OjIq}F-K25zl?3;n?)S=PKe3*@P9&CAC#qy&tolJE= zlhu<=?D4;$sY6^4ns*?*A|m{=4Vh-cjH{U2fXnkyxYkdZsrew_>R%(DUGXEd9ZLc3 z-E-I}+kOkG2Ll3fr8K!C%(?_TmZKMlk`@(aWYU0(gJd!iHtr2ASgpI0tLryB;^OdE zCl3j504ObTIdSw&zS9D@=&5U*fVX&S7M6vNA_18SCsaAR@f^dpiBDkL&zWC?O6K8< z*_*XWCR2AnCPW<2)gnAZ`-u`VsKZvSm!u!6Xav*bLjG?1dw-I-gQ5}Y=)}v_-W_D^ z?B71JibGE=p@KKwi0LpJ?Y_0))DJF`umy-ol9S`*5DVR=Tb2bcR-d2Ov=Ec`=`mQn zx4FNqCklS~`7ij>pMHJbVIM`p=j&=e+}_W9#b5vS@6X?cv=1{tA|BTrX0FUS!PdT| z<<8v+(^x0rGyDXkWbG0&hpPqah2QIh4T;{4*faL0xJfl^x^@y**EuihZ7A}>-c$M|+loUB`8`5Bj~XkuwIR47xi zl|o``tJyrcR8N=n$6(-q6Ej4swG_z=7h>m~(Be(*5=RlCodw3J*Sy!+Qys+)Eh`2c z{ch7vlSl#Jt)lKpCOu6U3O`M06SMet3wh$}(L)`TOw7)(ZZ+wet!9aBlNP-wEy3*v3!AIM8o;Nct-o zsXP=fu@Sm-Q5%~L5)g9%IUhPCk!z&=J>nwdFzTb$skuhxcT1Z-pHaG1{)xMt`8UB+ ze|z4SI!w2$q9*_5ya72U&HN)Vp?OaAZ4{z(hxkEW(U}eMk{>&8B;T7glN=neV(7+j zE6Rm~!g4afcbk*acHG=&KDG9th3pZ7Q888iyf%_!yqrr|Lp!fXcz%uC)%2A&Ws1^S z;gF}a>xP1@hk?CB$Smqm+5~x-#?tk#V;&|L+gAwQ;;DGZ>rKx~70v#}Hy{RI#8re8 z4(jqEY+^-`g2H7ZjB)3<YrIWy)pb>?&ydLL|2m7EmK5XcJiQ3n9jnz&s zd(+A=o+{=R+i_}B55s?IP$PcAy=$%_@Zl9xVdrQc7!mQb5r1PCGl5!bF(ZMY-V331 zqbTDWd1CVKGCq`f!PFg(GVgM2Ofg|R46D@UZ47B4nY&k>$#$lg)%#~mWh@o%AblkM zD}g%tBXt|o`TKhLon!tcw^+aW8%RsRjtfuvbQ1H+ap&TivKIEJL!Plf%prFJLE5|b z-pyvtA8oW1YJTEkkKY2>^IwyA=AwO=FY;l|kq#nz`>^s+@Sync)IXo%@u4d1X*eIi zq517`@(SSF3opi&K2T8i767ra#zEa_;(A?is6DK)L);KG!yttg`&YG(yj)xkPviBk z0kihcJT+|?(Q`%F;nIUeKd`;!-A`|(o_f3-%-$JaT1&p>`S*SjS?Y-qGOy{Mv)>L3dNaf+*#?#I`w ztpAJ$rlb(33=s)@muW1{@>O2dp-IJeUh?tUH&4y8M~ZP_3nPy65qCd~UVNY2IAhf9 zHMa^j;HMv|NWAU0Rcp-S))5yu?r(Q|`uGEW{pCMCUyu9tc3-%$i-)({2YmVZ2mboo zzvAuwW!q!35wBhFxDz_~Azei=Vizfwd@5(qoTVN5LymOd78|%h$%zRy^1O0xeNT_486d0Jywy_rYrR(TRvA8dM zc=v-(AAiK-Ct}$Yk5~CVek1nt^$z8#>Tj)aB=V zUKl{Zk_B-j}52QzGE20X9N+**Mm2*iBWt`nw)QkvORit2* zTyy;8cD?xSh4q_l2QW5lJ&I#g0G1q4x=R=EGB(>5J9mThn;VX>dXge;0>a!d)F(nY zK1%O7=c2YO7aKxw+&P3;KeV|b{i#oEtXiO(`g6v~oj3N2w;Z!P^7*!lC_u}Ul-usj z2B+86qmmZkM7rFQ=K3wu?GyJq#qnxX8>uy3vZIMR-L60audd9+ib;~4NME8SLHF2?=bbf(7);{{GRM&G-&Fo;uRx7X21q)LVse0 zG0|Il6KoN{5!W|J^_eDO8k5jB(GX^{{*^2q|ZnWz&!M}rlC+_L5;Pu&wXO#S>OV3j`WV!dKBU`VM-a3q$QH;)`@Y*Ex zV}Vz$IX?ZrK&$W?H77B`mT;TYjUdSyg>hb(V>QIOExzrG?R!xrdC8s32u~Q#X>yx9 zc=-;TLlHN!Ida7V8d*R8H|zXUYFe)}h6w zldLhPN6MXR@{WJW{~?&eM+x^ubrgRbzcQztkO$Z-`fGo*{yw;>%O-7WKH`#>EY9Id zQX-PTQrINz>T=_wV-h+8e6L8gC49%wfv4{<53!+s<(W+5cy+Irp0VoJ?Urk7UG@!s zu$tMYdIgE;6`lr{oP)zhnNPVUoT=^C>BBiN{Seq^1IP5i(Tvs)p!~7y(cl5e9T;xIwi9F;=+fkeLL>%t`b+@ zai}?5{cjUxwDQ)`UQq59@j(&#c6g_}#^+7@zl?cd^4eeIdeax<-r9eN6(0t6yPtHh zjb{?+-)oX@9}PQYU3t+QP;~VXQoXKp+O4o`Ib41@H|$UU@SpyVcVYh`d^QDJBm2r* zy)~UKMb1PZZOs5U2;3xY3EYMu zqTKyIyldd*`2F|4;rBoOmI*V9&Y?qozaAHQTx0Yx)}v+o#%LA3zEc^S)>5zMlP)^9 zFp4S1dD3x8m`~2q;#=zwlpyE>UE|Uk7eq8ySD{5Fgk+k5XHhH+MS9Ch2mSGQ$}|mf z$gq#+Xny$g6Fz?Yv|fvgR2Lq_r>}2+;PaQy7IXiYK4g+H3)H>IL!r0lC7KAP9&_2Wmh`dE%-I=g9FL)h8bj6q}4yz+?P!cO$H`s zBT~5OsVrkM?~SMrf=rhM^X6_&;}KqW2^`8FtIg(yxR#qN(eUx#Z9VphdeefA!LXHB zDf34(1@gv{i+=7;f4e`6p=*dTT##Ul-jRf%#&NM}f+ zh*)*XU!sko*D=`o9NVEO#TBEYzwJJUc^ij{ZZdIfQ_l954!tYC=0CaS5ODCb(p;(Z z%cJ3L5Wkn2TzI3<5};k>@vsT?^BtfC!A>$aA?!jZX4eAGPYm!!UB~Ai6&)f~`kTgK ztluxkYt%{wHbX|^q4!PH(s;hw7CJDClZlpYn0P# zjo$qcsq4&zeW2t;brUkO?@~GN;$YmyoKhSd*v56e=$G+fuot-K7m!tWVpn7vNmEEo z!rplC3t5*=dQJICtnOKr=c$G8!=3%$mK94X8v{iCGcK(w66n(A6|zfRB-?tMS?xY! zUElO8^M$%@#MWsFd#d@ndvh1Qxtt^oTpq9D+<9Nh1_X0H@qERx{mXl${_S7hSIvK!c+QKLHoi*=9Q|nA z6Q}r|qX+7oGzd}jJAw}bZ@Qx~C_ zt;nfR>#iUjLP=p?9np82tKc-7s3PJnjFEYpOUc+;?C4%XcL`=;4ab9qt1&NT2J)I=r*VDWTcW;6 zIDzm?^h~ZO_cq@)-vWIG~@}Mv&q)k!WLeDZEuXlA9UlPzb@!m_H-M5`RxCG z{PO3=YjOX>v(I`WbdCFXE$*AY;kUp38@_)1jJR7`>|@9q;5=V9QGT5o;UdW6^W!Os z+swNB$|a-rj`I0*O;fz%qRo>}dA;ZQToDb@1wi+K*J6Hauzb4;Aksg^rp4jzN&SNs z#V+|=*}3V81b*?eODp#Ka-iRBJBlLc%p-kC*EMt-mKS;&G?wFT z%i{t(7>az+0?pa>nCeJhrg)P=I{Cu}2du)fLp6`)tjkZ`F)aYKEyFf_?7X%#UR3TQ6KU2L{Hl{l9-jS zo0cvcvzaP{b4~e=Z5?y527>+d zc7u&6Nrz%4+{?Y@eb#QgG32IV)vvT@yPpjNmw{NB{YC@;;3rt~g9XkpMpq0jVQl7C zu_^M^n%J){<-C`C5Pwd*dBd5-)TTu_0Pcr*4s9?%V<3xdpyx@_w<-2go<>w56TDGwcU(s=?>}F92L4& z=Au8v0Z=*KXv6B@lPQlVhwKkPZYgjO%zF%hLPDk!H%0|3mO82eP4HnDi4;;wD!Gm5 zJ5V=1^@c#7^QMm)d*sFq>By>Po2t(`^~~33g}-HtR9{Y$#NPhCF4j}!glmZpr2|fB zBab^|P8=8~IVSa4aiBL`c;k025;v4*G)H2cUUTt(j%L7w&B}1jla*?mL=n7y3+Tg$(8U+qXhZZT_@W zKo+Vlsq= z-?WY^xp~gJbP}z6;05RkVX`kZNz+L(VWbRu*kbLrCCL{6{$z=7QiP}Ece6js1 zl)Lq9uYp{0hi6-kKbi$?U0NG~eXTr*Lv-d6N7b_zFDoQUhcaXCHfp|7Nj6R$upvhF z;(=w$w-b2P70iKNLjsS~ZV)xnVX|T+fAy|8MbA`0ak+J1*p3gQx>Agl^C`j?fa)Mb zm@%K>&vZq=vGl^hrdcx9A}CB6OB}dfm%Kugg`Mui%Oq&5=HaVLDIs*mOr|~9RvE)U z&T&C{-+rpH5dH(gQ(yJEF|L_7lhnY#bjzlpAC_G`kG+P^(PwM?Wr(=)MqSF3UO>9% zd_dt;v;c@ecfU397b~^`-`VGcKV%Gh*PWMd)YK}7n&9ne-7D_M{E7axP82z%)Uy)y55MrJw0n+uV%_FaKJb1h5XXGa7W01l+)VdrkjU^`B$lR_|r^&=%ajlmA0l{8KUHAa9= zq8anX3o-2LGJ*RJSwt=f4?cjM3wy&#-yA2e%A^Yf!~ooek5)Sh7~4?n2itF&qFTq; zG(#1X|M4tOk&F{X~a_>D|~h_BnT)3{|v*Zv_C^L^;Khl|D47 zmEWAqXw7~Szs>(5f|8=KhR7D%1Xu2tNw!xL@(#fv z{Q4LC^y8nOPXbmk>s_kb4PV~=z~6rRcijDRKFL`M>{&<`YPx7sexEGdYBIog)t15Q{adYUj1t- z>9g?#E`0d-2_HZH*zBi}j&$4KRLPt^%#gm?f zf1=vy2V}0S1XX^ALwi?WRDVsVr#OeIyTv7OLF~Em&J(-Fl5T(zvDtJU-k07+_h(e} z+L4C((D$Zw?jOGUq@M*nZV_A!i>?06_fE$tpNvHttkFMH<5yRrLEq|!J%3Og#+c5` zM*chr*>q`x56}MRyhbN%Ue9mp_JdyUD20*zD$(`i=kwFx*n1_Le1+q_AR&CBe#`SY zYRo?am!A*$-80@o@9U3kxilw4x>futesHC*WRvleu0s{&D4#3+&JtH`08qYY*tc?> zq1UPze;*fbH2U;q8yr^DFdzFIjn&6@nk(!4a$zWMwlBMZ7-t^zsLg=Mu@*X;-+SZP zxVNt-gpG1C=LKv1{e*B^pTys6#n~NN;GT_9{@$IhJY}`o9PDN{>i|Le9rG~4q9YG@ zi8l-k`N~N&oZkNsB1k_p{;lORVS!cVI|H+OWhRPKCg!6*$;N4ump!XCLsQdCq2eKn zm!9HPky0aV9ucVf^RbCdi~(9cJsGRb3@;7c`|D|r(F_Bt;x~>NhQ2ut*X_{0;YB&A zwj(=@4ToW+7f0F()8G1MJLo4DtQ47?L-sjuPlRpHqMmlaRGpeCW*Y}i6X&wN<*|WY zu<&jl8qZq%dM#M=CgXK+n~mme%!&~v8*%2u)25*tcEv|GxbS7|ylh?>c;x`X9M83w zpctwuxM(y_cS%gc4t?#1jv-fyZHM*574cso zLnHPamc6D3=Hfs0tp!?vuwfZA;2wq^gq$=&X-Moa%pT;Xa)lZ8`@ z*vuQ`ZJK2ID#2|YOc0R*@QaSkW8P5n$9 zs>SKVwCm%Q$NA-#*Bx7_<}l{a+P+Y^!7uEqYsMl!=6jq&pWlt%R?vp;3Tt`HUtmV2 z6Q^8uq|*+HmF^$nhK9_egLj1gT;&#x*P{_hN3W)*wGQ5NhHPXl_Q%}2qH}Ch>(YCZ z&ZUc^#^-V8VFM9L7&?Dq>6r7r_wY9V#DD$x{_UUNKm2F$JBjvT)i$P4lUE_DeLVj? zvKb#H7xCpHA*Hi8k3>2=#DD^V9UBNBpD=>{#+^f5jRUj{5~a@P9wZ{TBJtoXZ%G=m z`sPD}wv=Fp{!L)!a};j$I9suWKm)Gi^ZB7=KKKjQCeOL_{S#uUY`j?{cb|B}2pTiU zyu5=0)9yje`NIJ${X{78PWZE<80h{A1&CY}oOI6{9vzrZina3>iA(;=pUwpjO#n*GR}A?%fE{yF?urlyx;Hbjvs#b2|xe*AMokJkNGod z&j&jno0RYW|NW1@;`h(Lz0-Mn7QMs&oMaInA>P@~XpN0}5&-KrzxG15o0KVc}xcHHx3f zBR?rbQIqyY1<`>eox805xwzZ;qG$vj0{padrHh$d*ljpvB>z6ppE_4wO+U9P5ceF6 zKEL$J*%1KoT^HyfZkh88=gSC z(RdiIKKlN=ie)EN-(E9Lk%R))a zTOGXFFHZ?I!hA!ONbM>qnQ`F`Occ0$j%m=^j+t)BATj6Zq9z^s983zbf(6A}J;6$S za=x3Osr=-1%NXf?VPwmgEA}TO!TBM5@D%sSY>jYeA5A%Hh5qv#O*pe>rjcvK+ZZ_X zS@z~vixInWQ|pRpL*ydCxwIQ`!Si;bsPh?lVNVA}&fwKcyyymIhxL?kjdfpYWARNi z)K37SuLF{nCA{#uf(xUDS4XpVBqYKkyXwWo-5C2YCSzmhwCAzPfwNRCPX)8Dv0oUZ zVCvi`C^4^_Hpg=C*bf(cDtrY9Bcg4plRXLAz)B__t)4h^^*^Uv7VDv08yTpSmUF&> z71Q~JmreKyw9e}+!ju0|e}hpj+VK`a;Xw(hyOfV(GILM)O4yS*OS$_&uxi=?17k1C77D^{f}7>O zh7qQMqe$KYDI~uLzl8aMi(WoMT^px05Xdhn#*OpmByd4DluGuan9WVn#APo`A%fY1 zd7v2SgNIA5oMHO39nGO}%F&ys@3yS>)Ut@B8?z2^Bv{MyIgX)QWyd#(0NJ;UebIONi%}!TlquH9u8yyCttg#XEIY99 zhc+)XA)MdrgnmU~A&!f;1q2!csZ#vB!WTN{ifn|_&x~1tFl|>aA zhp)!;!4Y-<$HUQ3gZ`xk2j?%mb@}_P<6X=D^6|a(zsMuTY@i*GE=ql^Ub#6lX$+p# z59~xqp^?`f)1=LL4m6H2V2}y_vwb9!&6Cd+K~Zx8Jw-<~CNo5tGk`OTBhSg4X}iQ0 z%ji4FWJ4cbS6i0122YFqinyuG(y7zJLtw+b*~RrbdVb{1pZ-*kS}Xe}i*@ZZ>9bR! z8Nj0jP&)#8Oib*E{nX)nSoN*QS$DoH_B0UeRHP7NJ3ImR6o+xHB@{ccw%a;E?4ez5 zPWsffwei%3j?1{9w%`4StO*hwI~+h~l4S)RZuVD;ECVK_Fbj9wAq z`14P{;LqPb!yjEd_qri|0LFW_@hR}Wny_UX` zdK*k3iZ00y%DCdm329D#;qZ>CMq?^S;_-T@pWZh@Z?}*836L=G(%qLYzvJt>FYx9w z3oaTqiUagmEfts%)&V5vUg$ft_~SnEn<%WszleA>sqm?bEFjPYsa2`8DpS*W&@9Xh zmAT+4sY_VXIHU72hL4YhFIM~?RS=khS{SCUl)pHQZN0yIWxU!neA9+OH-1cBuax8% z#85HHW7`m>t}4eiB7bB7V=5YF1m{~PCYN)hi$$APgWbslqgYq#n-Oqtx>Cup8Y`4X zL!aXVId*EPi79!c>Hn#tTb08~VN~b~``&BuV`w~V$Si&E=I8$Y{Bx&bS@*Whg%>!~ zO*u}B-e{kS$$SCQQN_9Eo#5+Q_-M`T#72i;@)4{xRvb6Gi9VuWxC(%5KLVVcA3<|h zjw66?+;J)(G+Z=EEt^$C0n_8j|NGOYBG1>lH2ATWS4-Z-&m9$GVQeaL%d5@!iG{+) zxB=&$uh#|C$xD{V4RW(g+#F<%`+jd?O+`q5TPYH5ff1y$T9mH=9iPEe~gh6`Hpd^*?Q>|_8f z0~dyb4kLm_r0)0)esUd)>R=oSUOd)}$F>c;`jV`hG%;B?TKdr<4wz3@z&H3EB-)qqkbsrU<>7@XrHm0a;-6p*2AT~Fo;r^p1RgW6i< zoa8U(1Z5c`8R~bTfT^?Egg9?Xm;4p$F8t>;nP*gAOO<%(Z{yXtHN_d{=;t-aKeD|6 zf+)K^-$=49I^~?l_glud@AH9)J^yoV3w`nv?yT*6+fjC7$1OTfj_-x*z;tO@hqWA$ zpPTLy>$bng8vt@6lm_4pLt{R@=0JiA3L3Sh%6#W^?h+l!Ua4%Ten5CY*d4Zao`(U_ zUX%wVjm9sUJ|>UGBTqO{N6*nB#IEG8#AVG#Ty?w~l7=^D4YhbcGl3wXRg4p_goT0) z6?5bk)Qg;mIN4Qb*7TcdW8<9fASY#nSeWz--TZ!*dtd;(T6}WFsiuKPv6BdrS*8`fS>^znOu15xZLJ zRUaxI3;mWE?4Lirqt`!cftH-ctGKTEvg60zcG_8!42;E33ZjsPm`B1RL4t>D3LT>< zO>0zmax;9!TIYRE7aWcu1}9bbbSP((ciI5v#Tm|b2etc+ps-7e+|fFQya=rp#G*r* zM8l?by$vGUqt?gQw#tI~joAxUuc)+$x8^^ovjlvn*C5y3D>05=@Gv$FRABQTIK1-1Bqpb6+1MD&2M2>b1KKouBo#s`KzSvV52fE()6F+HQ!V{g1aBIWU0P*-& zzDb`Qx@fWj%gm44e$OX7@c}>o{1^Q6)6dU~{`tkXiu#=A>%p0+TWW@z_$>9+OglrM{jLF zN+#Po$n99M6u-G?B>rulI|FW zLZ?PP{w%~an`eI6Jl&_P;Io^9 zPjeXSs{FGflhb!!@pju+4+V{om*)VX&+;D~CvP6K=)JC+RsVrhmQlBx-}1XN{ZL8F zyB!%Lp+;BAsh4=lvFN$DaTO`ibVjBYmJW0%9f{oB*mqIln>|lz{XI}jiv_8$ENY*JI0DE$0}n!z&954m@1aS zD-D{&3jd7kqAabr&YJ}sl6P5Gna{&MD0~^=-PevNlrqppI!}PC;-853kEy@7!tIZQv?i5Qt$ammM$yeA zwxg8=_VeI-ochvp0F57Yq?0%q8~q5{4s{ydxJCJ2V2+c2G(6;dG5FxaDW-h3QyI0! z9^=)#?|LBaIqG&KHmi#LFY}$3Uk-hGY}l&*tABVj-F>?EP!DVLt9SZj#yhnS5}_k; z1>+%YaEF#hxy6DM6Ab8^qPuI(<4#kG)7ovT5*lSqAH%MJ0d~CX`+u`L&E~!L!Is^q zOYH|KM<%@c73Zlh)P`9C6vY3M7`2%dORxEq@PnNjf=u_ot{@Wwd&jr!Pt%WQ)g*m2 zvEdZ#5PO99LkBsSi9Qaa*6r_QUSV+lm1+?5P6{7J`gJ?wCau zoM2-&K=ot4gbyg>8X(QO7fTnsCh&ixbcLhb028i*A17Pz< zBdW!`u1mnU;0^&b^QQ}7ExgG{!J0-M=Ubg>&_;5a&PK=I4f*9PsNG6v`T9QxQ& zL^0nR#a56QzPELbA(CbPS}@r3iF8oHL&h8LIgec{^}wh+XH|H|L%{LPsB_QU)BoyNpUr}$9WXL$BIQ%z!v zrv<4CuiU3$wJ5odFryf9jLfhHiJZjvcD!M1^B0)m0JX=Q&Tjh{^OAT6=zPwHk~Fs< zl_F1I2QRq>vBCEVzl&sTeh6#@4>Vt`wX2azgD2o}6FB>O=^V8f@9V(6rYVw^I=hWw zb|1pVQAlgZpmRLS94Hvnp1{o;4)=W0Pl)C0cTEpX$2RbU3fr*e=Uzc!thc_dQK>QX zi^47$oEk^CkYgvNfQKPT>6Nrrmz04FLuzErZP@lQc?$uG*YY{hDk4YC(Y?` z=N8*0ESUC@i{vk0+s6s@^PInJOga^SlVA3QdfmUCI-N7O8;xO?G6X!I^2~wK`@oy1>MzK!w3{gSk zN{CMsqu~>_xm)yQK1OON9c}%1#Z%aUp&{8VpurB(WYQWI<)xIjVQ~pVKIRa31*Be) z+Kv8Ee)n+QA?iJ`pz~l#j&q=dcV( zXm;5r2>PpzYUKajmq|_DXay6e8!(*Pw1aEhMxAOX!U`TQ;_yH>*YD8r<8|kKu45Ox zLUsk5Ghv7?Z(hjMw?;hS*(ZQeI{J1utf z_YWcQ|2!WPAZt6`E%5sLwRPk4B#8o8x6mJuGk%Ut=}6$fljCW}{?+U65l|SU4oLM4`X_crGvhxExVW`bhr=tG7|6AV zu{z6Qj@oG=U-)ACh7sJ~o=<}Q^7B8w7Y#o>Uqu&Q_;^C_{(k+p&ws_|&%eXHejAeY zY1?07lHZeiCYR9vw&8juA|QA5ZY;DcEO-goCSK_pBe~T=OmPC2w$-OgN#VdKHkDkw z2OKFL%*b*@u|=?n6E2 zH5{1Yqx)scoJa%UP^r7}t#GJJx_b+y;w$xor0de*kkfY`CjejO7!jjHUnrt{fr@6~ z^W0{~K+P>GzS1>9_LO(`cipOp56=Zp)4OvKV9YEh-zTfdCNJZu;M|2$0>he2#37h; z7P1DJ0MN%j_jc6<9|S8eI2++$mVUuSRw<+qUt{CXq5JI*+;}de?pSm3#dE%j&P!km zxdP|QX^ME}45!6X$6HfF#z6fVUngA2BmI09B9VTI(oyr8b(4bikZY~zqI)aap)J>gc{OjVn{V#PN4XOf z#eElPS^mVA7%Pgvu~8q_HNIFcQTmO-6=P7{>{s7YpP7FFF3NW4vcnp@<_+v47q+aP zenC|ftcP(~%v;ay&z{1mzLBw2F=QHhdv38hy9`rLe*xon6*Fd4-ql=-h{;%dY(YKX zw)009=8ahvWWYsKZ@w;?6t*|+a*oM40RP35v(+^uMjM1yk@cX*7?Z|#Spx$-XH}tD zKorcV(?4SWQj*HUR7^KW3SpQT#n2FouUX_2G=Bxglf!IFa_QpVA##=*s(rXv%_DHC zb?3HvLrvxI@(t!s-IF&t?kt{2Yc;vRu*dc@PaU$Kl<%PBoGh-A&v%=g{Pu`)H1@)0 zwV%$7>o4cN(0iZe1ys~|r59RtSKr&DYmG^IV!g8(A-XQTXx++$Kj!Ipq*^6l(a-cQ z+J^XcdpMD{0eeYwF-$s{=l}$G14|>1zF&-QUu8MrE(`B3~?wk&Z@vsx&i#0q64m(cB_}&$*@}c2fU#lbMB!%zdyI0P} zL~PHxoW?nUVF{PK&CN^YSy2Dl=_ykj8YP|td27A_k+V!sIy0NogYLi4nkRiEUs;_# zbCc$?@pril+2=3^^2X2br55Wog)qqxED6`)T^?ql`Toh@Rcx>wIe?7E+SdZNPPJr* zoyQy0TFnb>O$U>GmcIP-gD(u04t7fHNQP;RN9xUas?eM3J(W)5s)jZ4NA2UA?iICh zbN9*jz~>HIa_!C`yP9KK;kk0M|7{q=vWh_ASCsI(gpA2GNb~K(QRBNXc=jyiFV=xP zOdm-h&h$jmtaDRW)?~pL;la}vd;6cB&Hnr!{?q^Q{^u_nKhPH_^YH7_1HkFB%xW4~ zpC&jA+GbOxW&<$2!_k}b0y`X6;-op24sFMAH;mwlkpOA#l+O`(eA`LiuC4HDLorj_ zl}Znj)T`q(QIUQ!d6kaHN#8dPg?2zE$c%{4$w24z3BKM4UjcH*N+Pn+*)VPv7;Ay>T;IIipY8wr=l_5|{q*az&9jibIeKi0eR=zgzy0=a zc)Nc|){l21rdqrVB$IaCOkBsk;+kd39(9ArgU-Dz_+Kp!Ff#h#usy~R6HVhqz|hr9 z#7A5=s2#;=z37yrdq`zZnlpb5Zr4Y`rnxxUQZ=8#&W(@XqWSd0Pq=;f`0fMujJeyB z=6Wse*ROBjyQI2aWr26_)nbKmlFwu(NNLt4uxb3ZusMgUF0u}qyl@S~znC~}IU2bmzIo$y6sxUyi$aTFc0V7OpbeXgqRm-^IUo5ma8C+YxQNDXmKR6e z-MMp}1WpMTkoO%F>0bv^Q65`74Zw;R<{}I$c;T-)=SlFwYs;Y;z9=U>3L73*yk~Si zVD#}s`*UGy`!{jIPDIegl7PO`ApSt|JNDg(yRhnepx)C2mUEGa8Z%l~tOK>-!Wn}& zVgHgC+vfu>A`e-~>)$gklAPl&eIz-&B1K}A9w=9n%^_09C)Uv+%q0INEN%Lc2X2~Q z4$N}lIB!e}Y=`ONzr835#rV7MOB+^x(j?j1DSUtt4+iE56>d-+E)`ItIC}vUg)-5X zZ`Lq{EGPOX^_Ov{tfF(DV~UM!-ADjn&gszBwes=gfPqh@ssMRe{Gqv*(&VI2S}D0z zo}?j4GiepH;*z&{a9seb-LYPLO|rA-3w9*cP=7=~{3Phd<_K_9?>MYtvUOmesgs^h zH_E!&`=$`bI?z(L;AL&lQ73sKn)K5Y%MOpbKLlo`WvWb3|*p=ihHL} zGOgV;dl=D%s)%s5gd90V=$P;-@^#mvHBa(TW~)&W8u&s3^S-`k$mrKer(RtUH=jbU zpv%OYv$ZMI@N4i?0(l$T%mniRQ>tbG4Kd4a4aX;TxDnqB;U|ov!`fgyK7t=Z z`2qVe_&myoZ4+SnA#c=#9CLnD%Y^cW3X8g#DcUmcAy3e}D}bOsaVcGgy#WOjZ`V(R z$j%6VKeS3eV<0?P$cq>hTT}m=j>3hvcww$6%%aW9@mu@@=r_g%j)$shURU(3E);cf zy;dKq3-oRB|KD@0n-v#7uCTKO;MPX{1TiFX2*r{RJ;#vTkKaAbSi$j$I3gz>&3X(F z!Q*kNkGUAZg+^D#>HBJTv~7ZA>z2+;^XL)BqzJiYBnvuWlEVrx&5LGjqv8kvKB-5Zv%zLh^~?YxcAqY$q|lZHw+j=%l4 z|F3=A4E^&v@&6n|`M0w;kpOXrSy|q|j137cnS5=Ry~s%C4sy%7##TvwvujgocNP~O z7O4#i37i=jF)+Nz=IBX1&Kvr|y2nP3?}Q`1Xf#pi2(Y$EO=a=-Q*zLP>f zVB9oe$1KV0ItzNq!_`x`HvF*hN_VT+eixCqzJKqbuno}EYV)#^V}$`v0Gpg_>upP? zfhvBCB8rn_6(l*@-~RGFi3rQ{uVsmzB)dA{Dhz1H$p#t z`ibh+_P!x@d(!{?^Kba=kAHu^_9i(yi!!A92-~U+gbc+iC+wKC+w-^QTKnxASv1W; z_M%b+o;}I1qF03+r-?dYg$3rL_}JGSrLXXenl`yCI;wzlEB%v>f~UZ#w5wSzTHM*^ zOSd52HmMv#4(cm~vT=liRnZB=+wFbR`_m6Uynp*pMT^JNHn+#$H~jJVebBeJ<3ccB zQL~5Ur-%C8!^W#P=Ty4ChiyzJc0J$QmL;ynE0czfoH}pEtcb06$uoW!v8g=SHJ-3i z4r}fG)E_kt7g55ObMou8h|xl$B6;{HPIAY`#GEbnhF5uA8CsSf?$&Hy7s|H?vY#6u zuCof)e|GNJ&amxaTfc!Xz5SC@vi}g^L!=1!$`N-_Fyeo_Lm!GJa_{5#vb}e+AKd=VmjH^ z#a3A)^(EtSTPxggpl6wgYsO6+bP(QL8ylz`DtWcqFS?NYX4@_hpAJ3v(?3|Xrww>) z>N)3d@tTZ5XBm17dhpn=!7lDr4yGI@X0mPO5HFb@{cij3l!@>o{F~l!l{hc+tHO^p z7XjVpz|wfiQ}YY5QOLAqj7`489Pvp5&vU}ZV7yAJ@zdYReZd$S>nzrJy$NZJ|BTUC zi_p{C@{~@-H+^Khu##0bS(qQyPoAozwNWBg1_tZv69y5clX)QKhpEktQx$J!I(iW$ zTjv!C(A2kl&$gs*Cw(JTlt*F)T@M|`T84*m=DpNaxSM~L-tSI6nKD#o@AJp78z_cT z%$nmx%x?9f7yNRa=v#|6_2sVU4e%Vuaar_3`FqZ#5b?3DS}_(wf}Mr6nmR?r!{#RW zEzEP(5m~b^k2Yd5H&VR1u2GzTg6G1C(>VvZ4}PBdF+w4)s!8d%^0JpQX#DNr;d`h< zZX9wa|0B6M&x$WN$r=qpzkAKkvBv&IbYjiPZtze=w(-CRFFt}E+IkSoe?WIdU`KwCQ9cp&O$U*s`mwKdVoNHCBk=i5E@ABd$p#f8);5kW54B zc#}a4W)SQST_pEjx(7;Mg+<_wA{xjYjGTIj(CQUW+P?j-a7^;$?#zA0pLT+J?F}KW5jgfN@A!5KLjY26{f8R6WZNXijU?u(~UF+bBt|i z*M>%T82+KLl!U4q`F857H$KGI>g!;`GZyuMa+c)vU1Q(MCyeW~HD?JEK*V+$NikGv zo;m*{Uekwb{#^6OeNDY-$Q3@Ka?0fyXOjw&)s2H9>mZ`MiPrr*7LNnF|I_31$9?9X z-p~DKh$0&SJ3GbFQAL-itKH3i3fIO}Yhf8kJOIPkkrrIZUL47L`3Gca#tJW?Fh}%Z z9BIMK%I0iM^s-Y_huElYIy>g^AX9$ zF0SiSU*s89GG*H_%VQMmpyiED{*%B|X1bU_k_@|53r;Hfq`!kEzK#=e>*N!hcA^Q1 zrM@)uP79l{XaF+aiYz&RL4A?AJOpS$l@Zq>X8BByBn9O4H+*B@U9jluAIj005GwJ| z#*id0dp`O3IQ^%ee#W2w{15M&qaSeJEI#K0x5xLd_~U&e^vmZz@YoD{yb`sWOpDAR zrh#Yny3up!zwKT&D81wEzr{rUxO zUp}wbCg*}c9l<3K+M>n!2X0fva@NJbGnvF~{s|y!;^|ZFVJmMK<9b~nlI`aigqq#v zzc|6McRoTM-!hcmThteq3<83oE#~4B!(Hp<<)nEn#$er9cOr@%=5UE+^QNNxZ`eCA z0xm_@VRH+g@PRwtd^tHWy59OooB~=1${TZt=Uli3cDSg38sd-=%8a5Q{eIq9HjSrE z$HxFXs9$^!0_(<>+vBE_n^ml(!Pgg!8!b*}xz2q(0s6p+=V$U;Gs5j!XvX*alX(KA z&mKAf2Tln7bcaQA)jMNh6CEioH!s!{yz z&zoUA;vtKBD&XcN??h=?V&pnTaz|FXg%N0Z5#4JhT#pvR$)Wu{m+ehKav=<$*R!1=NWNwXv7^N(PGK8c=R+( z!`BWh+bBHFKoC0N0_fK8(e=iV#veG#1qSVS<3g^eFkGLA@g^wyv*21wWl74kt=v=) z%@1=r_GckG)at2_xf1jF%_=T(?0y_h1p&Gb2DK)g4UMDQTyoa)FVQJv@;1jdNToLP z7kqmW;IEyf@UjY1lYVi^!=G$GN#^6sFyY65_@K999p@5Zi1c4F8&Y>(o2TIlm3RDr zu{MZv{V(dFJx!>GpmHPtHExSiBcp_w%(P1Z1$6TSl5=tn$9UTqQ@3*{Sgsc3Hsv?6 z&a_(+(^mu<`H;7mDE<`RM<9|P*BM#k*~Hk&ZTtH(t-0VT`-nh)R}!H4l_tJv8`6)l zh~!mPOwPWWc;A2!+tW=r&vE+XJp8!F1ZvZm*OpcdiVPUfmVPn?LFXE!4`^!-ZMx>u&DAcZKHf+GBk$4_~{#cx3J4d`6N8?Cc#IwQ@Ec(9u1l|HD`;F+iH{p!7JO*9nSEeqDYG3xNymfCU1u>Pq9J%Sp z$@UFbm>smwOebQMt~)up%K}<&pjdgOKv&`{Nt(>N`;8fH2W0|;58kv$n77aH%>#{$ zQgFId!LK*@GJ&Ai8t4Xm#BE`K_;hqTiP>?%PmYCaM;JAERe(ky8lIr(%LUU0D})ad z%j#rVqdvtjkKH^N%-js7k=xSAIyG82|W`igmQglFnY56Rrm~@u^a4PK9-O%*WpX%`4!4t>dL!gEu?c8qe; z4G>RVH2_q8JAaei(_!|?3Z0A(Ba5WsTGp<&aYr^%a4P-)`TgG>`Je7f%g{`~Vl;Lkt)g6HPqef{3n<8`Qyg5{U5e>|TC{rdLh zxe0pPvFhX17LK^bCi(R$=A4qeQ!zV$e&r$32Q>ZNc>)T)?+vo}ue&Y*cE`LEtQR1& zPuOJZFS?tx#g~zO9c_h}ewIA(1dE^!l!FqP<9yRacuw%6MLvU3@!o-)u=n-_$69#* z6dR$B?{~%+d;T`)<2OQ|ugtZOBlKfsj~0triYLr3COl!lr8OG?#}rkmx-S!Z40>XI zL@3)4xPX<$Z}?}Q8x*FoCd&TBQ4lii!#D~if67ut(~JYhm<&w`%I9XzFxeC}_m(u8psoj2$-;IXlqCe!g4S z_X_v%g!sKJLR|B!V0F#}%?~LLa`C*gCaO42H_T8-7{e>&{S1}es9cTgNxbz% zET0P+kDOqu%3Mzf?yzHAUAn2fA6C*0j_}{*kNnDe-?CeL_mY7>7cB>x>{VQjHmDDj z%lW!)o}gs+a48qvm$m}W`dPLwmr$B>qGmGe1JC~$e~j$Uc>smWii=*@{p?pab9iTi zz8~jmPdV;|jhpLq0GX%I2WP$PB51bPcwX{_f+JST2FdRjHVstcqya(~gg6?eG~Tp~ z9=lCbPw_%}A>uYD)Qw+oEpqAF%cQ?dGq=A9?BosGRzCFXPOvpU96Uu^nvj6IwavB>gWET>N$AQS?jtf$b-EEE!X_Y`Z9}A>6^g zkCjp0_y(yY<3^)V^vOUti)^${k5gTIRr#Uq@Y6|@h z(HA6t)@923PkI!^RyEyF&2uhqBoFoHr-D{@vOSyC+6n${n6AUVPivUnXok44BCuHo&8C|UgUeG0KXIs_!S#Ljd}0}qr|iNz*cGkTb*JbN z`w2Wu%AAv<{aFffM3Crl^+NO*BRnIt9GDkYK+l&v&edVmuMOU1ea<&fD`)FAom|tu zb`-6z*dEUvwbedBP}+zG;!&20^3B-@2DGe+C^ z&wn^3plWfsy5gZcE& z7XY3C?PSQU^i|a92pO_?;{;77<+?pdnT~!wvY}0eX}~N<3~lXc3eTbrU=;qvzqOWa# zP-l}n>UKXa!t#9DX_8Ygp3{IW=AIt77E=vqlQJLqzc!s~%w>`Sn4DgY}YjZU^ zabL21U^SSr(vPJM6~nTyKr6*sP&ssRqyEiDOrGq+hvzGjZ;$t7`qazk&%eKKiho(Y zmW#`S6~+Q46-$`8b(Go35wj|Z2*!J_ahLzAzWMNu6B^XpPgpliC&n9#RLGCm9nO)B zA;r*3z;N{9-hJz`HcTw_6y@ms|pZtI{XSreyFePIidMSM5(v(<8E?9g_nC-m~woX3Ia zLtx$3K}?R}6tl^MAu4S`m!4=$Jy@bM*8C8lFk7hXNZc5c{SBJSEbF&FpE2l(=+EQU zR3?Rr14%tyK{|>u+m8zWfLaOqdUJv4LNIeo4p{;3A}2dY#jEk^mFMM|VX8g*ab_y3 zjWlj1o7JR*GSkN3;FIt)bimlkMblnz?;9E7PYeeQr@iT}``J_9ssHu-@9D|Y%%7p= z!2K;S=Tq74iSeTls+HKp;C0Fgs&pom=bUv$IFf#5n1ypjPu7#m9JahaHq9~drJ7tE zG*WD4_?FF6tvYw+TpCgw^uzQn$0vI)o8g;%OcH3GM8DyTdj!1^-+_0A^zSE6gy9ri z;Hixoo5nXCx?kt{@)YDO@ufbpYpsxbZmiCMr-dh>6dPb(J$bO4|z;E^mFue4qp`{hIoc=@n$6M`cXpM!5n>Dt!u{MoY{jR+1 zN8G=A94(0tEQ z$ikOBhcEr!#b5MB5zmdB%pDOUGI!z6fX2ILj0@g}Kb7;7{y=jy^@r5N&P$=&h>}rj zGL|31?{)pXBg|He1-m7$t0QF`%hz?8W0K}A!U_%t<&7jntzG)-EL0A|z)uIxgT_U6 zt3kGEJonhh~ms5Pc`vh=}y%~W55{*h4-?#HlRad~mDeKOt~e|`SLYxgDTlY9OpxaHq@h7*cg$n5*uU+Izj(ejU|2+RN^yPY` zdQfXcm5gK9z_6>xlHO zD1tKAtC5f17_x2hi$#{lAN!ww```Y?{r~jq|Mma%e&xRa)$h^xtu6FEJuMzo7KPCkp=N&b%Xrml?3L0|sf@nkf=;!SunQT4<@95cq@5-4J zit`HGaus&)yuvbXpecWzz;e>|xMp_QUN)$sg%y>??esT0xjn{R$(MQO)nOP&DWN%| z?ggRM=Q3IxaQhY`SJwarVZPQkV85F>87%bgr|Xxgr_QncM~je~U+3jBRv4mvx5>qj zV-y(bX$I4EC{4y!0%!w0F5lL*_uWnW@Z+EG^Pm0$KG>)ATW=4#@7Hg)+k5fz?R^vU zulW4scRZg4z=ut0zX;KukKHFvQp9?+xI;E=9+yAtS1ZYHD*}+ag1n}CnPiPxlV6I9 zW>ID9I_|)X0s|OU)o16cj5HMcUCy~NO>vwYZF^Ty*b{526=jR&;%oeB@B6!hL$;)G z60V-a4g8HelI8@ULh9YJxA%?EAAWrQd&ApX{N~Vljpo<)4fDs-p!fS%^jS|}ukdAj zV~$0X?hc*|yTq22{e!)j$?!o%B9Z9%`vR_*-0WUOc|A7@Ehe5hau4XLb=EK!c9q*q z{I8oP_qPnqQdHlKI6f=7F_<221O2uS?>8% zkqZ}B2aAr}81iDFuY5`^kV-c^)0Tr4Y`NS^N z@3$(&2z_ILpBPKNol8pw$t{hY=X@$T;;V?O6aAb(jwVWxSGSmGhZm%!SzMdY)@V#O(m$*1oXV1!!+{c-DUg<@jEDq4`- zdn|Q#@?GLQbaXs&6KyftH}F{xHI}FU<;{yApU*BTTiIy(8i;plT|924YK~(&mLdEv z_SE-lE=E{DvIrWN18Y1p@MLo;2)#Ir#FoU7I0@p9<0X8`hJz+O@P;0s43>PuUK9t< z|7d>W89z-ANr*Oq9aDF7YK_?D=*(%HkG8b{A`+{A$5CE0JjY=BY`o8E31cdnuCkBb z(8)7;xrt@-O(M3SF1m%06<;+6hv?4f3A*l4d{fYH!~D*EVk9r&)>iM*xrse%EL84y z($^PvjzvA!*K zXHC{;J7CPcdkHzQAUL&(!f4k&i`sb3A_GI&qt89`i&o9ww25m+_H(j?*0UJg_8I22 z=|K)V=oiYX)A-_Cz3J5eP)zi!0s81`GPIZdjmQ-@({>Cp9`RD&%}y3JWdhyqxIDa> ztAAdNbWEqu3|I!g3>W)Wyv)`)up1+LEP;qdj>v_&jY@Nr*bCVx$IkI{i zx*;QWoKJXfabasVn$3Bqy@;Pd(yp3$i(lm@t|yr>Hziu`|Mc6x{r~=NkIx@V2>Yk^ z0Q@g))D#NC^!$y4y_vLe_SQQt1(cgo0ey-klJGvK2DNh(<@x5MO+40ZZtmA*Rg${2nS%sl+y>vJRYUN-H>h38CzDC@7%kLpow>z$fwKn4 zfvaLK6dKuu)i7A4`?!6Qf%PyI+6hE{|99VWWB#&oh9& zO~K&6uaouU#RBYd*eYt29i8TQrYcMQT1kStss2hHCoeYD8y!zLa3(+w_b4FW8D|zM zsB1MNSV%_pdHgR5gd|JwnUo|BJvn@Y{lYv?Tt<&u3I!e`sgUc=f|1J~jxp6%+_B$! zlK$!jJ6D-W7cs~^VkVw&}&VQSWIn()W5gV*Ae%Q|rd2%BSH*#Dl&!|Lz)uQXcf$X|v&Z$@PWP5D{d^iM<^y&s2;Wb6aef4Uq>x@J zq~f-VXz5OmBYrvnq$go?C@1)T_QuVNXts#E2;-VL)x8S)-6KELMkw2Z>JQ`(Uix)v zmvdGlUyeTa&9emih+!YHT9X$P3$xU&ZAzx3!K!vT87JDDOg(kAwSoyMVle+cbhgB{ z)JYo#cNW_%V_fWk=xce>)4@co)m~iYUJ|j2(~MqET)``+Szyv`=aPoR?}P31iyWrL zO#DmVxowQt_Dq@_=ltEkg_4!S3NOUokN@4b&F(qDPI+q+rF!VG8icxC|acL1>ivvNJ=Yo2+b`p^aeflT5PBmk4Sz$Ug&(7mUb$p7LuJ~vOb;)-LA_w&tqxrXp6f(Ktz6ul))kc6N(+jJ>EFaBsFG~4YKUg8y-?EOxk>m1J$ z)nt`FfX-*F_H6@)1L@D0J?IQ!+Kz3RCj}!^OJco~gRmeh4V|>ci*9JjO(DtD`uL(; zJIJ?+Dt!00YzVoTBI3)4>&xTbhGaaw)oLdF27Mjv^6F)bv zttiH|y1@(?pzv zv)|3PCwSiPQlUTc)*5IN2&66gx1)}naF5pN$%_k(fFQyg9h)x_}QKpQLr}$vHL!9P3=)sX}FVt|R4U$Vg0VFDA9FwbUll z+(n1@clFVg`mOQDpSg3}Z=iaGr?|J$hmd8*=<77KyWMUze$2zog#V!Frh6V0r-A;{ zH}#25Ykv#F76&FV%rUZhsg82ajqPFt*iQfUF$uZnVZEETIAc18ny3&uoliplYkbVj z(06T?PmMXD$qdoSn_m=`5~ZiIgL_`~}~=&$(U zhd(_N_G6>#(dY3r=%fGdpMS$2Uw(T}XkYgNY#YK`a`c`|kx8}3bQC%ggWT1$`}Rh| zWx8G#;`nZ6bSccaEFd|Zfb=yM@jSkDdtkJUg5k7$+1P0TpJO_sqH7U&2}3^Bu+jP$ zh|IisRk1<`W0T_jv0vAk{9sb#U`VwC3XMB19y&?WlfyIA6`4SYaL z=YjQw^tPFw04|m_7!cKQoav#u8hGxya5bID62B&nur618F?F4A zc6J;+Pj)ZXm?KQ?G0^%AeQqApV~lRnAhpC+Rcu^5V`nccvbWP1#(eK<&sX2>*Wa?v zSaeWO?i4VK8Qh-#x_I|C-7CZAxq6+V3I1%cCGQ7#q(8)!uv-+2ozNhne_s09G-*DCw0DgoPmFGT zlwx!Us4lw_U^UioYrq~6`L6uGKDnLt_nhZT_J7h326#?$)ni=0KC4#Ge`Fb3@eD(V5sZaCyOLV(KI#?+X~w?>@=# zBEA&?$ZbqL#}CZsrj4q2H}RaqS#0jL;7CbmC_9Ylnov47C=A0GL*hK)uIAiPi)5K? z(^&g%R)Op?T+O$Ie=FR#wib$*2Y70WlSF8`e75biknX*aI|$ae5Nsn@Ed6I-#MTdJ z>~(WWjP1EOCK$iOUYNncWp2^2bXijl7@rc4q$t9hj@o_V0fusmhq#%dwb^_m5AL*S zddwkLx72sOw+|MqWU7Wx4!GlvCsUCcs;=hj>`qf@ODem}C z{1od8P2h@S`;K#)Y09k(6WL=AUr>{oATf4rKt+CPb`4tPz@)R`0C4(@@p;CPj~)ko zNsOE>Y`#p-E1sMj$>^_Nx8OC0H%^V{DB$7p2)DKiIfHndrhw{o32jcdi=@a`vbTf% z-%jVI9S`P5Z&YD0P^XRW2Qricp%&6PSjbp6cer4Ok)O@F0jr4hC=8`)tZ{RQ%j2Q> zJKur$aJnIce2(LSzK&ei&EV9)v>U+thDPUe=oL z;aA4a5@xu@KB+#PsVZ9djeG~Na`~RQ!0&^ww zDO$yz6n-17Y=zeK%}>AMTM~&u+aqMOd`(2^AU-#E@HW03V=x%yBA~EE<5zB2B#nyl z*=E4l5E6k$D;cMFEYLdzM&0pl8V!XaKIvImz z@&ttu#lNgY|NtuU;Q}}QS-0B6~Q01i&YpceeD}B25p}lsGW>Z1IkYd*%ebW7V&e?%^G<| zEyj8`k?-;6mOQ5q5w5TogtjBb@6XqLM%-56x%+B=1!IlnIJ+5d+!9S{)8A&HzG5H+ zP2Gy?-@%($=~0g-F4NeAf5~r1aNpw_$yfO8baP2OHgFIBNykEtf$$6(yW|So-<#wu z+AZzF07n}OV71gYfh{w!r?vHhA?|a@(Kc^Oj$7!E{PiCBC}d$4daQL+tz0bPOFUolh}1~Sx>O;8%05nUq3EGIMKDt z1n5WEm*%=*f3(OkVQKRf=jTmor_99oBN5@mXd8IkG|R4?jO|Mt?~Hd_A5Q)A#*1j{ zCK!FJ=fofP%5^xdJa^j`V;X`7{TelJ@~!%wH-HI-9tc|r5{L+|Vx6@RDuxOdt3UZR z%SMtLu@W|`n;xhoVQEZrgCA~toY|1=@@5ux^uY@W=Y)|38>_vAL`JdQ)GPYrIOUiC z@A$rBUOPQriar~B3R=fqfRmoqD5 ze&|oM-V(jwwhMCrCE2nt@#lDd*I0bg*SZg|E zf0B(b7ygm~lZaktofsqr$TNtJ7#%WWq1OniTt4Q^iqCb)g`fCd{x0!FB*mp0$LWdV zqN2={4n=%laX#f3H)mL@4IJMX)cyZ*;BOqIZk%;{?&8{=E)GyZ`i!&B=m-&|PGoko zouhhNh|hy;lXDNE>PI;&u{yt>j_=Uzu~rO1l<%?)dl7W5fCe}F(wS$Yu{&KcxP0sn zpq8E;9MPrOXlvi^e$5ABuwIkr@q65-PhiG6T8uI-Bql;*MzwB4NjWvT&brF^0aQ>= zc1-!hw_{dTvqkV&Z01z*?;}p zzy9z4Q+)l%*WNb*{@2?F{1@pE%I0GA8V_+->Woa_(njf2p}gj)hYp#0c0pqiH=5MA z2CH=!8^Z$x;7%9lVP)WgMxC(+7IB%U7TyTdorfm$VpOJU;1#hoW(ovfA`V1k^zWKR zwa7A?%P16yGfWRd)2c_lANsnS_rXQiSX}{5)(Vx5M3>~rW4v)<1O(`^^2V&8qhWf= z$Pd$IL+1=APWjH8Ms_mdv}TgfbS$TTuS*C3>%J!ZEnZ#YM^Dsdlu5zNWTES11KaVD z;L5Xw)bC^QbtnJb*Y}?+eweZ&b-T9*mVCgU{`?Dm`tk8v+{f=g-qTkezvKCK|AOB> z|MmUv=RN#QWJ+(_#<}tLEnMM~5thbfR~=^(5BZ~D3@}^<%>b_(9J-0QEfovO#O_Us zCel)H$X_TYBx+8{^y|*c?H{x;>Rgm##@&;~Q%WQJvHc21#<<%p^N%jv_tPp%;gH32 zoFZ=N-s|GYs_|o-kDq>cxBJIk9P%9V?f%#Z{R8*6x9uOakZaJi?vh@Gn0$JRb!(=@ z7liI;A!e|w;Ztfp%?`0;P2`q*qE{8w84<~K2|*!rumNV zd-Ab9-^JF#8}ZzR8$3R_+PJ{4jEZ>WRBW5>`oo1G9OR24vG1RvpaKAHY4oix&!5A%v0iS=A8+YD<=^4&=?h?s+(d`t>50%=P857^!dmIj zh(h{dZ9v@UmG32=Ees+!OFcb$-HJZjqUK*T&*Hpg_5HMgk-}QVX6AzMtNo^-6m9D^ z(;p>(96Io+&p`*AS*TI2muq^%x+eqgEV$&I#GVA_?S~|yP$@$a5iBc&&K_^#@D}mL zy098&%d+ejijS@y#su35iA6{*|Upd<(wa(kpyBsQ*)~O z9;oW>&1odpmg1A|2s|hz^Kpw6?~Vsuzn6_N&b9mTNHd?WVy^oL%Q=4?#sWj_79Vaw!ZZVf8KCM;pUb(eQDd@qoJ!# z;^S>^Qq|ULiQ3&(=Ax+|S3{80K>VzSXA)su@ePPiJLGr8fU-e+kC@-IY*Td*f4bTM z$rnQ9>#k9D(HlidmZU!%$deBP-J}s%CAPg2-&-=%Rep>QzFtf>aeAG|sK1lHr{n27 zJN04p|E=t>aOP>0u0Xm;ANIL10Mslq)~toa)s)rbs*KVPt#MNop<`P=Rlu8c&zv2L zha2NbWUnxvgHL#c-cbKH)Hb=;^T z$zh)PF7WwDn&{oi-+I01bcDb3n_j~9c4)iRfl#iabI&^O2vfeZex88+wZvGEvGv&m zQLJx_2@}+zpSwIvaMMcIl(ky!R*vTUXl!)U3as1lL;e==>Y^3eB%wI6#`j_1n$v>j zLMMZvcV$em8bU_gyh^-OJ>hthU3D&>&K7pOt_S@b)BesQ1C)EiZLBOf!?i+dB8OZfvBCD(i0zFgzDPHF1=vi)(PiI<35o;YQCGm zUtNoLi$1|e;m6{SZ0fX@PTbw(H)duWIDHPe`ka|)o!pVvAy>x;wcgn8$9Clb7svh3 zA-MDgd_BQ~=T%z&sFpjLhS1%Tgl;d`Jwi@6fPYWpy2Nb?Yff!Brt7%7{Xh7-Y=-{n z)9rux<9`32-#`8Zhhy=4F=AtGbs%RS%~VohwxR=+{ZX&iab%Gt$mAWt*8$o`9KYWc zqeX&giy5mH#K#1B87KKG8cw1)_sw=iq4269T2l`*$%PeZ(i}LPN8-|6c%Tl0lJ^_! zX%g{*SRGyIvJu&!{uN0Ri-CV{kCU7L?QW-pFupen;lxP3x`~+elp;<|&^1gSIt6o5 zq?l9+kiVW^&-OBINBk@{HR-f;n>Gsh%GYL0tQgpBoLXd3Sv=hGNuP})0`$uhZdTH9 zv0vlPQXJn;et!D&)B7gqulV%wht+)lE~MQ)Jez-h-~9UH%io?)hFZhBnoP!I3E;bh zZRpsgcqUI5g+^{D-9&n(4b*d>v*W2y!`=FoR|9*JRNj&vo?;GTA`26+v_sw(i1Mk>@ z7dnZ{ya8au2omE|^3uBZamdHh|4zr8UDKuVkM+m2$%QG5SxBHVm4yz!#QfTDOO5QD z>eDeWUeCvVnh-~WU*xnHQv_n{^w3C;7o*rrW>JV|+OqkBd(jAfyz%E-ej^?w_LAnt z5wN(vb?O>VY|w2h%`e`rC&76bA(pe9=8%qvIm)>lq6eRq;bUSKBG}#pO}lK`iCZ)s z7ut)1cMio z8!s}q7NHU2cS5bYs-K#?wr+OH-@76O#f@osb4Of%@OJAqtIZ4_irRm7K3wJ>Gk)#$ zG@K{hAk4+MV7M@pKbtzv#{anImIKLTlIHEH)-A7LJbiE_=1>A-qt|?)Kd5M?bSr-L zliEzQIka_N#)$*J94jF%#bRyNsjyoN8A$3g`&ys2omkK$f`k7YdsP(m##SE~rXmMR zL+kS3pu2Y3&=VRpIyr|au4CPvw5*HFb=f*&Lx-q!5CDF6+~MFk%gu_PvL{OgqQ#?H zp^UqP)AP^W(_b0$7JbKDW10?=<9gy;-*Aq+wjuEU&)mOcTec^p7!_C87Tegfqw<<411jDVb>t7hkzSev+6yxMR$m$;Ys zweqVg$dGaepN2k{qVZsmiT`JWGiQ;#X;YiaWNU3^sz$rK*P1CD^5qX~|GxN3PGoX& zN&e7H;%Y5qNJ?_Rwv~H($+5QQP0y*nb%*4sA)?h=G^9VV%~=^cnYR8w%<+Qcadz8K zk@*?WdDDfve0jnqr9Hp4=2M}$l$o^){sW_BZgN+%n~mmahu5W#n*NQ)%-@I)BM?X8 z&QCtFjamS9=(cQutTVXzE)hBztv4K3IgU+gxh07Ht+N{yx zr!TPjHB;oVF4!h*lT&ufs7;&yZSxp0YR#{*EsjgmezHg81Yr|?N+QoCye4e&hl^*~ zZzv|89JZ;vsqhZ}q1Te*hd=ml{>^LUUkgd+^lv&iLn*@0^)`1q5bCTTcNJivO^ruf zWj~744ey$5WrH*Wq?GSyu#`Rl!o-!U(g`VYSHD#J_N0DK-n*VEDi-LkiThI?7aXEuqO%-OuHD?A z4rF%F)_p-tSttfSsrGXcn0Bl4#6=&FGP}ljqs)(q3Fri*LXLrxL?zCOna~}-?a=#q zyz3Tef0t)@F0(S2pB;X^|Ni}l^Y=j?Z=l|5ar+_7m#<&&_2CDP1#uWyuQ|wG_R)Oc z=o3Q)B81}9Iku?Ve8e|c?lijRfh$tgeX~VP@}uWVDo2QdIe0X!F1SX6eL9w@lc>tg z{>$tT?ygGJv0S^;}jiUx?w?FKgX_24aT+$jZ{_-DNRQcajFh8hXulyCE2 zTjh=Q1L>bs%n`TC4#)qFn2xtVE#tBjiF8!KLyEr;rd~Gl>H}DstuYV`Q|yF`x{LoC z5t5}q8oU%AMVtAx)Q1JTR4e*0o<*d85i$el8;UISZG`u{L!a>{ViA4Prd(d%HYs0p zwgrklFYZ~|Drf_xNRB3xx(DwYJ_(#5o4pL+w@MrpOGeMsrgrof(msUO>2OPKej~o} zC2e#{{3y*iIhsuHcv9~l6F=ETdf%1Wpc*(W+I^K#2wHi3-N1wHD zoD`E~7B`Z+G3;NabF#zYKXpx5bGYewabFCCYawHSV-1CA=K4t}If+U8@DEpf0;GST zG$8q|Z)($&>)L%uc?$AOXf9nq$7t3FyR-n(tt}loILG9Io5BJ>SZ*>Yl7uT}gAEop*vghG5tsfL)f%Nz8!k#>oixWdR17V5|yhCQSW!v@2MU~+yRjS1eZ1|>&(*AK-P z`BiT-e2ODbHll|=Q=CQ}Er;|K#w3xA>}!DsM)Orhcoj0zeb%4nKdZRlD^h-^<{3PV zI6F5_pAEP-D&l`M7KFyD<`brk#7pPnWkl9enm0{xNbsZTyMZAW9b+-Hq1Pd&=ucrB>=TImmU`fN%oN1$&$3XN$*N|) zEq4;h-qd=&(b49p&^_x`YY`bw?BqI*=<^@i{oBtop1f(FcrG&f+uolY;$LU$*FDIv`YSN85F~4tGvnGM(q6aY%$afHgJubGHo`US20WHnhpCfS$+~Z zh5F}NSH^1ISZMy)I;;Fs7H4fAZ5JidsrmHr5lj2Sz2oZiBRP}43)hW)()~~W<}d$$ z|07d)k52M_|9`(y_;vVK$^obm_)PI2xD6>VC0hk4sC03T3y)|xX{NJj1{+l!8Sy%4 ztlsENAnz2tv66DS%0&OhV$AFdFJjh-fq3c}W7EFR>H;_yfzsSY15tuRxE=S#+eAur zd+dN|UzcFswp5-pK=uULkOLZ5?T55Gn-t+#hF-y{E!Bjr zu9VeyWayv-l^r76)=Kp1o$V_d=f$-M`#MS1hXbCm&biaLnZ!;OF=|SuY)r^ds%2a; zOMh^CTaeLjamb<`+bW}Vb&86W8Fdl2W=da5hAl<-@LMaOw51_${3Zl8Y=`mVMK%_& zmVR2tb~sWKsnd$T=O&hW%3OxUxYzf)sjtzi2Q=w+@XPqizO;(w0ueo^-+Xq|fNs6% z6~*HXH+OmCQlw_v9N}Fz0)u1%Zq8&y%VjUZxLjO|*vOo5o4yEt#O?d}Vo!%*AKy-qxVst1I67!R!a5jry1Fri#3HLghKe_VRs<+4xa(Da)B<=>z4_*f4tEo3qU+EGvxzIyA2xyud#9t(`!(OuqSN;Ks_26 zfq3$fgS_i(b6pz{R~;`7qMiMx=&ODfjd4^4{_-ITD}my`BHK!ZYsP_njW+$(Z5O3{ z<^*s~k$eEe#HZgUS9umbvHYm!8Z7O=aVT$_dVr-l6!vIee#? z_JB(`i(a_XQhTbQI+u4e0Y~|KY~nHi%iz3#?B$wPJmr~~JwA!=X`9D!uTBA2=F^3i z5RS}Iy9GR!qiAg&gnuj<&r4mntMRzgTmrI=hk{OJAQc)I$#Y_KS`LzmQVD{L2h=He zbXVUUzAdyc60Ut@W(zhJHFt+D&+HL1&pT$wIBPR!bV+OVvGT4pp0Mi{Y?!xidUl%L zub7eMnVYD`RzycnlhKTZI+W^;MA8uCH1K!G3AxaY|qN;bjm_VEpeJ$o?Hsi|TbH^vuoz9sgAC%cs6$_JeO@jX#o5Ul66FI%%gNC!wh(4CCt zMR}v+P|AuodS)FwqWvej8i&oxtv;MI)#WC>vcAiMe95NH_q_T(p%5Dv4h7#82d;D! zwBFFw&O3JfSMHzmb-{kzZ(sg3uDPt^<1hd4&t4z=F{-aZt)EVj>S%x%iv?b@3;C>w zWo3N>l$~-Yfa}FT8hZ&Mm~By9d|glz_JTj}HX=tli<hq8|bbU0hf6}t*F8$NnVyFSUz~pJ1LrB8m+8H0C-k3b+o#Kkos|h1aUUbie z&=1G;eSMJZ@mc1Vm-F{Qzuv!~FZ^5g$Bg~3E7>P_i2=)M{7fUAF8!03;f#&&+ zO`^$h*<^^x2S!%)5fg{%Zwqi+;xi%R^3|FzFj+6LzyRK5mTB&6TQDYKgIfEas>;o)!nme zI`Y-70krF}@JsqR>`w;{49(9mSJex4D!}@U{dNB8S~1DADb6) zw|$!cV$+|hI(do(Yft?xKA3zmusoJ`PkS|xq1zS?BaTh-5z~#jWeaBy^UzKCIx?>6 z4VFaT%(28jil@W`k2p2SUFC^4Vqf1*@bz5r8W^LK#*1uF5FIle@&`b1aoNuKw_TSm zO`0S`V_)VtbYLtSTWQiZAQ5=U{+OTWU**mXTx=VFH{+Nr%CeuP5~h008h&sMPkR(5 zH5^~E$8Wr5AGEjxmgYm>jed4tQ=Ii;PKXSU{pFx zxpd(*H*&SUoh~98jO0FLNC$(?*5Uv98S7r)a50%TKG@@1LZVFA>Qg!`yQI& zYtwO#2})T&DVuQnHdsY9oYCE-)vqAUBzHoLww zf6^CCGggcjAOnm_cj3!XQNCtyR4E(D7~A?pHVAK)dXt3HK3(>6c&(0F(&I&o)hKx#bZ;m;Mn@GtCi3+N6H1cQ%N1 z8JBQ=^@`BKLCyw5C3Rw1Jy_uSwID)~PcG-y$1xzARh1wieb(^vb>2q2U1)vc{TZ=9 z`aWYTF0^lJl1r<6k|oC&-6Dz~YdeGp4p15-o~-!?TKhKdbBTC1eNn`O+ry>aTw%Qi?TS?=`3U_t2|PZ*>fvO`4J3YWRq zUPAB-OtvYxiX}%GU@ucjy#upe&WK{~**!Z#zjnpM>csPeL@U=>l1@w}&v@3{nVdBA zaqQu|Pk#t~PZ!yM&pPg#dm>_jAn`*Uh-Y{j?zufPK|VKjTS9=-|Pc)pD>~3BmI%#(49{j>$Yp>K=n( zTe?FHFjw36g*_iW{0tvI{v7Xa@7GT4v+%n`^YhCmeE#zJ^*;YDWB|1f^Cu$N$>o`2 zEdBjPgE`?97)d|6AmLQJU=->B>9S;AgK>+*P<)G*ae{!-t|OcfnaE>er}qnZaJob* zQ!aPD*>xOl^ZD`SZo0Yfcq9GA;5qqQ6U8C7)8IMT>ipl%h0w?EgdTO=^Y@bOFJJNb z^J78$>uJLq=?2*haw3L11zwZmAp0CeB4w_V<2POWa+rY}ymBKG7@L6S%`*mQ!Yn#G z2)os*3fal`OOMEsXnx5Tw(+rgV4M&bGR_#SL<;THZE%U1@})~m+G_IUFBG};4Eb^l zC}ht|+C^$ix3@w(N{n3CSIwmikuKsq*8UZFP?)>!dj8A7S!&ET>>?J^FO0Cx25+|R z7n?N+EF(xSKC3H#OaJ9;m7RV&-?Gy;@R0-b2cI`HVJXh;_qCuD3riG>)@HbTBSV~i6(Ne>z;A4w@#-~E zfbj3aRB!o_`xcJMtyvd9E!0}3^he*~o)fQR*nSW%=T{$`9?_uppmWBHd7G?R@tXN0 zCbALq>g@3b*WnVhXne@G3g{cn?eLn|_WpL&8hoa&@Y^@G^mb=i&aq;>wQw%}#6~aH z|2d&uPG-#~S(gcuWW?Oq;FUkj8KVl{PS=c_5G`=Tdbg)SjH(c%IQRR>*XS!?Bi7H@Qq6}oQP)-jMV7&6_2kk1AvrtiekVU8UhG7p7R zQB7JRGpXJI@IqBh?zZDXMuMJEjB$aC1@8B=!FaI_fb>fh1Fg|UVL&X(32s`JarV77 z<|?)fg`YL&(fjcw7HhvvWI;CoV5_%MV7|dA{Y!%^I1!QSvFe$V@{K~WYo0ow93^KZ zq$j9Q9wB}Ka?TT~qOWrdORLiM%YD<^JA^0U3kZ!XDZnW|TMT z?H7a0ElAV1T696AD;HbnS(kzqbHyT0=2~8#Jo>Cg{x7ov3m7w(p?t5{xh3xMr+F*H zPI_nRuZp)(I_`uZ z*P_B*r#N|MUQgZ&rHKD^!U$$74o`;+ZXb3qvBM0=&7;lJh@^oxlw*VILF~$h2@_&o z;+8))>xZv-gHMiUnQPk-rn>uM)x8Had)+0w$ED@%Q3@;wK z?+?=wvs$$&gKbP8dRu}d{n!+?sOaYZqV1!_!IYHLos3%734^41YqLh0rge9vZR((N z>o53MyV|$i%^&~jFMjh%;Wt}iwqwLWJ$>xiM2dC%XA_WS`7k2WM=H>L)^e?>f4x7O z9F%Q*+;gEHSIpFE$=e-APP!VIYO2vh@L1~*2DPcAQ@TRwt4VYvy25kUz+P90Nq*`z zCm-0kTkr=<+rZxPwr~5V99N{hGr<%0taPghuq}Nz#9J*n*~~PV6gW`*>66wRiJK#6Nuh z3;gV7zkKcJeRy5$T2X9k0v?aw2mRga0@#muEQCJl-j4y;9d`z8j*4YJ-u#Llr<=n{ zzyoy0o4_nnBw?9+Ih8O`v)QtUaO36I`5(k@N58`Y<$@)X>mF3Prwk3Ntg5&{{`XBW zKnOK5n~4rY4%WrdDZJs`VCqLaWZBy02 zZ>$`DT3V`38)NUqLArH!>~d%DBYh1^xW-%1%IsQiVK%u6FW$|>J<=r7xr(5vq_9dC@+BLG)!Bw9(IiCL>la$4rWJ450wNwbn6UHJMVR$|q9gy|6DAf3EJrw;sdX#sfhu$(ey3lmJ=t%k)Bs&Yi z{9Bv15HZ^LLrv;*-;-WoZE|PSj?r78xcC4}orL*ZrifIUmNt zE58uS@$l>o$;kJ@k3dN2tQQ@Z+0P>2`IZ5iG^k4~*Ny2-#%NN5)h9W(10qyKJ^phi%p2^#=Ur=yK1xI(8vFfk2;IXHXehI3amw?r??zj13- zC}XYb6o4j)(j&LRp3nJ>9U}zPPS$P^*PO-Zp0#GYXDb&vtbR?#miIi`oW2^5%4CS9YL3|S*xwjQ8jq#w{)WNw^U$W8@-$)kz61Ch#)!{3KeF(R) zavMzZ?noPhec@&kcrh_;oz}2D=Cv2!>Em#%DzQ^MNPLlAJo$3yXD2`%F>3b|TW#bW z7%z_HUq_v_pqdCv?N-uUJW9-XiYXO%;=Y`b;Gr@_yuor`uMWoGr{t5oOwm-`n89>In7aZUX5Kq&AqWG{K`cu^)pHL=b` zhLfHP4exf!iE8zO`YaUff{(WRj9yTgWO(gZl21_u&-uwBfIlU)#6c#0A%uS`Dgz$N<2RnU*5eggueR3@ix(t`nEpz`1SEd z=;O`cS0A$;rwOZ`l9mgQJ=ak&OmejuzWiKbCBJG55PP0JVukSz$&&>kN+W!vA(b5Z zHUi0;`OL~DRH)v@BFTwA#y!tT$C5u)NB$pl)vt+0TqEAt%xKNF%f$>+CH;*sI=60v z@S~_zvXy@$`N`)-$RIcmnb`8)USeI>Ex8-14t8XDmnF9Ooh^G477uLkJ8wc>rPS#L?m(sGg0Nj=~;Z zZ@^~1#u(Ev^hsZ#5uC7r!x|I5o}H#IV|4qK3zY2lJNuzmJLEh4t)}@28OD3QXW%yi z6AhenVdX8X_j)sg(eYk3p?dkYVqm!|b{Q$&wG%J7l}ulvv42~O%SF#_WeE>_O(FA1 z`F*O$s}F)erW@ra7k+&$gvJhh=N#tuRGy>xZ0I9n$|+{8K8rSHxk|=PFZ_T%;b(&H zOW*Q>Z(D+82PS;$Z#^>au*Q$a7zF#+ZvK^aB%Y-22GZGzne4|qV>BwifaFNJC8HO? zY;rgo>9KAypV0*4RuRZp4?nkVMZWfAEZ%xg9BaJA=9{ER7!^Et%3D64eJ!}mD@jg9 z>4k;V-yjT*>A7{uAUf$@oZY$xvZABx7gIXOUCC@XE<_DbKB_V+=8dF__I@Dk0R zzfH~Wr&g&q9mh~Wv&vji@&%sI|m{23*7e&aN-h3n@SnEHs)|4Q1VOR3NN#tG3N3=Z5Z>!&PeJ?d$ONfXIPkvDvL)G(k|Yu!h0vp zvT*y(^SuDnq|^e?``}mOkK&K0xRJiw7{Z8DK-@C?_~Hm?!<%s97+;lm++A-2_l5ex zo@_8%@jjm{!4Yy1T@rJ2mt99pO@k?8r7BYw%9>|k-}rdyRgG1fgS>}Fvu?xPf;?B3 zHZ}QfJ~Tsl;~R+|P(IH#q5(c{zCvT?)QELT>{*+`tE}%9cggpN@CBh6CE1&%z}=;g z%C(gvdOInl!b#?kY^z~G84b0Dbo_C7rvBvVs}fhnbGgOfvyCs>p9i>q+8hzGe%0yr zvN=A)JiPPJf|AO}oLLxa^DO?I{c=}~0?}X_F+bkM!99+GPWb#4ZuJ;sTMLaOMXiLN zZDJFu_d>1L%g>+xyB~l2Pk)ZhvHwgi&bLE<_RBx~(^n#Y5)5Q)Umi8l+jP_%7Xx5M z=aC$s8-pjNkLx~AAfGH9`cQt4SjnrY!WP8q)SnILwugx^l_q6^oqpTSV?}kX5|bJ; z|4@(^23XArS*cvDxsu!+nM6|i;o#j#srjbgpK>&OWvbVeu5{h&G5GB&T)FM4s|AgF zE>-yHUa{zs?@3SN0jcoSIZs$i3Jb9_XjB|i4r^y`WXPnF8 zCr*IB#q4axXT;O}kng(>Kf@2N3!!H3aerB#+C2i}1o5vgUtSl#*6)Mf3UrU%HiT0; zE#smSN~JZpt`MUb04uQ`4m#&W#=)&Hf*05#_G2)X6OBu@oKwxZv%%vk=}fs9o?_5e zV@95o6~H`rzl(jTgom}fqi%>)Jcn-p$_Psms{lEe-^jh{-QK;&`}ZG?mhLoZ`Do+I z>muma;}gjSo^Ua+{n<9{9?0=;>-TaFUOc|DwPc9cqqro$KmNZ2_aaX5pLZp{&76j& z-KZ~KpwHwc86VrO)5N?yTi-U~LX2PA&O_ z@ASnny>;ZQ=%LfO*Mw7YYRT-uQ^*$h7rw|o0-%lHfG4)EV5h=P_qR1z_Z1I2+p*4! z-PNnWP4b@Vt~$Jpu%C-aC+?K-Z8y-3Kw9+H7cd*Ugr6Y}suwxJntgV73oRn0Of>P} z+y`z0G^WD&--ALKbox;!SmVPsZjm(8K2wHCkJ@HPv(}e9Hjt2AC?qt73YSY%LrzMx z+z~!jbv)xmCd!Q72n{~W(l<^7YB7TI-Ibd=jiF24Blg@yU%4<&dH*QK3SUlt`1oP- z^G)S|iICF_G@*U&m_0wcxPC7}UZR^`uw^?GVuLQbv#Y!)850;?ewsdIv%djO3`3c`)BsipnO3H=aukIDV= zXa2Hye#HdQtz=9@I;e=8Uv{T{KJ!Hw3+(Np_iED8w(?_rO>b>5S^id^qSvwXSfsJg z?x}?OFujp3SF29_uNd^?YpEPBp<8nOF~R27^IDlM?}y&`lm5^y7|&&iG`ebXwYv6`jxG0u<%kse{Z8*{Av(A9VE?mc`Y@f>G zVgP$Uguf!a7?R7gu3}jhZHhgM1}509iq03Hv{doR&##29#}^{&xB`VXz8>0Ss^~Ny zu#0lNO)blN^X5VLYLTXII(2C)Xs&zgKM^19bF+*2@IfAG zSP-kQ%=nOOU?}Mfy>PW?(iFIhpi8bm_n*MCC}Skw0w#>Z*jKT9?pXkBy?67J54L3? z`o4cw&uvTpId9Cypl_J{jnpqEFUWY!y1{I6?mT{T%mz>k*IRbYq=`|AJFNZDE>{rC zVy~SGVA;iMLseLy(+;1E{?6rsDe)k2?X65N>kdY>(Rg5+Yb0prgW56)&$6#5X`??- zxeIoRtxd#uFRwkdK6bB44d)xtzHU)}Hem8RP*Vr5I{(wFh0w=wxfuF5zI*rXfBJO4 z|MS<=Uoq**-_Np z@A@P<`WIuQWSHfuw^41wo@vXHKU_O$vJ+OSH)hn!Bp52AtQMjK>)l(~XBKeaji){N zZCKO*)6t0L1}9xHjRdPz=nbB7kwYG|OcOp!jqUtWcAI*86G4t%`ag4f_3uA6{wS z&fg4;!O!ii^ZDzK`1*^ZtVNWc;X3~kU!q2?88YaQtYsr8;i_lE^Nt8!ip*Bzghi|jdl!I-$la> z>;pcyc;N^@UFu*tKHO zhbPod4D@CrPwhD6%vcERdh$Eg1l(SSPH%=sJMnwKa-c3J>Mg|> zBsCmbp9Bbf6h2aYC~g|-&$@mp6D)_teip2BY57@#@Lz8eC0eDhfozysD>=daskMvf zycIUH)gMRZzvIo`2c`81S@Gq}kC6F`>YL4l>N5;aK6y5IKIh8>&=@{1}cGGvV2=#NkG6DZ<9ke0Mp*w_cc2bt7oA|Yp z56=O&X&Y>tMX>fa*<{R0%aZ2rAgAv2I=>KCOk$4h23*dBsYMbc?BmQ6h`z17l?<5h zu&a{sAdD{}-laO9W&iiMBzxy>{fTeBI)=95ILV1T>TBm;)t64KT4Mg$6*rQ@!IRZh zr|{A5izZ>rR!P+7p_^2uEvcs1g%K(2s$ZDtQqiKJz`v?-)VKJJ+$a<0#IO-QS^+y2 zh~ij$ycONp@KGFBz96khG&``@7d*!Z8J{G62 zj79OevP8u&$0rqbBiX@}F(&U?8@wsXmc63CG|Kw~krlo4oHjF9;Nv31q1Q=q-k_a+ zA~H5(K(LQv7s zen?Rz3whCMaaDG;Z7Yh-ppagD`PLT@Oo3ur_PR6nN={?tGfnXgrG|dSJ_y3w8jh>lJdYf*)-+N?Lp_sZ~?c}wpT z)BY?Lsg-n8V}YN1_*(_46~?4zZ%=CC{Rv0fl5=jHMBJ==7(U;|9>PQR_v{i&c#~?} zD_R3Mi;rSe&o>Rl=22@p*<#8JtHFc6Z8RxA;=^b}M)RZ@SJp5peSVRlfPUM=+&)Lr z&eusUi(FFW7V8B~6bq-h?-`HrnPlrc6kC6e+n0ZhH#mQK{O||=&97ho{2NwqO;%LG z&cAjt)y=2nIF#EFLk z_C!uL+JXIWyNkg*ly2nJnoOhTzNcT&RQ%Y5aKoRBIZOf>t7n~QqxE2(Uno?Yv`l7B z4~ST%q3PS}!f9BMC;JWM3nmD>@Zk=Ow+gTsh#3;3W3eF0f)+~?L7hM)*n&%l@1cf(J7iz+<(~5>xUCIekCaNZGPJ_X{lBC)LPgWiCFkI&Mao?I>%U za>>9q+P=ljv$J$}U7&fi^WnqyxV^P!Jw}?)UT4q4#^ly)(g7Xf2!qJ?9orOa7dgMESFnS>=+SdX|$tjF$-gdbaN% z&GZG99F?zHyrY_PqLuR0Zz`wOXJA)*2@XpxCnfQ{l^={(I%?NR9f<>8F~9?*_1H5; zyfhcKNq;MuQnzcuG{5Muc*{wGkay+Dz^yZng#K&0=r6lZQp~ zwC`>47q}gqEc{~(r*m)%@r>Lm`!&md!Sb&5IS%CD4Jb?th07!MtwNADMb)G+WWwFi z@x!z2P~XSAQT9My8U#>|7W`RpBZWKO5X)%#(?;boX%Hl+e%QAQ zqtcfmCW4~(=88Y|x9I!80+yCN12cqSLP6_y&Ppt?`6xiJ?EUsgh@8QGT|lxb$O?8-Pz;E)-n#*!E*g297hJj2%E$vV_F4 zpcrOKdIsY<&ZwgEVWgIIixp5gzn&K(9CD}pOpG4z;iY+LGad?90u%|Q2Iu<###jPW zzwFD4blc+jPs@XBfUQh@E~2hD-_AgW=(-*)4G}*f3*)311{vwpw~H7pU(~)0jiceS z-)HO(#I*GjFVn6273U|wI9Y=G$Ruu+??a*&TXFg}q>ddPf&ee?^d z*7xo&=TzHGKRpbye-n>6w)?_1z#HpT?uw5S*92__2G`~xP(LFcmR7BegLN$058s~R zSrtHVKHB#Y6Hj6|>rbok7*F#;ArjWJc=@K-X>&7h7}Q49hMqgkBgzPeI^nt^i0s=H zQUZ!kw6O2pN1Lx13Sp)5S(SS3i{lRe^{2o5i~kuy8oSMt&G_P#bZ_TCPGx+S)P4g9h;aKxu3f5^*P>(LH1RepzuolwHbgWt3kSo34XT~rY`!G z!rNhEjdB21CJMDiaJlRo7@$A6^*w1+P^conTeByR9_Mqy- zFUpVI*&jZ9_qss-;rMLr<1Nsblzn-5IX;d1a{szMw|sr@Ack)0Mej7Y7Bu>&I85!( zsaFg$UN3)CJVMN2BRYf|s_4Cfxe)E?^k;tKXW7)X%LyGS;LT@vQtosLNeTS6-C13| zD;6c&&`soqH*c3>M!K*W5xI*qVt4uHFlS*bH{jxTmy1Ns7)wG}*GAm4&NW|Op+0zzyRJjg_Qw1`wbr&I$6 zMuV%o?F{d&m@q~v+40yLX^X>I!!Ts4hn4Ter-XcI&GUNsVw$1!Q?2m^lV)?$sWO|C zwRp$H$KB(b+*<;|d&RM%Z?LRo2KD4#Ds!TOxloDrWMXaQ5DL<4uOSbyuonLh{f<&+ zZ1aF3Y?uz)_2H916QRUveJA5Ur0`tg)WQRDvQs^QD-gD}l?P)!(D-kgJkJwfLs%Q3 zQH!8OQThajuFw2rVbbPraZdki7YaJJCF-J={Y&L%cTfr$^b!QZI26;I(|B{rj0I4< zcCWAa3{%B;A->bX(5x=yGTEOCq()wo&)J@v_=jEJV&BEZz13-}n8(O5sjq&`@*Jdg z@oB6oiKW^cS(X;wtgbo65(((JQ{FiB*m%hXHUZsL=#ifUhR`uUX!DuRb`#TZ<;|PJ zZA0DU-!zqJ1~5d1G7d?4UbV~hJ!RfAxmu%qrmN_)MsD6Zj99Zy9Jky*v#PbuF!9kZ z_<|NlZTA2)t#fG)QJhIm4AXC&m z=AA;A91WqC?31I&0HWDRf(s$G8W$)r`WdY~J}gWpXv236t4GnoJ1eEQGN7ea&1o5#mr{o_Bf`*;8A zE7@Po992nvf-m$%H;2)gp~sO^N3 z{FWRWyf9|f;>m>Yk^w3!P4zb^Miv3Eb$B2;WkJn{ zp}YS6*wxnp7c_jqsR;L2?X+UKhJQe)j`DeE0EOAbvUh+Sb7Gj>j8- zKjQ1l=T+A-4r1XW5^f~a+C>S_jMGu;?k~v~&n>XddbYVdV1Uc79Yh!;L z_AO$PB&-$GLgq)=uP6&(HU(~Xw@FMljQQomrO@vhx? zyG{FH3{aLhqwyRvBC$k$ohJV(m5@_9YN4N7z&S?v`Y96j*%T7YdSL?E1pyU`Ku%3J4Q+-V=CZ~yQ-1!G6?+31|sN{i; z)uNYnMabF#)@hm*?+arrG1Ejo#&BwmM9{u+wHiqU^_J+c!HTPLVyW+R&o&A@B{1Oy z-hG_$^TtImU8)shSm`fCCIWhEBSmjO9s?Yp2d3{4a8Fb1^(F*ZrEDz`Z z)d!)RItB!^S=31uU0^T3;WyIuAjDUm3ryFgBBvDp>xNWt;<3-WYu}?XTT7R9NZM#I z8~E*z$<(7nnZY%hsLC8YRfz^Vo!fE~T%+venu?rh=Pgf@Xu716vR6sy&k%TUVo4Qpcdebiqkp+`@HpHm(ob#9+paz(|v!@wwGn zv*UiQXUgrJX)9X&-N4>%6_sR%!J6+~$hQhJp&^@nd{h5;*09+&r#_diqYrV~ke?Yh z!p;8HKY#wG&weX(!@~39hd=nQe*HR<{x@v&Vw5`>^vpJlav2V?UN>smEZYyAOp_MS z(@$^5+~vB{Enc;UXzC;&Y$cAzN(gb_)* zI|M2K`fhifSiG*c!7Al%gN9Xy7Q4?Y$YQhYI~_w$3w5g>P}U499z5U9w*~#><+%6V zhwt(I_dmz`_aBZ4%ExCGA0_N|mOmE0zJ5C102G6TKgRE>Idm**CN}10e!dzilcutm z+5p~neqpsZ%m-<%IuDLZzv`dZ(u*a7&E2K_u>Gtf(d@w&yr~~CmJK|n3E%wJc64Hw z*P^NBXNTe0lxvbJZdF@{?J?KPcY4P5#rv z9+$P44qT36sgCaPAZnYyOlUyG$f**;)xnefLYHDQ?#H6ec6S4jIIDTFD}OB+jkh^< z;*;XRH~zWerzUkQA^#%5eHW0GsF z_F@7xR8aoq#Fx>hq0grkFC^6!7KGm3$rDk`6j3{ z?o(~E$#Epa@Fyc5M&T|8V`4Bj5#;4=(LdLRY^8!FAN$ZDH%-WLz60l|$`>)&xVN|d zHO5AIGdRj8>&u@XUplyfdfcHW)};41T)Tb*wo8b-uTMT;kE_6Xvds=fc?iYx0kd9%cTd}TZCAAyyYu! zWb-AslRu0}Um)=da)(N>@kbd|8L8sD?}b^hIOQ$h)aQI1^H99Ou1GN8F_uwO*m6dT zR>y?4EEqVKY}{-x@{ObXu5;m+6?n{6%G}+1Lg(2dO>l6+nNm4rk0+D!MmW%$WG}In zL&7%_pY6FA0*#O$5HnPt<9y!4%50GQc5GgtW7YEd`3DSh8x(VLK*GFGy&7Yx{+V!1 zRO$WQl$5#yNyt9L&(a3x-$$7{;fyYF$r^HagNQg@(G4MYB9Y^2QZ`bVSsEDHTAxvM{??O0Nj5` zeo@xyZ^XLBt9aA}K0|aJ%@~K z$;aHZ*OWvR^bW@v7}B)?a1Mfka+IU^^G&Gnq4})EIWZu;3{&6n$^PU&?(1s8#>1&> z5@Ibm$++{?Ha=!*Ev5_`T#GiT#SJltty4nTxQ3)5_i&DTe%XF5DPG3oLt)qQlZxIeL z@bPwiR^hHCVBKfdKT%)c%|{$lM|~q(PhK(DFr`_wFH^*x?nSfnn8=dVY(pz2xOj4F zQKCxT=%>!xqLw!w3BProfk!P~J$@(5Ztw8@cOUWb<1dci{k(sDIm+J_oyYl?`)7Rq z^69nwOMEXkxw@@y>!h6VrCbJ}iQtQ~L}`pSiQK3YWr;H#1au>U6XrFXTy?|#vZn#l z!^207eU9|!bX`Z)b{>!jfDv0s&rl0E-r6_iP!@Z_AIiqHW1R%CT3omTu$FJ~^L$wV z$D;WA_unl!7mr6fcYJyIg0HU&p)qlzAOYaOzw-qCrdoosY&N_d*mZ%cMC;yms z@cr2ElJd`j(wh6~ z5z10f1c+X}{BHJ?)ht z`o!lg+K+(t!Zf3aRl+j)1l7tHW=6RCxTT*$FPu}oDX&g=L;jg!e!~*UTp}_nZWr_2DbcIpi*iJrwH+5X(b(+slTH zX_~XPZ*FF_vOTxVxLkgM5^mjdqAhybu$Zph;W?ORJY+SM8sr9dyON}o6TmM%Qz=v@ zN;zW`5zIHFb<{I_#BSM^;c79eAA~|JKPHzp>pNk2=&dh+N}T$>?K-Ujyg5tS#3nX5 z1`t@+{9!A*i<=cKZ|Xm(j{f0_-ROIGX))yrS`=hm1Zw{L<>%^bqf%!ppyy?;la{ufU zn7A5KZsV8wo$+~QAHGUiXAdN+82Jl&f1ldzZ}P&i+r$vXC2vCkzZb!_7oc4*|1rWI3Y(J z!dtE)*J~)yh#Gqj_V^RVHf#B?a8SB@Z7e>`@53Ee3f3~di?BV`^fAPh$DI$GRcIVI zAko@A<3DdWR6M@>zx~#QP-^1aj$i%ikAC&}e*d%AcK*pW2nKLqCPbb%>E${&tuyNb zBszO5cJ;GLE(u%8@x65XUdDG~T+^X@dQm*}ZzNxg_D|Kiw|0z3IW=6J#+1)fG&p_~2S1M-!lH9D5b$-=3xk!8K{A}naIW@P>xw=tiyNI29*L}V8MvUDv ztZI#TEr;v<9DR32f@SFa(svzT!~Ewizppi zyn)qh4byW&so8z&y4AV0C2?_YInA27`rgh zLW>pvT37-zp=4eXe96yV2CJ^c6DM3lbnr0o(P%G_-jsff~Ue?WiV z72r2Cd6C4s|A8kKN^Te2RsHpj-xlf){-S-bgv+l@Fjj^&f}uX>E;W@oti`2*N%?u? z=LiJCqu6*Q_+Y7`6jI*0>%I%p0mrp?zcVDrQHxmCJ}2YyJRBzn1P5RDj%*FOQRZww=hqld7Jc zg7E)i$?4AVaJE%n<*Y@y;WEym8svAp4f3)q+o#@KB)Q{0R|tKp1;oeZCWy1d`6gx= zxMcP*(3c7KsE@)Y#+mcpLXh~h@rp~fS1j7ZF5IzL>fZWbH{c>u?f6ZNnD)4NVK%V| zfc9pPb$B43tgRA5-+^(Gv%S>TI4^rIXV?YKs_a~EwSN&M)JnzVssbX=Ppgd8)6vT4 z-&w1??s=O?Yrxl<8P9_M^0tLbRN~aRHKIK6%XK?1CarZ{Y77atR07?wvrHr=Dq5Io zLw0iN#sr{!(I6jqQbdgUMWX4NI4slNa_sw1$~`e#l#pZnb~nT+H0A)SQ)Fb}Od=!6MMwoum3#??nY(_~x zvu10bc(4fb+e1zr=Myq)@n32XNoeEccA~u$vCZ#$!HbrRZCp<35*1cscXErV@+XS- zq-N_D?oSakap7 z{IPG1v%w(xe6T*I{E3Fa@Jmh<)SZ~*o4;T6ts zsPswXCbQ|90mo-r@u^uq7DD zE!fdnZQ@W4e-iv-q2&oucpF4ktnNTPr_$+PG>M$f^8tW2K)Hh;cP4zJJ}aK0G$-o> z-taLKvSYWmW_=n)`94L;?%)On)7LR3`FBKRatkHTF*z1M8-UZmLzxqz``e)m_7&4b zH7b}kvPQ^-vL~h;@w*Dg!rDq-sf+jTzsC=+3!#tSgM7U3nUkL@A$@&(2KCF2=kI#9 zUYX@z>nskRC|4<;T646}w^%X?OTN(?RJDO85<&G%WwjXO=UYAJ+c<7oyOCX(U`b;F zLYAV~G_e!=eGagk%{XZhmDQX<--J1<-G}p+PLD~>8+5W2E|Ur-;+($n?!$MlzVROS zdvWuq^YDYm?}I)*mwb~BXy|NC0G%bgVus|~#UYuP_zL1kr_H@FZ>@y;eAw%Bp={F*c5Or%#>92b3tDX=srA#8wCI3U#}o6!k&!XI zD4nobI?URRHXtRTf_1{c?*BF>mDh=#IF`s0HulCR%XUBMUhTTBdB46O)r{6{7*TxC zzUdRj|24Qg$Sye_|GU537v_8BM5Iqjdzw@05Mv}!zbNClnraw^qpA|Lz7@a%8M1m>c@i5d5lV9^X& zJoV^An->dD-wY+)t1Xl`sh9P}gKq-XhCTsaP(E2d<3Qh-^dc4RM<5w~4v7a(#mXiQ zUu}xdVdNX%FkE_s=-;#N;Pfe57rjU(;BilP?AXuhVg4;AMQ}gf;2Z8de7{ zGD+W>sNZJO5ljEXrR2XQvkcye*R2RZWhyIw%=#JHj`_BsRZdygH4$E3!GGhNk+RE9 zkgxf7!XZO|ZVpr}_d`Q9I-BZpg7&HM*%~tyMGXLjn6}jM&ybfTuoY z97^thNms8noXvKk2J2Th^g#SPBW=k)Xk~nKKO#LY`PB}+KJo9Ii**VgP>Jg2XsqG= zlv|GWcJ9PR@>}*djxVt%A3o02hfxGH{1q0$XRMKg4XqTmVR2u0Ks_@Nw#L_+xvLe2 zXV<}zKYg`59NIu9MX}w=uBh3qGrGj5l&`(bTyN4QJt30;ryivFc?zs||11Qzhi;v}xICjIu7>igJMO z9y{^G{IP9Yo%MYB@#Co*w=rb; zPd0Vsb2&e3++_D3%UrH#$pko|8Xng(W z{`vDi!%sX6zsK?6=YRB1-oLy5+3V@AG=iFO+F+)~b;=2=U6QTrmT3a-yhqQyO_s^= zG?8c`-SJ*!8(CbpBTqP49qMu+{cQ(!2=JWf(hj7aV87CZ{>>}b`@etXD@f#xgLCLPy9 zNUp#x{wP`^bvR9Wn<;;k%a~q&(^Zh%yPLO;Wzb*cQvNn5)!qI!&N=?JlR<6rki(s6 z-7Gbdbi0eDUGZ3(eEr{JV~S7z;5YRu-lr8p59}u^NUBka2i}yzZ=;>^pA9lz8~Y8( z;~Aor+hhXVHoNJ`KaAp2#BzWuvabjKJh)<;WmD`lp&v3}4GO*VfIelji&*AiwMP?T z=rX9F#5>okIC@;&jN*PY&GAlH+4Qk@(4G4PHP7>8zu`jie%EK#@s^!t<#SmiW|6l3 z75TX)iOT(XfZeA)9@lr$WZjoV70{#=+sA{6iYLys1;yn9nGg8q0*D)GWT~d~n~?0$ z9`cRVz_gTdwcGC%$B?+Gp`=(8xtI|XYm&cEWmp{&j{<|)*l;T;0I6&{V!Jy1bA{GP z8CCN^Mizrz&uamo#~JHlwu8a0&~;>ODjul5Zj7xldrB*2W^xSEdb-~Pv+lGBE+`lZ)%Zc;ar_~GFK>Jw+l^-7oIpUKA5fibTc?`#8>)F6wR@iv_r^38+A0P{TT0bDJ>6fx_R*X`xs zY-{lZ(kH}=sXUsxjhbWn);MUizVR5F{<=bCoaMu&NPA#o3riB*2J2*uJ&ocGCV7#U zfxG#=H{>c+6z*{e;^bS7uCL9Xi+bC;C6N<4I$?JeU4M2uMa6W&;f5RUw9X3K%{j(n ztX-mlX5!W%f~HO|32~3$M)M2%{{LAD9>owHz-2p>Ny;( z&oj6F(xs~3lI{97JL zLjUQHKmMmb$4@-I6<)@%7DWG7+i2N;Vq?A;AV~j1I=&Dq`vq<1y7HhI3RldUl=WS( z`8Uu((?T}CUQyaV!eVD(Pa)0mct zIrP2~s5_ywycSZTsCTl6fDC#ULZ^O8H@hh>Exw7NrvsK*c0#E)j(wYOFOR0A9%sAV z>7hd>P@AH4@OKJl&wG!zKi|FofS-N;i`T`_pC9@>e}B$$aQX7`f=^%m24B8@#_{RC zO@lcgbWXNwV0i#&yst>|*c;lB4tSn+3DF-t_1)1%)p&DYw5N4evjEhuiJLV>SG2@3F}Hx{~wq_0=an{SNu& z@Teczc5e;8xNjYZ&~&%tbRIq1UYT;Y=ap`Q@abKSpt2Ty&<@}TO~ z8*A<0{K%a-(v>a}mSDN?*mD^9PMRruN9PF*z2&?V0CL!xfJ%&S$()cVdFRRacnW6Y zA{Y<{2O(^ zxi{+qQ|5K=;JL`F|{ z_x4N&=sL$4hkJDLI#6RW?jIq)pQdbg?{7~Ap>`yfZFpef-7>#>mK!obc8{;01V zZ6k;`Goj%LDT^?!V#sRV$%8*nB(Dc&*_1MH+!X5z`yk<4oK}v|jX}f$IkrJJrs*Au z6;f1;aXCN+rkf2K{8a$qm-`ajM{Q>7j~@Tsc%h7Q;3jwprl*Y!)JG)j+4T{DNywMQ z?a54&$m0`yyz>z?m1C=b%Zko4R&&W(qqnJ*@!OyGs87GOhEtmmJ1Aa_ML@EQqvDOw z2_Vlja+SF5H0q4ez?Yi^u2OmKzin-~>Wa3!^x?gzKqKb3Kz3n`bMIS;c)MFY`p;gzOLA2?aGnFrD5X&2kAKFyO zH`w8vKiE7J+T4t9<4r}6c_habKXLl?<^E5<{Pq9wzv1^d-r@H=?q7cUpWc7>2mkx) z=|2xIcnduD-PlvE6EtjfM(dm>B-A){|9of@9HWe%#_naWf}S}h?kK*eW$mI{qJM*} za^!5`;GHwJRSP@_=mE3{MCatZ#ly5Uxh48?k)h(wk|!m9f;xBlhCNpEUH`19-P~Zb z=ky>YH>N>)p&6Y%vD$eb4DJro!Q9!b7t=bX`t=Ai~m$h zEgn$ZSw>1p(qpQ8s7-)I4V|IScA6Wdo@&lm{b)=kf$SrJh%xbe`f|y)&YEnfWWDjx zib>N693!SAoU04wNps1av3(}l+wI-)$>hiH$1;sakz;ZE^N+9eUP^aWM6rQ#iq6tMb8>D;I1d}XMI5KzgTTsXU1aBD+f{<{RvZmRZ8gxQ>wQo_s zo*UtMoaKa5t6x5B8#(Klk$pV$N3?UXSxjNtXW>{o=-o07#OF#CrM1UE>G7MIeur%I zAwG@TA+4k?Jslrqhs?2-7}V!5k$7Zj|IiUHou?kcF<28Rd-aUMUj&KQV8g{y@o3`2 z?hVNOPHGVLE_t}FmmRZRQ-2BFK;*OJr~gz!x-j$St}e&zvEk`5n_oIK6dq(f)+6IP z3Tg_cs=rj2K+GVpOLZCeW2oH38WR8L!RyHQ=Qg6Jti1a03CUNKdqoe7yRb_CW-Z4R zS)+39E~vpMVyyKDqcGF1-`H$GAV&K4^mo>WouFPktOl3Y67MLxuAIc!41?IA%x}t< z*M;|bAw6RX+4Qi6n0mICdP?LZT2LK%bDO-N|2j6v8;Vpv-8$*)@Vn|dc}Fd&S3Zhv ze9>NZq47sSL-(YziJ)c$Qso#k?8YABGhl2ZV-8q&R!CJlHqv;wO+Ao&h0SFDauDxs z5L%<>rB|fx(ds0IWGr#}%?nNSTX~&xO1Nc>eHLdWqoa+-!_MR%fnm9sf%+DX{B0)7 zBDP}DX^eu*3$Qi;EeWFJOXbj;*PN>jkVP*GS^%cUEPhBkPd5o~VkI9eyOw@+sZus# z0OC*jRno9{^bvWkg!@w=zj(RQVHqgr#Dry)-sBUN1_V;VCqGkP;ixPzbyyTpLx(oHBI)aO2V`|X&QN%l!CMdYjTMcD z=&N$Pi?KR1wR2NjEe9;j;QZmjG>}S;P7mBtw zmCbfa9VYsVd&;dVA=LJx;e_bd)aKH$+-AF+r1L(qiuI^0n>zL7Ye4698mZIH!fa-Y4Jc-W5mDQ! zPeE-~Ptt->Foye!{mJLQ{)_()e$T`3w>&=n@(=&ymAQY1F63KBpY;I*Y|b(r67qH( z0USQ63jKaR{l~8y&!obhhtYMx&O^Br50Ef>ZNkrvvn=Wa9$CQ(C^NRXS1M(B^pL+4ee_ z<-Z|@d`#AjhEQ@t$Hw@2~;DNUX&1}0QG4Ni#{X^TiKef7AjaIkhAgiamb zZtq_gLOw@msh{|QR|Ud*eqHEMsXepAKi6iuXnhet$5pH0*XC~9Bi#< zN|N`)Q1`0|Rv5KZ!J%IhX5R3I{hbD$g%!d{yPn5*Vm6y8TTaBmvfpobB9+?B>*FVb2_nN&7L8S>O1?8HXr;TCvQZLA9O_ z(J{+KC}Tdo#W<$U4*d!VOGgWPBq}%rSGfIZ*4E1uo;Yt5SG?FpY*X|4JQg66zUiBM zH3?s3B|T-lD&3-U%Z2Bphh~S9kz#h|SQ)mH-z?{x~d^2Y9Gfv{OEXeQ)$X&hPRrWh3A<*3x8jr=A3u3 zplLn=6mms>jUf%c&RFBF7vII9PFhK+0@;kEk&mM44DBq}^U~;x@B9Xs{dS?NH1!J; zK=-RqW!+N0buP=Fn=+kvx*mlUt@O;lzVBzU= zbc{Uzt?H%QIW6Jv?JHtd_7<~yh(+=$2hF|oEX~&POz_3}VK1PctHx19xe~fLGBw(FCsdz9@=7khQFHpJz~cLdmt3FZ?&4U zvQPO&#X>Z7e3~C#FlrNsjVtZM7KO6Bt}qpi=3`T`)=pgoa(0l=WsV`RVTO~FBF|;$ zn%ZOZaV{#_unL4um5Vaf4)xH6;Ihf2$EU4@RBAUl84JXOHtrNtd;UQ(D3^0Va<7sZ zWqqOl%^bRG$$KtZ_o3KVZ6I;00EQrsqS(N@+mIgWYw|k!c=-Dz7yvcYz>Y1yl;a)r0-OJa`ulUi+PWq zXO>#^Mn?_bSQ8LeM)#T4PLFNd^rzW~V;8#ZUgYb28I$-`&t94QRd&peqXapw2FkB8loR-3=iVw+#cCq+$fNZB?y#fiaw&jr{)`(V>3$L^ErS*6*4_2;n=vo9MUmlIm_ zZ}}-O28q0L5+(yyelv#8qdYH2)NbZ|M<77)-Rol4$B(}_-U@xZv{`SBowV-$6`#KR z4qv~1d0iM&Ri2+kJ^3uP75$i?PMdq}`pu-^gaCvBuqg0yx5H~)S0h1>h@ z@ZrOE=OcDqdn}H>E`)ymM7XrqNam8@?Hi6-97{5UXKPac`9hzlim7n#U}NQ-)DZX< zmVCOY#4sl5!0n?sN5!(WvPKP_^~ieBRyOHXmTd_%uYky-9h#VMs%KWML*7gR(BByD z_p@Om9BSB;yVrwKo8>0RqE0>O1e1PMU=Rr3<{0&4Gks_TCcqBOizDf$UTh=;xSaIvjV&gDrk5a0^3J7{L{`VaHIv zu(d(u^$jh6@@w#n%&XylA){NHL^jev*!T{JT|*!AhvPsn{0$2-Phr1Tv}f%`5u9b==QbF7rVHQ2*FURGMGYP%YPAn z;qTtdHG;bhSVncywx(<{!{;JkR;uS$LZIn`@-L|0VObyOV^-V6W6)+5IpLc3aV@kT z)%?a-&VwII`e>V6p3QZg{|_I^yI|ki#apGPh6%fz-YSkoQ^~U&>BzULGbY#>t++kg zM3zJYmosiO8hz0ZY0>1acq_$JO%bW&u4bT7?#(Bxv#9*~6NIqdBO!fqzG=E1_&ZwI z#KQVF{eQolF&|O^FkOc)o++(2x&C!Eityu{5UWz7({I)~LXRei)0j{9vY-!-?m?*X6i=o~Vq-h&hhgn|?b!gHF@D9SD zc(<9z#zoi9EaXpgq~QaRMJCKQr2CE=C!)g@Ky>^W1Dl3;qOVcr#3%zH1NgUqo-c;l zdD!~5@F7eaq|d`SwyoAl$< zC*epZ4c6Se$46fT@z&l-hb#UoPNjRq#H|gJ#=^OR>#{h|CXV?jyMLebcGAGRci$cV zaeGJ6*Z)4hE`omf{Q0=%c`@zNRCmam&s@RBm~=-g=qNr&9tt4=1n0LinE=!q^0YTw z#sa^k+vdT>b0O`GK8xeSk?UV$ObL0qU+EFZop#Llp&Ee~i|<@OfC*1&x88u!lwj~f zxwy)ezn=0q*#85EMrWIJ<)n+kJU%o&coL=baJI>lVtr>^CiLyuFwXjUf_@0>%O_2)Cb7i)YF6fM>bI&q+H zDpp0Bh-lc=`Q`SR4o~i9G)KJNJqMh+Bb@skrg+DA?h#!+{IX&^tPi{FTRi^-tL+(Al zBrY+%;-}^%I1s8HPzwi|Q;7&TCPmbLNWK9!f!Z*88AB`BtGjQ+e#xJ)ZcV=)KkQ+!i^`*bxPUkvbO3abrlxtyMST=Xt|m?9sPAJLct(TAY;+6%SH zF`Vp>VTZ`eGo7Nu2p??XK`zeAwT(WV_@_`Q?CM-G9P+4F+P5q)j_q9A&i4$|_cG|V zSd+RG@_RzoqA@~=<;?z>YC)PxfZ4Qk#COLJuZo=*%E!o>=h<+48+Fh$pZ!S6QKnV5 z{kXFVM|hvJn5c2J7@D-?@kKz;VHfw8Mbdt}7@GBr%6ap{xUxp{xS0v*xO`C7-OQ>a&E_=BumDx73N2A+D4Q)sQ;UILTs#QyCQrMm&WTn z=%(y4ac{Z36aciq37%|2%12>ssrj8vo~33NFJq2i_~HvyI2Tq z#ycKlyp+dpgkW4U$u48elG-YJ%Rdd&{+SZ;2D385Q0umSRGPTIyF? z)u%aaO#O&``(}hebKPOO{AS8ou-G0Wx!Y z#MS-PCq5r<30FPar0x3mTV>fzR4~2E#Gen>;Lxuy?v$b1L1>B{9DT=H^jj{+>`n|N z?wY{5PRzRwSfgAcE^k(4J24n0wln@9ol8>&#WH;gMDT~6Cm-}I#Ps0+#b++!nZQuW z!;4RRpVU#hB%J7e6;+e|#)kr9`(af7tV?Y|O^glI>ipkOZ}LI>sV@fHmNwR~k4LT6#p%f{t1 zDmU(|{F1D1wJB9;wM%~k+E-N*%*!xyxO7!Qj4L*M~tH<{$Y!iF1}uID=-YEkK!unDm{Kna_9Fc zUke1Ddl=4x z{&C@3Jz)8L+a!#ptf)yIhg>{2;(x`xorDLMnWnoA8FMlZTjRUVciTKnfgR~A;!ZB* zhySl+)bXjXtvON^K_+ve7%|p8rk)iiz+hKsF+Hv?iyC><@@d_=UM|x-Z5aL@`ozQ@ z!7Jb0RbBIQwq*B6iVWevC!7;~(}7jqNeM zy|k(NSf49+>Ss3j+v12(Z262Z_Wx|<8};(dhlG)0S1nWhU2Pud zZT9;s?e3acWhip3@j41`s$<(Mnj%m$Z!MoOG0>cuVOzh#MG?pIA4XrwE1~xaLFJgn zcy=Mt4r|OeH5%{H{-C>fIpnhv;&fx<`v2Sg^XGr@2xv-X5Dr092V&R14_-+1x((79Zp`y7Vpa+Z9crbAs|!(&L>@E1vV&@ze>} zvm61xH*m?m#?ns?B6!DuN%AV6I+Y=bWYNl?u`XZ_!fPEdP3PTKrf{sF({62wan|m3 zkgGPB@CFX*3kK`GFp^{U8JT+AdFZ}TATmBBLv?vl)mQXK%w*ys*-D+K-6LlDP8LGJ z9*+CzNMt#-q6BzL{b>_w2DSObf#HiTazZyhUTa(qsyIFzW=}CWa zwQHYDN;*{AZZ~{*_Ysf9@-)KopU3YPe*XL;?vI5~v&~@Kpb^``yJK3?$Czjti=mEz z6~VLME<&f}EMCQ+!Q_HV8v8}x;+h|2k0NThgtXudjQo~t?o1z)SGauV$}88TTs65~ zu~RWhrHNl^mHc2%zyTDp7ntUf$2`kv%vuPYP)WGk-srA3O4UYZ`O;qu%GrO;H_)hk zl)u+en3#BQObiu<$wUTY1iF_8#u^k5fL81{9&vQO4H{lodSHKw32h_4-~}CSM|J_S z!Hk({d>P3>_DedkxeF6d&f?@%?h~J*ReC!pTNJ&p&y|0JXph4cZ`r<_cOc@PexiBD zp`SPQft9sbZzX52ZK^-#20<}s)aQg%^=40P-^jmR^qqo%{gb2IAsdtUsm*v$|6cV{ zFI1QM7C!hc<79r$t+yumoYJf4Kb%9~UP8)YCo`J=Bz^-w(wj<0q-(E^3-zBM`a-nd zbRO||4+g{5vtSY^*)92%{A)V79{k-TAeXEXqZB(Cq)0hiRWxGCamJmm|5N0c)>7TJ zoMIvgcr2Fv#$?qr-noy0iLvw$D$VnWB2<5z@>_~YWxb7SGM{&Tpx(l7 za>dwNK2^9Ii>dzrLh`+!|jyWg-C%^nyH+)hb3Go|@oolt<=>rb_O3WEn z)V9RbDMPYq_Z;0uKA~q zrhoQvEBhAqY8;N7$OfP`GKYmC8w)9|F+V`PwH>b0@WZ%ItZ^51+V>HNH&hNR-4Pz7 z4eRZ{z!k!1BN!k=s{SRhP{&9n$Nin)Z~m;YGfm6=xuR4EtMhi7x31Pe%b{@1^K zJ@9vU82+A)AO7IK`nCDHfB7oyuP%eCgHeDy4a}9*Fw8aMTgb5feB54a?H${8*QUF8 z`llykut*rfvY%CCsuSJCIuF;O$0f_TcfmJk*aQe2!8Q%}v_tf9{HhI5XL-|UzcNw* z5Ebr#!L4p~aX9nH{Pf1CkhjSYdy=SH*LOC|H`p#_PkgS)){D`ucX1g84Y~RDA%ll) zM@{2a;Bx_b4CE^j+=-2Iao~n``2OS1@!fYnKTURjEQH>0y!3f{=;Y=69mubrj<=Q` z?>9XbLkk7y}UjijDJZ^3tF zNYbbG!F5cqE}z)MUYW=yIGY&ZZkW}j$i$6v{na zFO)DIfCnh6Z2HlnR~^U}&p?C!CSVfowW{fAmhy&7G_QY&-)zNXDX;20?(>_VBA~K) zyy1BF_3731fD}}nY~)1UE{?b0kc-K|zfTqn&6u^(2h}ud;?gTFGo9(%cv;5ZiaX|%TuWigj$mUyqb(0wO zyfzvxk7_ag2~&gK<^3F^hBT{yU+h+AQU;A*c~}887J;A>XGk1!3W1$RF@F)K{5%^Z znWpzW2?uPN1aEApKA4T?8&0AKI7c|}X0)h@!WSq?F7k=gwyI3b2+Q$6ELyD`Cs8bDGD)}mzsm`pAft>woqg}S$1wV|SeoM4b_zsY2C ztNn(6Ga2yb=^5v@5g^y?3D zXfC6>P~7gm#P_ff(HigmO*owJj=}cjW2cH+6rHXi}Q!_=s=zqirAHTNw)V zZ1RX@e`6K!tA+W^I@E|4r}oNQ=P6V>#abi@KN1qV9G44Og z;S07JljJJ{M=tFf@!0wRR{7egBh_b}UiI+X`-}gpPk;Rv|1$^YD3)7#drsL}=Iddycq6^BMmOnf z+AV5SKK`-lTHqTOLyOjOQ0k~WJ>Kd>SyAQC>a9{CdbH8&<`@$`9Y18zSK*;^;*&TU z0%Y0Y$ot9{R}elfCysVHiTecVi^ztN?q9V-cltegq}ISS=G!-Qs%^SS9p1;H=lk~` z@Wapk5#Have_iOh%jD+cH?7?6uZy6+!{;xb*TPuyO{0)<*LB}^o)ej^gTjj@48|2V zLlCLoUGUA=$a2ial0QXs*xOJxIwU{h# z&?FBtv8EJ~;5{eG9}A)Hzx(0z1xHRiJWAg0UtbqOKhfkb$(S)9xA$grpZ*)Xn8vjC zfwPJu*rYMzLuta|vwl%yJQu+iJ>7_^M&jMX%I=biN3uO?J7^A)fB zoI@*!57DE!J_ma|F}D0YF>vuf z0fFZe#>%@kqc%`{YnG;1$hb1m2ok?9{8!$9%&6K=FBmW;m?~}e_P~iKePhhos(FCE z$cF|y8@2LcYhEXAT-Z|xH2zU~8GSwj_M7Aa|6JnBIKE=R!mj;%RU?XMR}uS8x9!Nu zr=DBFgYwHUZE{!X&Grd%OgA$)0Na-CG~!va@lGj z&DH9ZrjE?NS~Bu9p7`Os|JJmrMzl%p_m;yIN+{R)CK&}Za?S){W=RDI-albbZful4 zu34!qmO(DD`0f4h@|)O{5Y9S!C(U=)LSDxddfrMC{?kD@?)1wpdlH~OWEViXW8Ra! zbrLqTI(^a5=PJybJ;zsQ&YW~MZ+N;x1L}X0y21x{K^k{BFF@H2+DJ9jhV|o*sRm1a zqQ6dTd~K_u!vS16wDma`1NQ}z{}KP#_(=DtlK^v)`m)|fZha_6%h~I?_n8#*<*0Uh zOeVE$Re2lmIPvo7(YLs8U`iy*RS3%|-lI(D`;f`2e0T=oRey69O=7k`OA>i5sp>LCp9y1=)H`q4b zaAMn3MTOA@i`nrYo_b^{5B=q@Y>#MqQ-XmxYHc1T9z<|;?5w>#lKo8$>BC{GId2%9 z9!QSU#|=APpW-eT1mk5ij5e;aR(~#TikG%=G83R=_2jLv5wA@KziNYW zEq8{Q~f@B+a%t44!8J{#-{HOyNff<3IoEi3S?iqo_f+Vxcw+_9x z+d(n-GaJ~6etnHEi@zRF`wEhTT9L3_Z|#t|GS|u_T@8F)6~gJcd7MACyDt1)O{;Uv7}MCbgVn>f)2%aPW~Fi8plHDyVu3?*M-nm zAG+VGlll1j<>kxk0{N%HbM{T+7{GWQao>cD|D!8lE>a-zo2nxH$Dk%4tQOxj)|}pK zj}f0t%BL+?B4sQ&I-A|D=b+69JLbXIX<&k$ei7~QW&`;xtMJ(oBZg^+@CGY4%OZrw z>8xiPRH`DYludJ7q6BtHr*VXme6&}F)2;aq+sbUy~R%KJc=xS zWl}b5=_+n%t?~!gNgAtyQ6&-ESs@^bs&D#!W(a)7r;$G-&KTuR({P~_DLD_7Rl#wL zT5L0C-9h^2w)7YH=z)h1E`0W1j<<4C+gSKPwz6xV4{I9-!QxN!i^z*5a_CGc0dH;| zY~`cfZX)Z-V<{9)I;)z!W3@93irYMh>|9a3E8 z8TPK+*i2s*!s zW>6a-d8j;37#QoH_;Y?nlkUky^%MF&?!pD5`WJ_*Bo$LCV;C`?dHCzh@hFd8oH81j zIz&kBU8n3{Kz)YW1aoJ1(}s^_KP8?p*mEKz8eB|xCw=7q%v$NHEl{}PUiNuNKg-I8 zyjNCVKl?9SoUK-U9C8Ms;Tv9~#8AhRgZqhQz@s=jq`b zr#hIJ0u`33xMuU_8DloVOX@WpWVbSM>|`VOEgf2Wnx&Gt9&u7O@x+t_%JQjm@))P) z9kW@nn>EE;0Lz)fx{{QiIMnRj|5hX1Cz|A-#Hy^dJ_jiwX>_w5Eyfre$k?pdYW&$W zY+&Oh?o!#^xouR}dOONI#aY@iu)O!rH+&o6jbNRXeTH9A9FFnXGh5S>;=_`T(WBKb ze!LC(|N8V-fARnL`t`5=PCtv=55qsu@pw!0c7OLTU#GnPL>oTOa;E{`ZOJ+g=Y__; zuqlHuJ+>3565t(3u|G`TGO!Iz>CirI$wX6z9R{YffWKs6bI=ow~&UbyiMi+P_iLMYo~$dTvs-CW+5yt@(0?s~GF><)REsuhE@`XEEFA+A!<) z-y%?FQs8=q17|bmuEW}izb_^3G4hBm4u%cOy=?1Vp`X0Ai?<^>JIROQdHnuu;WzIx zwyJK0G%*lYfAGYuNaeclSb0A1isLVL8n#`kF|n04^(K=Q4cqzou=QE_v8f~?0Y`9i{~zgY1>?lOhs{olNlK~7fU=%tkD(U!n0K?TGcP_;rdWX07F{h>94(rvzrL&6 zHRPBLYqz`l#P`w7z7KkkY$;dCSZXygt2bRfZ_KvAYa-Lugk0XPH}6cv?CFHyb&@#Y4U57LLTY|jm34_vUna9`=nGUsiwy0H(L7HnkX zZXf^91k`X0vey>+on^Q}7OKd)w9R6u#J|&`(M1rcAlrM6i#*8-*Zj;&9%azs@>@^f zhtQnSr^%b7&D7Bc87a-Qe21v*8xm_UZgIW}2R`z22zph*$a?GVnu+1?MFI3z%{JCo` zuAiSkGNj>XRNsf6?eL&QsJfFAW9gqW_>FkcgcAJpw@7>YtvmpEt1*2NxWf5yGzEL3 z50t$s%*un#_Q<1J+s18|3l4o2b4r~TZ}Ry?VA-Y6*3Pg~@utQ#g^Q~Ah9!oR$|gv> zpJdo;VB)P z-`ccjeJ3pDOnk*@r%mUsGf8IGy@O{cqL|Fsa9x&f@WvG|EpM3H+F2JlpXmdv_J`w& zf9XMheL@P*#U39u7ah0h=MtV_miFO-wqMK9Qugb#@SlEs_n-f#zw6%yy*dp4z{g`z z6ff`pojpFCiz{bqQ=|>icb{asI;5ENCLd-AhO0?&T?ly_{cQW{TGRzI-??Zt)DbBER&>vUo~_!F8Ny(De5 zZNu`hXyA>+piMm6M)!?FX?K*P&Ig0lWC99IGC^#~q_^^NO*GyN_W7D4`JW*_ug9}j zkN@Xe5Dcm3vv=>l#}7aJ^7swN`^){PdaF#0ulFzb^5u8<`trHjqh24|f}%GUXQh*r z6ANBC=E0FK{tW12BJXchf38&2D&xDOsNS1osyuU7lzI%^%@4v&@3GlVhbo$$; z&!1m?;|op?Y$4JYA*?k>lbz@1fUQ2$L$u74Sy{*n{dWvcznS_Yj^h99(#4`p9I5)I z5YTW{I)1H8c2`f5a~3V*&L3vaH1X0&ISspzpEd+acPh2kBP5|=}!jG zQ7#u#m*T7!r8XJgc~U?8Eo!lue6!e)6S!he8w+VZ`eRl(0G%x3FE;*4b_;!Tmdu>j z!#mzK@$|=3C-Iw;!W!xri=j?F)Z99&dz%O}6FFt`0?|{gRJ`r;Q`te{%mJRz%{Ct= zulc7h@(PwVepp9?|BW8`c?84(ClSmiJcy2SBKySSg%)wG^T7Lx5Pt>1*A+R1HZWItONFU?{8}o({d@vNXl5l zyzw_$HAsB)Nfq-J2{NHl+_Nr{^?|`XIJx+)eS`64q?RjrV}P|Bvudnz!q%4G%<+-a zjW}{tJE%A{%5BITj4ZFM(;J}~lSTiQ;|iDi299xW6er!?h9$-bc^(+n@Ch3X(FGl} z-{p01AMPkcHbme#`-+)jKEIABrlp=f~f|zW5#E0$WS6=$Q@Zc8?A z=TV*~AgUSRVYkQ?7~ypR$<>W32E#rNdUbS``U2BXLD%;Dh_`?r0j*EAr zy6*H$s@q;yS=_S?Ed18kM;g<1UfGOB?%dh{t{A!6UbNkeZq;V!h5HQLo~YRr=dj}s z8iRUR#dAP!ivfQYv`PuJ@QVB=CiykYFPXEhN-%_D69+fek3T2jastu2HuQW7(jU5gu6eMJ4C%?v+JEHUFC zF^zGTEZ;A&#kdyQC58sc&I2T#54}c0-ROd@b7H^oQ!=g#KV^9L?gQSxfB%{Q!@(bI z+zvf``utcV|B4w^P+m62oCITa+D2WrSK;FM6faJ^gW8(fkq5%PWI`nViyT1MFR>D`ao((nQI4~; zXC|{1^Aw+xcf!0raEN=sj_brsO#DShu-J9Vjn!_3*IA2Osei+?F(5nsyTdPf&oU@* z9`r1QSubDzqG~pr<9alK6!=ksh^rksNdHvxZNs|bv(T^Wg7v~)Y+#?s8o2@U>(53Z zP78MI3leWmG^Q1G0inGOV^znJ7t>Uf6NgCuV*jZ&Y2wx$a}&vgpHiP`?$5YV9XYlV z0-X7J9~5(l=o|j9O7D0-V||mKLN>t)lB5q*$?hyc*JS=y*K!=+`KxoR8BsyS2Wl}= z3IHI5vnw^MbS>X?@7$(AVzR6Wj%Ub(vcv0BE11AE7-|AE9{H(t99?xbHn^g^2+fvO zQX?_Jn}O#QeQD=_vhBp{G;RTg1b-Ko{_vhLSdM>%l;|(Kv5fh}?Gz4rX zb24p^KVz$gr-yqhX`KCtQv0%n_#!s;&6tgLs1+xkiN?epgMee?o4o8frzQZO<&VA? z>d7eKj88l?(;fVN$+s78OBH>LEg#V_#(d!vB)G(s7gO5(_0oO+;un+Z{kS%djPj}4 zFp`VJW=x9U!$|%q!BK*87N~wY1HolnW_i*f$FVMg=@FQ}bBD+Qu>e{dS3rMtV_o^P zsa^s{^ur5$5;X*2b)@&{>Of96;y?h>5>(NwJ9Jf z8=9rz+lhU`PO|6ucPG9ENq;3Pa?EzhuJqQK^i>HjdLZule`AqomF!^PN+_T077^{j z|MI?FD4XdSa(=JIl243;!P=AOHsnrB-PrD8m5qo}-Xi{kw)~|zJ+^djQ^J}bTb+=l zB}WAz>p2a@lVi4{7)tqK>E$xdb6mUnrij-AX^^`D#wRrF!rw^bxnZjwPK;4q^|P(b zm@HpNj%2%F-cO8gA`NsnZ6QN&%y| zzd_2O$XR&EV7ap&&Euq4Hi?7$sfKsq5>NlHm`wkgwO2$fqSDO3k=nNW58=Xi4UvgxSTAGV`Uh7Fswc6YRl z%BDM-?#kk?WOf62qs#R8M(>AoE(*6@>$)b#(5^FMLHqHhpS{D+e*PE9kQCpMXed3IGKl${WSU&Dr>>hSXUatNx%on-qYibKf zy!A^MLY~7aJ9%eEtm#_gll=8rw4&QAI@Prxwn?tibo*(vY#X^I7<<+H+Dq40!)weXJWp+om zC(})AOM_lpR1AnJ>(F`!nP<4wnA3g}4dN5bO(>+)#&124zog%}mNVW(eo_jNHFwup zO{hU6+4+M^K6vpMGz~OZT)gtaSnkk2AHs$|*}l!_KOCC^mJSbqys~91g5H6KL(a1K z;tBOuMUfZ*Mr5qDcK*xw0$lhXF7i=6Cm(p`tLUK>{sGNVG~w3+xARMGmM66w{=9oH ze%YMoyjT8v6ueiy@QVOWwUA#kfA#!^xmmApbx_>k^QBCn$q1gH4Qg$IZzul*KBGM4 zO+JnHv$zo+a&FfN=Tf8RTN>*BR&f_O3B*Up+I_(E?G)8~7TG~PEK(TfDBsfO+{!WHx zhqI`RthLdh6=x=tPs!!V#97QQd6rbx!dWt3wmp#b^m!5IAlX zBXx6KbI47J*UwU(Bg|dr%IaKdGpvQghc3LqtR!g&Wz<<3{^-!@(qS0 zbg;2~kGqaDmjCqV`u5{V;jvG&wLMt*7TR`AZ(GNT8SC|NCGm`jr-!FC;}Sgowp-xM zf&>oPAD~>qeLQTrRC4EEuXdNv>2qCYww}7uuqO>&En;prT;dtOE@iJ2Zkw}jS;$Vh zi6y{QBli2yj`EJnboxZBv0rjq8KlF86Z_)5Qg5`K`tx{Cl`X92vb-sq=^g#J5fh{d z=^V7S0Ov0$^hlWR3DvyChJ>d{NlXVYyR5W+)y2;ve)f%x_(7H>%K+DesVpn)t^7>b3E-cWO_@%IKRJriV?~zRUn{l0ERJ zt7PvkrtSITz1R}q&_k4v4xiFYO3cG#lj79mI&*d;`KactYnByUvbqe!2WO>|v(r15 zwF4nvUd{p4#hCJ2h)zS>t2gzea@32MBmCrso&yG z0L(Q33dh}s1Z2b?FhJTXcQ`2a!#the<5K;%A7JR9?9nrkFJ*Yj2#myNJ~y>?BrpU+m5{;rM7NrdzTy4`$_ zpeU*KbK}Cy9~D&o=F+72Brf!|6E@m;*nyHj(OcZG{{Y(W2)(;vYCN>YN#O|^zm}g4 zChe;{#`is$iQmQEAJtFS@xw`jKWWP#w*!7wE+x%x8 z25K!|6gVa-NoY=GUo(;|;=MFtP<`@5af^O%EcbrlQQlhLF zR<4cJ7_%08#yk;R7~iGO=<3U(Djat2iC<=-25qS3UQk}a1q1CcNLBHEqN~m znZ&n2I(JLI3V3&a&c>^I0+taKDmExpuzDen?!oY&6boE?)Pz`<6rd z-^#CdCt&`b_{yHnr1h*UR6pl=<27jpldACHAm zzkl~XybgB$xvk$8{kFp{Z)G5fqdYsXUU%&$eh_OxHyWL z#sDXzc=Gs-y2o$reEiwZ@$vg#yyEdYynKB*`MRx=umAt@^>@ebgFY6#YG?3jE&6lR z`LjJ^)%cjXjen~0_>u?xj$|in9PiOX^Q-8LfkDMf>Sgz7Ik^1Z&G{GL&kRnR*oHq! z>$Wl92p4mcT>}@_8^x45^**C^HEdYz+ycKbErX`W7?B_gMrIxw|>2i*2H6_ zG2Q^kMb}L-$q6>c@mcZ5MibT(p4hA2b@F8qG!wd9zbBR2Vzo3{)IT{srNj$$;Mwj@$fIh5X|izQaxwKPMkI^hGTB?2nZd zbR$7mi@vQQ0N3Mz<1{psd4VRySy0grz;ALl$4ee_f_C>D-M&?(zn!BK9J|1+IAE+< zlA-de@8b}FzP-`;VLvhK05%pHSl);w^X_T5=&Mj0n{qL=r3(hjF4@@P$9L`6`oCYq zvrW8gRBW6eV|&LxQ?N~QTB!MB%hN8^OldS;`?7uKWdnlX7G|wh+^-&z4}Meii&DPR z*cL%ApJi)yLCJ#xW8SR3jj<7vL^rU6Nn9L0%215UXa9+%<1xuii)MejqxsY`njBvj z0(NM$3p!5awWLcqNK9-4{Eee~o$2Bbg5Ne4aeqQ_M!qY<`?&XtGH-m%l(PKqazNhf zc3^HiW&_yZtJ_cW29#gst7Bus1m3P-y(_W3roLQ^xf+h>g7GHTai^vNocbKNwCVgR zMp&_yj4j$Cdex`#*2hwPO`Gm>cqp2`wotfJ<)htwUwQR~TzyOX91XX;f8F9N!S;|U zzJJ4%8wx(6{0Iad)TF)~I``4(?_yD-E^h6j^78wP4RgYMDYu9Dl^Dy6A*x#S_FR}@dwyerIKq^gbVRwi8SZ`d*I(?z2%2;Ln zlW)8E#93@x^EaN)(3n;H!Z4I0_K>}~o*w37F6r4ZeU2&0{b`0lhjqzu7WiEJ;Tf@Z z_$9CVazBOklVjti&-&~?jc5_Be_6ik7!gv>pmyZ@-SMqDdjl{wpRNu$o=9*l!}fSP z_T)*1ll|s(j`uhB&maEu#~=T{|2zIKcKj{9^zZ-p)$8&3<(L2cV^Q>V&E=mw{&MHB ze05s$ZQD8o*gJ`x16#kN`wd#5w~xpOJ!m#g{gaPxaPXhZv3skqOB1buUG~q1n?vwt zWleue8OdKqSC=Ej5rgg7EKxvFxIs7q_kSWc;RuoP5_VafneMjz zeYUG-k$4~_!EAR`xonsHxqfG`s;x4-ZhlQ3=HLLBwYcb!wz}KfS`?UBv*im3-B0{j zP8NRo$4{6LXVx>SD8n%hguiTsO`i#J|zgCy*~MU#}bGU#^=x&qsMJ{8=6637?E!*?;NE z3GgP|*MWfDp*<>E$$YfZIjWo?O_glwN?M+;3na&evj;duz6>eWuil#4Av2`+!SA4k zN$uI5vd^PE0Y4rGa$x~&*MO>G6D_|A5(^%%;E*m@grRx@d!hRaoD}7uhqZsA9s2|OWB-mW|d}3y>K2!`d z?7;O8^!(XMJGihU9E0`^X{7}}FVpqQ&szD#{JoG!SuE277b$CtSBR$)3x0%w(4XWy zB#%&gQur#0WE}VSRrLWX2i5p_$da3!()2LOFRbsFBtrGL z*ygm*c+I<9GMgIkq-6uQ^#|~zdiWdQTCErQDY$`lzCBms&W}){O$1nxwPOGhzwtd) zN86cR!}!Ef9mG~6L-xP(ttif+H+MTNjq-A*b~&q!c-_ErN%o3d+^^-2R`%dO1-nCM zFx5q$8T_F#*gV7-s-(ac#LSiHHU(o7@h#>-t!;VGLZ=CVwRTfvk{4oaW;Ba*;#0>=yV63Nn7ejf; zyWRj@_otBVX`ZK2Vr5@XLbLO+nU;Eb*t^s7_Qo-baV*p}2StBW@|BQ5WTcPXel|ur zycp~x`$51z$8``b{K43z#!vwsr#VF*Qw;WY@K?t$ z+5R-A=<`{2b7`cjo#e{E>YuiL zy-KSxdRF+TU_;4NnRV4dT`#S5T@`J1mB@^;!m?S4ri6m>%DK z`1p8v`SY9F$Eye*u8W8tu7>*ln)Uvw`0W$Rci^wU*MZbdQSh}%e?SqFAJR=QK#3QN zv<1uB&)cZMX( za!Xbh1uMr2gLE(S_~uu6_x2BYczC>ScD``nv)gUZCwcmM`~AnK&8HqN7noq>WXR;( zH~^uEj4arvg*lFs5v-Z2*8yU6+bqBRp6qd{ZC~`am+h9@^YhcT z5xQ+ggdS9ipn?-i{#s!?^~M80G>g$^ao~@Ahqlzx9p{JaGsKDF4POiYrwNb*FpzE@ znYG2DI;O*R@zk>xJKekY;Lqx&$m`GQAu7^MDOj}Ug);$+;02x4W@z4o1oT(w6K50R zpT>I$Qt=$rQVl7MmK&l1^uu3sQ+of}Q!Sb~xIg-B!%Oq89pANoxow^r>x6aW{7PFG zZMZ`VNlN`2d^@p4s&>u`L&cYXt~C2nT3CznKo_e!-*{UBCyaS(KqwA4U9w*jTC6mY zwlJ$wZy(6%c##+Gtxeo^x(e+H`NPHSt;VxOJDq;|frJFfH|fjcV!;7l=p(-a!>F6t z(}FEq2;f^?tQ4eYqdqw#9r#!5y%Yi)hxP+MQf4<4wkIctw?e#~v{ba$di%wBK}^H` zCVU|MYP6m5O4vgmw<3O|-`Cspy3{$-Yh$ohz9jb(v)1EC4`qNESU z;szZEaTx<55PM{ipbu(U>qXc z;f>?1kFhFW#U7D8a)2pml0HijcS||2WO!5aWaMSb?}ZYtypENs?yKdwJdRIuIuoAp zxV)12g`Lo`v53+i9K|A|shDx*yV6W9GesDmr51Wci{H%@Hp88c_M9=u$PdTyf>+iR zgLRCH^fjt;EkF>$CS;pq#!}4VKj`)hrTFQz$oaKW5)!4gZ;Rpq?lKH=IcZ(jQ63Z7 z(7;lDlNuwZm?O$9BH!HH%8!q+OOz;j8_DCrRFzYRfM#@L1v_|8z{_o8)Bk6C|=I6ciAA!Lw0&>(yg8%>k07*qoM6N<$f { - const api = new APIServer(client); - api.start(); +if (api.config?.Enabled) { + const port = api.config.Port || 3000; + api.start(port); + console.log( + `[Dashboard] API listening on http://localhost:${port} (bot may still be connecting)`, + ); +} else { + console.warn("[Dashboard] API disabled in Configs/api.yml"); +} + +client.start(configStore.supportbot.General.Token); + +client.on("clientReady", () => { + console.log("[Dashboard] Discord bot is ready — full stats and guild tools are available"); }); // SupportBot - New Logging System diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c42ddad --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2479 @@ +{ + "name": "supportbot", + "version": "26.1.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "supportbot", + "version": "26.1.1", + "license": "MIT", + "dependencies": { + "@vitalets/google-translate-api": "^9.2.1", + "axios": "^1.7.2", + "better-sqlite3": "^12.2.0", + "cookie-parser": "^1.4.7", + "cors": "^2.8.6", + "discord.js": "^14.13.0", + "express": "^5.2.1", + "figlet": "^1.9.3", + "google-translate-api": "^2.3.0", + "gradient-string": "^3.0.0", + "js": "^0.1.0", + "js-yaml": "^4.1.0", + "moment": "^2.29.3", + "ms": "^2.1.3", + "openai": "^4.50.0", + "systeminformation": "^5.31.5", + "yaml": "^2.8.3" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.14.1.tgz", + "integrity": "sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/formatters": "^0.6.2", + "@discordjs/util": "^1.2.0", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "^0.38.40", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.2.tgz", + "integrity": "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "^0.38.33" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.1.tgz", + "integrity": "sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.2.0", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.5", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "^0.38.40", + "magic-bytes.js": "^1.13.0", + "tslib": "^2.6.3", + "undici": "6.24.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@sapphire/snowflake": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.5.tgz", + "integrity": "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz", + "integrity": "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "^0.38.33" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", + "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.5.1", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "^0.38.1", + "tslib": "^2.6.2", + "ws": "^8.17.0" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v16" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", + "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", + "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitalets/google-translate-api": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.1.tgz", + "integrity": "sha512-zlwQWSjXUZhbZQ6qwtIQ7GdYXFQmJ4wYqzcrYJUxtvzQQwUP+uKUb/SRJaBOQuBntjBjzcdcJoLFrpCKUbIkOg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "^1.8.2", + "http-errors": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", + "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "12.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz", + "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", + "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/configstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha512-BOCxwwxF5WPspp1OBq9j0JLyL5JgJOTssz9PdOHr8VWjFijaC3PpjU48vFEX3uxx8sTusnVQckLbNzBq6fmkGw==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^3.0.0", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "license": "MIT", + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.38.47", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.47.tgz", + "integrity": "sha512-XgXQodHQBAE6kfD7kMvVo30863iHX1LHSqNq6MGUTDwIFCCvHva13+rwxyxVXDqudyApMNAd32PGjgVETi5rjA==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, + "node_modules/discord.js": { + "version": "14.26.4", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.26.4.tgz", + "integrity": "sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/builders": "^1.14.1", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.6.2", + "@discordjs/rest": "^2.6.1", + "@discordjs/util": "^1.2.0", + "@discordjs/ws": "^1.2.3", + "@sapphire/snowflake": "3.5.3", + "discord-api-types": "^0.38.40", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.13.0", + "tslib": "^2.6.3", + "undici": "6.24.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha512-k4ELWeEU3uCcwub7+dWydqQBRjAjkV9L33HjVRG5Xo2QybI6ja/v+4W73SRi8ubCqJz0l9XsTP1NbewfyqaSlw==", + "license": "MIT", + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/figlet": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.11.0.tgz", + "integrity": "sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ==", + "license": "MIT", + "dependencies": { + "commander": "^14.0.0" + }, + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 17.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/google-translate-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/google-translate-api/-/google-translate-api-2.3.0.tgz", + "integrity": "sha512-a7MRJpSAoS9HyQPE7Yqp5jYSRePWju53+Je/AkgU//zbSmZhy2tc+MvxlwbOegpptT7Ep6GCt7Q1/j7WmTntZw==", + "license": "MIT", + "dependencies": { + "configstore": "^2.0.0", + "google-translate-token": "latest", + "got": "^6.3.0", + "safe-eval": "^0.3.0" + } + }, + "node_modules/google-translate-token": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/google-translate-token/-/google-translate-token-1.0.0.tgz", + "integrity": "sha512-X+cONF24KI3PP94ih3L8QlqNgVxZxsfOyJtX93UISO7TRdTSrFpp4rmDpyS/x6xRxJOLcd6ApCTAkB+tNFtc3g==", + "license": "MIT", + "dependencies": { + "configstore": "^2.0.0", + "got": "^6.3.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", + "license": "MIT", + "dependencies": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gradient-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-3.0.0.tgz", + "integrity": "sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "tinygradient": "^1.1.5" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/js/-/js-0.1.0.tgz", + "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==", + "dependencies": { + "commander": "~1.1.1" + }, + "bin": { + "js": "bin/js" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js/node_modules/commander": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", + "dependencies": { + "keypress": "0.1.x" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.13.0.tgz", + "integrity": "sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "4.104.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", + "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-eval": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/safe-eval/-/safe-eval-0.3.0.tgz", + "integrity": "sha512-uPIAjU2zpyv2QJCZ1zaWZKnPv/5jgkaitE7WHomV4Mxu6kgHY1ruIQ1oTikEta/Sux3E8pZAozzJRsAUu3iDZA==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/systeminformation": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.6.tgz", + "integrity": "sha512-Uv2b2uGGM6ns+26czgW2cYRabYdnswM0ddSOOlryHOaelzsmDSet1iM/NT7VOYxW8x/BW+HkY+b1Ve2pLTSGSA==", + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, + "node_modules/tinygradient": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", + "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", + "license": "MIT", + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/undici": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", + "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha512-NF1pPn594TaRSUO/HARoB4jK8I+rWgcpVlpQCK6/6o5PHyLUt2CSiDrpUZbQ6rROck+W2EwF8mBJcTs+W98J9w==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + } + } +} diff --git a/package.json b/package.json index a0e7018..1525f73 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "index.js", "scripts": { "setup": "npm i && node index.js", - "start": "node index.js" + "start": "node index.js", + "prepare": "node scripts/setup-git-security.js" }, "repository": { "type": "git", @@ -21,6 +22,7 @@ "@vitalets/google-translate-api": "^9.2.1", "axios": "^1.7.2", "better-sqlite3": "^12.2.0", + "cookie-parser": "^1.4.7", "cors": "^2.8.6", "discord.js": "^14.13.0", "express": "^5.2.1", From 264dcb3053f8157d96c975c32592799328f04a3d Mon Sep 17 00:00:00 2001 From: Char Date: Sat, 16 May 2026 16:44:04 +0100 Subject: [PATCH 02/22] added dashboard files --- .gitattributes | 1 + .githooks/pre-commit | 3 +++ .githooks/pre-push | 3 +++ .gitignore | 7 ++++-- API/server.js | 53 ++++++++++++++++++++++++++++++++++------- Configs/api.yml.example | 19 +++++++++++++++ package.json | 2 +- 7 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 .githooks/pre-commit create mode 100644 .githooks/pre-push create mode 100644 Configs/api.yml.example diff --git a/.gitattributes b/.gitattributes index b98d0d5..a206026 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ Configs/supportbot.yml filter=supportbot-token +Configs/api.yml filter=api-secrets diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100644 index 0000000..719f7eb --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,3 @@ +#!/bin/sh +cd "$(git rev-parse --show-toplevel)" || exit 1 +node scripts/verify-supportbot-token.js pre-commit diff --git a/.githooks/pre-push b/.githooks/pre-push new file mode 100644 index 0000000..509c81b --- /dev/null +++ b/.githooks/pre-push @@ -0,0 +1,3 @@ +#!/bin/sh +cd "$(git rev-parse --show-toplevel)" || exit 1 +node scripts/verify-supportbot-token.js pre-push diff --git a/.gitignore b/.gitignore index 2b73f8d..0cb7502 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,8 @@ node_modules # Dashboard UI source (local only — publish public/dashboard/ instead) dashboard/ -.githooks -scripts +# Local git hooks + secret-stripping scripts (run npm run git:setup) +scripts/ + +# Local secrets — use *.example as templates +Configs/api.yml diff --git a/API/server.js b/API/server.js index db5ae76..ee27a10 100644 --- a/API/server.js +++ b/API/server.js @@ -271,22 +271,59 @@ class APIServer { }); } + resolveDashboardDir() { + const candidates = [ + DASHBOARD_DIR, + path.join(process.cwd(), 'public', 'dashboard'), + ]; + for (const dir of candidates) { + if (fs.existsSync(path.join(dir, 'index.html'))) { + return dir; + } + } + return null; + } + setupDashboard() { - if (!fs.existsSync(DASHBOARD_DIR)) { - console.warn('[API] Dashboard UI missing. Ensure public/dashboard/ is present in your install.'); + const dashboardDir = this.resolveDashboardDir(); + const port = this.config.Port || 3000; + + if (!dashboardDir) { + console.warn( + '[API] Dashboard UI missing — add the public/dashboard/ folder from the repository (index.html + assets/).', + ); + this.app.get('/', (req, res) => { + res.status(503).type('html').send(` +SupportBot Dashboard + +

Dashboard files not found

+

The API is running, but public/dashboard/ is missing from this install (no index.html).

+

Clone or download the repo including public/dashboard/, then restart the bot.

+
+`); + }); return; } - this.app.use(express.static(DASHBOARD_DIR)); + console.log(`[API] Serving dashboard from ${dashboardDir}`); - this.app.get(/^(?!\/api).*/, (req, res, next) => { - if (req.method !== 'GET') return next(); - res.sendFile(path.join(DASHBOARD_DIR, 'index.html'), (err) => { + this.app.use( + express.static(dashboardDir, { + index: 'index.html', + fallthrough: true, + }), + ); + + this.app.use((req, res, next) => { + if (req.method !== 'GET' && req.method !== 'HEAD') return next(); + if (req.path.startsWith('/api')) return next(); + res.sendFile(path.join(dashboardDir, 'index.html'), (err) => { if (err) next(err); }); }); - console.log('[API] Dashboard available at http://localhost:' + (this.config.Port || 3000)); + console.log('[API] Dashboard available at http://localhost:' + port); } start(port) { @@ -981,7 +1018,7 @@ class APIServer { }); // 4. Overwrite core folders (keep Configs + Data) - const coreFolders = ['API', 'Commands', 'Events', 'Structures', 'public', 'scripts']; + const coreFolders = ['API', 'Commands', 'Events', 'Structures', 'public']; coreFolders.forEach(folder => { const src = path.join(sourcePath, folder); if (fs.existsSync(src)) { diff --git a/Configs/api.yml.example b/Configs/api.yml.example new file mode 100644 index 0000000..17a4097 --- /dev/null +++ b/Configs/api.yml.example @@ -0,0 +1,19 @@ +# ------------------------------- +# API Server Configuration +# ------------------------------- +# Copy to api.yml and fill in your values (api.yml is not committed with real secrets). + +API: + Enabled: true + Port: 3000 + + SecretKey: "CHANGE_ME" + + OAuth: + Enabled: true + ClientId: "DISCORD_CLIENT_ID" + ClientSecret: "DISCORD_CLIENT_SECRET" + RedirectUri: "http://localhost:3000/api/auth/discord/callback" + OwnerUserIds: + - "YOUR_DISCORD_USER_ID" + AllowedUserIds: [] diff --git a/package.json b/package.json index 1525f73..338ec6c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "setup": "npm i && node index.js", "start": "node index.js", - "prepare": "node scripts/setup-git-security.js" + "git:setup": "node scripts/setup-git-security.js" }, "repository": { "type": "git", From b55976508e4dccd11d3c35aac1d3a95043e7afa5 Mon Sep 17 00:00:00 2001 From: Char Date: Sat, 16 May 2026 16:46:44 +0100 Subject: [PATCH 03/22] public files --- .gitignore | 4 +- public/dashboard/assets/index-2nPMgH3H.css | 1 + public/dashboard/assets/index-CkVwGOES.js | 187 +++++++++++++++++++++ public/dashboard/index.html | 19 +++ 4 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 public/dashboard/assets/index-2nPMgH3H.css create mode 100644 public/dashboard/assets/index-CkVwGOES.js create mode 100644 public/dashboard/index.html diff --git a/.gitignore b/.gitignore index 0cb7502..15e369f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ node_modules -# Dashboard UI source (local only — publish public/dashboard/ instead) -dashboard/ +# Dashboard UI source at repo root only (do not ignore public/dashboard/) +/dashboard/ # Local git hooks + secret-stripping scripts (run npm run git:setup) scripts/ diff --git a/public/dashboard/assets/index-2nPMgH3H.css b/public/dashboard/assets/index-2nPMgH3H.css new file mode 100644 index 0000000..ae995d3 --- /dev/null +++ b/public/dashboard/assets/index-2nPMgH3H.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 8% 8%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 263 70% 58%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 263 45% 18%;--accent-foreground: 263 80% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 16%;--input: 240 6% 14%;--ring: 263 70% 58%;--radius: .75rem;--chart-1: 263 70% 58%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 263 70% 58%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 263 40% 14%;--sidebar-accent-foreground: 263 75% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 263 70% 58%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-right-4{right:-1rem}.-right-8{right:-2rem}.-top-0\.5{top:-.125rem}.-top-4{top:-1rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-12{right:3rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-2{width:.5rem;height:.5rem}.size-24{width:6rem;height:6rem}.size-28{width:7rem;height:7rem}.size-32{width:8rem;height:8rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-48{width:12rem;height:12rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[400px\]{min-height:400px}.min-h-\[480px\]{min-height:480px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(70vh\,600px\)\]{min-height:min(70vh,600px)}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-3xl{max-width:48rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-black\/20{background-color:#0003}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/40{background-color:hsl(var(--card) / .4)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/30{background-color:hsl(var(--primary) / .3)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from: hsl(var(--primary) / .2) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/25{--tw-gradient-from: hsl(var(--primary) / .25) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/30{--tw-gradient-from: hsl(var(--primary) / .3) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/40{--tw-gradient-from: hsl(var(--primary) / .4) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-primary\/10{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-primary\/90{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .9) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-card{--tw-gradient-to: hsl(var(--card)) var(--tw-gradient-to-position)}.to-primary\/5{--tw-gradient-to: hsl(var(--primary) / .05) var(--tw-gradient-to-position)}.to-primary\/75{--tw-gradient-to: hsl(var(--primary) / .75) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-16{padding-top:4rem;padding-bottom:4rem}.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-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/10{--tw-shadow-color: hsl(var(--primary) / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/25{--tw-shadow-color: hsl(var(--primary) / .25);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-2{--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)}.ring-primary\/20{--tw-ring-color: hsl(var(--primary) / .2)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.blur-2xl{--tw-blur: blur(40px);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)}.blur-3xl{--tw-blur: blur(64px);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)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));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)}.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-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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.dashboard-glow{background:radial-gradient(ellipse 70% 45% at 0% 0%,hsl(263 70% 58% / .18),transparent 55%),radial-gradient(ellipse 50% 35% at 100% 0%,hsl(263 50% 40% / .08),transparent 50%),hsl(var(--background))}.promo-gradient{background:linear-gradient(105deg,#311957,#201434 45%,#121216)}.overview-card-glow{box-shadow:0 0 0 1px #8249df14,0 12px 40px -12px #8249df40}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary\/25:hover{border-color:hsl(var(--primary) / .25)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-card:hover{background-color:hsl(var(--card))}.hover\:bg-card\/90:hover{background-color:hsl(var(--card) / .9)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.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-md:hover{--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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-primary\/5:hover{--tw-shadow-color: hsl(var(--primary) / .05);--tw-shadow: var(--tw-shadow-colored)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-CkVwGOES.js b/public/dashboard/assets/index-CkVwGOES.js new file mode 100644 index 0000000..8a500ad --- /dev/null +++ b/public/dashboard/assets/index-CkVwGOES.js @@ -0,0 +1,187 @@ +function R3(t,r){for(var a=0;al[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))l(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function l(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function p0(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Vf={exports:{}},ss={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Z1;function T3(){if(Z1)return ss;Z1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(l,s,c){var d=null;if(c!==void 0&&(d=""+c),s.key!==void 0&&(d=""+s.key),"key"in s){c={};for(var m in s)m!=="key"&&(c[m]=s[m])}else c=s;return s=c.ref,{$$typeof:t,type:l,key:d,ref:s!==void 0?s:null,props:c}}return ss.Fragment=r,ss.jsx=a,ss.jsxs=a,ss}var Q1;function A3(){return Q1||(Q1=1,Vf.exports=T3()),Vf.exports}var f=A3(),Gf={exports:{}},Ne={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var J1;function _3(){if(J1)return Ne;J1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function C(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,j={};function N(M,O,H){this.props=M,this.context=O,this.refs=j,this.updater=H||E}N.prototype.isReactComponent={},N.prototype.setState=function(M,O){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,O,"setState")},N.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function _(){}_.prototype=N.prototype;function A(M,O,H){this.props=M,this.context=O,this.refs=j,this.updater=H||E}var T=A.prototype=new _;T.constructor=A,w(T,N.prototype),T.isPureReactComponent=!0;var P=Array.isArray;function z(){}var $={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function X(M,O,H){var F=H.ref;return{$$typeof:t,type:M,key:O,ref:F!==void 0?F:null,props:H}}function le(M,O){return X(M.type,O,M.props)}function ue(M){return typeof M=="object"&&M!==null&&M.$$typeof===t}function de(M){var O={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(H){return O[H]})}var fe=/\/+/g;function me(M,O){return typeof M=="object"&&M!==null&&M.key!=null?de(""+M.key):O.toString(36)}function pe(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(z,z):(M.status="pending",M.then(function(O){M.status==="pending"&&(M.status="fulfilled",M.value=O)},function(O){M.status==="pending"&&(M.status="rejected",M.reason=O)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function D(M,O,H,F,Y){var re=typeof M;(re==="undefined"||re==="boolean")&&(M=null);var J=!1;if(M===null)J=!0;else switch(re){case"bigint":case"string":case"number":J=!0;break;case"object":switch(M.$$typeof){case t:case r:J=!0;break;case b:return J=M._init,D(J(M._payload),O,H,F,Y)}}if(J)return Y=Y(M),J=F===""?"."+me(M,0):F,P(Y)?(H="",J!=null&&(H=J.replace(fe,"$&/")+"/"),D(Y,O,H,"",function(Se){return Se})):Y!=null&&(ue(Y)&&(Y=le(Y,H+(Y.key==null||M&&M.key===Y.key?"":(""+Y.key).replace(fe,"$&/")+"/")+J)),O.push(Y)),1;J=0;var ie=F===""?".":F+":";if(P(M))for(var se=0;se>>1,Z=D[ne];if(0>>1;nes(H,ee))Fs(Y,H)?(D[ne]=Y,D[F]=ee,ne=F):(D[ne]=H,D[O]=ee,ne=O);else if(Fs(Y,ee))D[ne]=Y,D[F]=ee,ne=F;else break e}}return W}function s(D,W){var ee=D.sortIndex-W.sortIndex;return ee!==0?ee:D.id-W.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var g=[],h=[],b=1,v=null,x=3,C=!1,E=!1,w=!1,j=!1,N=typeof setTimeout=="function"?setTimeout:null,_=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function T(D){for(var W=a(h);W!==null;){if(W.callback===null)l(h);else if(W.startTime<=D)l(h),W.sortIndex=W.expirationTime,r(g,W);else break;W=a(h)}}function P(D){if(w=!1,T(D),!E)if(a(g)!==null)E=!0,z||(z=!0,de());else{var W=a(h);W!==null&&pe(P,W.startTime-D)}}var z=!1,$=-1,V=5,X=-1;function le(){return j?!0:!(t.unstable_now()-XD&&le());){var ne=v.callback;if(typeof ne=="function"){v.callback=null,x=v.priorityLevel;var Z=ne(v.expirationTime<=D);if(D=t.unstable_now(),typeof Z=="function"){v.callback=Z,T(D),W=!0;break t}v===a(g)&&l(g),T(D)}else l(g);v=a(g)}if(v!==null)W=!0;else{var M=a(h);M!==null&&pe(P,M.startTime-D),W=!1}}break e}finally{v=null,x=ee,C=!1}W=void 0}}finally{W?de():z=!1}}}var de;if(typeof A=="function")de=function(){A(ue)};else if(typeof MessageChannel<"u"){var fe=new MessageChannel,me=fe.port2;fe.port1.onmessage=ue,de=function(){me.postMessage(null)}}else de=function(){N(ue,0)};function pe(D,W){$=N(function(){D(t.unstable_now())},W)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(D){D.callback=null},t.unstable_forceFrameRate=function(D){0>D||125ne?(D.sortIndex=ee,r(h,D),a(g)===null&&D===a(h)&&(w?(_($),$=-1):w=!0,pe(P,ee-ne))):(D.sortIndex=Z,r(g,D),E||C||(E=!0,z||(z=!0,de()))),D},t.unstable_shouldYield=le,t.unstable_wrapCallback=function(D){var W=x;return function(){var ee=x;x=W;try{return D.apply(this,arguments)}finally{x=ee}}}})(Wf)),Wf}var ny;function k3(){return ny||(ny=1,qf.exports=M3()),qf.exports}var Ff={exports:{}},Lt={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ry;function O3(){if(ry)return Lt;ry=1;var t=Yc();function r(g){var h="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),Ff.exports=O3(),Ff.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var oy;function D3(){if(oy)return is;oy=1;var t=k3(),r=Yc(),a=h0();function l(e){var n="https://react.dev/errors/"+e;if(1Z||(e.current=ne[Z],ne[Z]=null,Z--)}function H(e,n){Z++,ne[Z]=e.current,e.current=n}var F=M(null),Y=M(null),re=M(null),J=M(null);function ie(e,n){switch(H(re,n),H(Y,e),H(F,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?x1(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)n=x1(n),e=S1(n,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}O(F),H(F,e)}function se(){O(F),O(Y),O(re)}function Se(e){e.memoizedState!==null&&H(J,e);var n=F.current,o=S1(n,e.type);n!==o&&(H(Y,e),H(F,o))}function je(e){Y.current===e&&(O(F),O(Y)),J.current===e&&(O(J),rs._currentValue=ee)}var Ee,nt;function We(e){if(Ee===void 0)try{throw Error()}catch(o){var n=o.stack.trim().match(/\n( *(at )?)/);Ee=n&&n[1]||"",nt=-1)":-1p||k[i]!==I[p]){var K=` +`+k[i].replace(" at new "," at ");return e.displayName&&K.includes("")&&(K=K.replace("",e.displayName)),K}while(1<=i&&0<=p);break}}}finally{Ln=!1,Error.prepareStackTrace=o}return(o=e?e.displayName||e.name:"")?We(o):""}function en(e,n){switch(e.tag){case 26:case 27:case 5:return We(e.type);case 16:return We("Lazy");case 13:return e.child!==n&&n!==null?We("Suspense Fallback"):We("Suspense");case 19:return We("SuspenseList");case 0:case 15:return gn(e.type,!1);case 11:return gn(e.type.render,!1);case 1:return gn(e.type,!0);case 31:return We("Activity");default:return""}}function ga(e){try{var n="",o=null;do n+=en(e,o),o=e,e=e.return;while(e);return n}catch(i){return` +Error generating stack: `+i.message+` +`+i.stack}}var ht=Object.prototype.hasOwnProperty,pl=t.unstable_scheduleCallback,hl=t.unstable_cancelCallback,Pt=t.unstable_shouldYield,kr=t.unstable_requestPaint,Bt=t.unstable_now,_u=t.unstable_getCurrentPriorityLevel,va=t.unstable_ImmediatePriority,Zs=t.unstable_UserBlockingPriority,ya=t.unstable_NormalPriority,gl=t.unstable_LowPriority,sr=t.unstable_IdlePriority,Qs=t.log,Or=t.unstable_setDisableYieldValue,ba=null,$t=null;function zn(e){if(typeof Qs=="function"&&Or(e),$t&&typeof $t.setStrictMode=="function")try{$t.setStrictMode(ba,e)}catch{}}var Ot=Math.clz32?Math.clz32:Fn,Mu=Math.log,vl=Math.LN2;function Fn(e){return e>>>=0,e===0?32:31-(Mu(e)/vl|0)|0}var Ja=256,eo=262144,xa=4194304;function Xn(e){var n=e&42;if(n!==0)return n;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function we(e,n,o){var i=e.pendingLanes;if(i===0)return 0;var p=0,y=e.suspendedLanes,S=e.pingedLanes;e=e.warmLanes;var R=i&134217727;return R!==0?(i=R&~y,i!==0?p=Xn(i):(S&=R,S!==0?p=Xn(S):o||(o=R&~e,o!==0&&(p=Xn(o))))):(R=i&~y,R!==0?p=Xn(R):S!==0?p=Xn(S):o||(o=i&~e,o!==0&&(p=Xn(o)))),p===0?0:n!==0&&n!==p&&(n&y)===0&&(y=p&-p,o=n&-n,y>=o||y===32&&(o&4194048)!==0)?n:p}function Qe(e,n){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)===0}function gt(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32: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 n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Dt(){var e=xa;return xa<<=1,(xa&62914560)===0&&(xa=4194304),e}function Dr(e){for(var n=[],o=0;31>o;o++)n.push(e);return n}function tt(e,n){e.pendingLanes|=n,n!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function It(e,n,o,i,p,y){var S=e.pendingLanes;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=o,e.entangledLanes&=o,e.errorRecoveryDisabledLanes&=o,e.shellSuspendCounter=0;var R=e.entanglements,k=e.expirationTimes,I=e.hiddenUpdates;for(o=S&~o;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Sw=/[\n"\\]/g;function yn(e){return e.replace(Sw,function(n){return"\\"+n.charCodeAt(0).toString(16)+" "})}function zu(e,n,o,i,p,y,S,R){e.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?e.type=S:e.removeAttribute("type"),n!=null?S==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+vn(n)):e.value!==""+vn(n)&&(e.value=""+vn(n)):S!=="submit"&&S!=="reset"||e.removeAttribute("value"),n!=null?Pu(e,S,vn(n)):o!=null?Pu(e,S,vn(o)):i!=null&&e.removeAttribute("value"),p==null&&y!=null&&(e.defaultChecked=!!y),p!=null&&(e.checked=p&&typeof p!="function"&&typeof p!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?e.name=""+vn(R):e.removeAttribute("name")}function ph(e,n,o,i,p,y,S,R){if(y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(e.type=y),n!=null||o!=null){if(!(y!=="submit"&&y!=="reset"||n!=null)){Lu(e);return}o=o!=null?""+vn(o):"",n=n!=null?""+vn(n):o,R||n===e.value||(e.value=n),e.defaultValue=n}i=i??p,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=R?e.checked:!!i,e.defaultChecked=!!i,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(e.name=S),Lu(e)}function Pu(e,n,o){n==="number"&&ti(e.ownerDocument)===e||e.defaultValue===""+o||(e.defaultValue=""+o)}function so(e,n,o,i){if(e=e.options,n){n={};for(var p=0;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Iu=!1;if(ur)try{var Sl={};Object.defineProperty(Sl,"passive",{get:function(){Iu=!0}}),window.addEventListener("test",Sl,Sl),window.removeEventListener("test",Sl,Sl)}catch{Iu=!1}var zr=null,Vu=null,ri=null;function Sh(){if(ri)return ri;var e,n=Vu,o=n.length,i,p="value"in zr?zr.value:zr.textContent,y=p.length;for(e=0;e=El),Rh=" ",Th=!1;function Ah(e,n){switch(e){case"keyup":return Xw.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function _h(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var fo=!1;function Zw(e,n){switch(e){case"compositionend":return _h(n);case"keypress":return n.which!==32?null:(Th=!0,Rh);case"textInput":return e=n.data,e===Rh&&Th?null:e;default:return null}}function Qw(e,n){if(fo)return e==="compositionend"||!Fu&&Ah(e,n)?(e=Sh(),ri=Vu=zr=null,fo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:o,offset:n-e};e=i}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Bh(o)}}function Hh(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Hh(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Uh(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var n=ti(e.document);n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=ti(e.document)}return n}function Zu(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}var l5=ur&&"documentMode"in document&&11>=document.documentMode,mo=null,Qu=null,Tl=null,Ju=!1;function Ih(e,n,o){var i=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Ju||mo==null||mo!==ti(i)||(i=mo,"selectionStart"in i&&Zu(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),Tl&&Rl(Tl,i)||(Tl=i,i=Ki(Qu,"onSelect"),0>=S,p-=S,Kn=1<<32-Ot(n)+p|o<Te?(Le=ye,ye=null):Le=ye.sibling;var Be=G(B,ye,U[Te],Q);if(Be===null){ye===null&&(ye=Le);break}e&&ye&&Be.alternate===null&&n(B,ye),L=y(Be,L,Te),Pe===null?be=Be:Pe.sibling=Be,Pe=Be,ye=Le}if(Te===U.length)return o(B,ye),ze&&fr(B,Te),be;if(ye===null){for(;TeTe?(Le=ye,ye=null):Le=ye.sibling;var aa=G(B,ye,Be.value,Q);if(aa===null){ye===null&&(ye=Le);break}e&&ye&&aa.alternate===null&&n(B,ye),L=y(aa,L,Te),Pe===null?be=aa:Pe.sibling=aa,Pe=aa,ye=Le}if(Be.done)return o(B,ye),ze&&fr(B,Te),be;if(ye===null){for(;!Be.done;Te++,Be=U.next())Be=te(B,Be.value,Q),Be!==null&&(L=y(Be,L,Te),Pe===null?be=Be:Pe.sibling=Be,Pe=Be);return ze&&fr(B,Te),be}for(ye=i(ye);!Be.done;Te++,Be=U.next())Be=q(ye,B,Te,Be.value,Q),Be!==null&&(e&&Be.alternate!==null&&ye.delete(Be.key===null?Te:Be.key),L=y(Be,L,Te),Pe===null?be=Be:Pe.sibling=Be,Pe=Be);return e&&ye.forEach(function(j3){return n(B,j3)}),ze&&fr(B,Te),be}function Ye(B,L,U,Q){if(typeof U=="object"&&U!==null&&U.type===w&&U.key===null&&(U=U.props.children),typeof U=="object"&&U!==null){switch(U.$$typeof){case C:e:{for(var be=U.key;L!==null;){if(L.key===be){if(be=U.type,be===w){if(L.tag===7){o(B,L.sibling),Q=p(L,U.props.children),Q.return=B,B=Q;break e}}else if(L.elementType===be||typeof be=="object"&&be!==null&&be.$$typeof===V&&ka(be)===L.type){o(B,L.sibling),Q=p(L,U.props),Dl(Q,U),Q.return=B,B=Q;break e}o(B,L);break}else n(B,L);L=L.sibling}U.type===w?(Q=Ra(U.props.children,B.mode,Q,U.key),Q.return=B,B=Q):(Q=mi(U.type,U.key,U.props,null,B.mode,Q),Dl(Q,U),Q.return=B,B=Q)}return S(B);case E:e:{for(be=U.key;L!==null;){if(L.key===be)if(L.tag===4&&L.stateNode.containerInfo===U.containerInfo&&L.stateNode.implementation===U.implementation){o(B,L.sibling),Q=p(L,U.children||[]),Q.return=B,B=Q;break e}else{o(B,L);break}else n(B,L);L=L.sibling}Q=ld(U,B.mode,Q),Q.return=B,B=Q}return S(B);case V:return U=ka(U),Ye(B,L,U,Q)}if(pe(U))return ve(B,L,U,Q);if(de(U)){if(be=de(U),typeof be!="function")throw Error(l(150));return U=be.call(U),xe(B,L,U,Q)}if(typeof U.then=="function")return Ye(B,L,xi(U),Q);if(U.$$typeof===A)return Ye(B,L,gi(B,U),Q);Si(B,U)}return typeof U=="string"&&U!==""||typeof U=="number"||typeof U=="bigint"?(U=""+U,L!==null&&L.tag===6?(o(B,L.sibling),Q=p(L,U),Q.return=B,B=Q):(o(B,L),Q=od(U,B.mode,Q),Q.return=B,B=Q),S(B)):o(B,L)}return function(B,L,U,Q){try{Ol=0;var be=Ye(B,L,U,Q);return Eo=null,be}catch(ye){if(ye===wo||ye===yi)throw ye;var Pe=nn(29,ye,null,B.mode);return Pe.lanes=Q,Pe.return=B,Pe}finally{}}}var Da=dg(!0),fg=dg(!1),Ur=!1;function yd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bd(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ir(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Vr(e,n,o){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,($e&2)!==0){var p=i.pending;return p===null?n.next=n:(n.next=p.next,p.next=n),i.pending=n,n=fi(e),Xh(e,null,o),n}return di(e,i,n,o),fi(e)}function Ll(e,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194048)!==0)){var i=n.lanes;i&=e.pendingLanes,o|=i,n.lanes=o,Vt(e,o)}}function xd(e,n){var o=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,o===i)){var p=null,y=null;if(o=o.firstBaseUpdate,o!==null){do{var S={lane:o.lane,tag:o.tag,payload:o.payload,callback:null,next:null};y===null?p=y=S:y=y.next=S,o=o.next}while(o!==null);y===null?p=y=n:y=y.next=n}else p=y=n;o={baseState:i.baseState,firstBaseUpdate:p,lastBaseUpdate:y,shared:i.shared,callbacks:i.callbacks},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=n:e.next=n,o.lastBaseUpdate=n}var Sd=!1;function zl(){if(Sd){var e=Co;if(e!==null)throw e}}function Pl(e,n,o,i){Sd=!1;var p=e.updateQueue;Ur=!1;var y=p.firstBaseUpdate,S=p.lastBaseUpdate,R=p.shared.pending;if(R!==null){p.shared.pending=null;var k=R,I=k.next;k.next=null,S===null?y=I:S.next=I,S=k;var K=e.alternate;K!==null&&(K=K.updateQueue,R=K.lastBaseUpdate,R!==S&&(R===null?K.firstBaseUpdate=I:R.next=I,K.lastBaseUpdate=k))}if(y!==null){var te=p.baseState;S=0,K=I=k=null,R=y;do{var G=R.lane&-536870913,q=G!==R.lane;if(q?(De&G)===G:(i&G)===G){G!==0&&G===So&&(Sd=!0),K!==null&&(K=K.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});e:{var ve=e,xe=R;G=n;var Ye=o;switch(xe.tag){case 1:if(ve=xe.payload,typeof ve=="function"){te=ve.call(Ye,te,G);break e}te=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=xe.payload,G=typeof ve=="function"?ve.call(Ye,te,G):ve,G==null)break e;te=v({},te,G);break e;case 2:Ur=!0}}G=R.callback,G!==null&&(e.flags|=64,q&&(e.flags|=8192),q=p.callbacks,q===null?p.callbacks=[G]:q.push(G))}else q={lane:G,tag:R.tag,payload:R.payload,callback:R.callback,next:null},K===null?(I=K=q,k=te):K=K.next=q,S|=G;if(R=R.next,R===null){if(R=p.shared.pending,R===null)break;q=R,R=q.next,q.next=null,p.lastBaseUpdate=q,p.shared.pending=null}}while(!0);K===null&&(k=te),p.baseState=k,p.firstBaseUpdate=I,p.lastBaseUpdate=K,y===null&&(p.shared.lanes=0),Fr|=S,e.lanes=S,e.memoizedState=te}}function mg(e,n){if(typeof e!="function")throw Error(l(191,e));e.call(n)}function pg(e,n){var o=e.callbacks;if(o!==null)for(e.callbacks=null,e=0;ey?y:8;var S=D.T,R={};D.T=R,Hd(e,!1,n,o);try{var k=p(),I=D.S;if(I!==null&&I(R,k),k!==null&&typeof k=="object"&&typeof k.then=="function"){var K=h5(k,i);Hl(e,n,K,sn(e))}else Hl(e,n,i,sn(e))}catch(te){Hl(e,n,{then:function(){},status:"rejected",reason:te},sn())}finally{W.p=y,S!==null&&R.types!==null&&(S.types=R.types),D.T=S}}function S5(){}function Bd(e,n,o,i){if(e.tag!==5)throw Error(l(476));var p=qg(e).queue;Yg(e,p,n,ee,o===null?S5:function(){return Wg(e),o(i)})}function qg(e){var n=e.memoizedState;if(n!==null)return n;n={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gr,lastRenderedState:ee},next:null};var o={};return n.next={memoizedState:o,baseState:o,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:gr,lastRenderedState:o},next:null},e.memoizedState=n,e=e.alternate,e!==null&&(e.memoizedState=n),n}function Wg(e){var n=qg(e);n.next===null&&(n=e.alternate.memoizedState),Hl(e,n.next.queue,{},sn())}function $d(){return Rt(rs)}function Fg(){return lt().memoizedState}function Xg(){return lt().memoizedState}function C5(e){for(var n=e.return;n!==null;){switch(n.tag){case 24:case 3:var o=sn();e=Ir(o);var i=Vr(n,e,o);i!==null&&(Zt(i,n,o),Ll(i,n,o)),n={cache:pd()},e.payload=n;return}n=n.return}}function w5(e,n,o){var i=sn();o={lane:i,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},Mi(e)?Zg(n,o):(o=rd(e,n,o,i),o!==null&&(Zt(o,e,i),Qg(o,n,i)))}function Kg(e,n,o){var i=sn();Hl(e,n,o,i)}function Hl(e,n,o,i){var p={lane:i,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null};if(Mi(e))Zg(n,p);else{var y=e.alternate;if(e.lanes===0&&(y===null||y.lanes===0)&&(y=n.lastRenderedReducer,y!==null))try{var S=n.lastRenderedState,R=y(S,o);if(p.hasEagerState=!0,p.eagerState=R,tn(R,S))return di(e,n,p,0),Fe===null&&ui(),!1}catch{}finally{}if(o=rd(e,n,p,i),o!==null)return Zt(o,e,i),Qg(o,n,i),!0}return!1}function Hd(e,n,o,i){if(i={lane:2,revertLane:bf(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},Mi(e)){if(n)throw Error(l(479))}else n=rd(e,o,i,2),n!==null&&Zt(n,e,2)}function Mi(e){var n=e.alternate;return e===Re||n!==null&&n===Re}function Zg(e,n){jo=Ei=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function Qg(e,n,o){if((o&4194048)!==0){var i=n.lanes;i&=e.pendingLanes,o|=i,n.lanes=o,Vt(e,o)}}var Ul={readContext:Rt,use:Ri,useCallback:rt,useContext:rt,useEffect:rt,useImperativeHandle:rt,useLayoutEffect:rt,useInsertionEffect:rt,useMemo:rt,useReducer:rt,useRef:rt,useState:rt,useDebugValue:rt,useDeferredValue:rt,useTransition:rt,useSyncExternalStore:rt,useId:rt,useHostTransitionStatus:rt,useFormState:rt,useActionState:rt,useOptimistic:rt,useMemoCache:rt,useCacheRefresh:rt};Ul.useEffectEvent=rt;var Jg={readContext:Rt,use:Ri,useCallback:function(e,n){return Ht().memoizedState=[e,n===void 0?null:n],e},useContext:Rt,useEffect:zg,useImperativeHandle:function(e,n,o){o=o!=null?o.concat([e]):null,Ai(4194308,4,Hg.bind(null,n,e),o)},useLayoutEffect:function(e,n){return Ai(4194308,4,e,n)},useInsertionEffect:function(e,n){Ai(4,2,e,n)},useMemo:function(e,n){var o=Ht();n=n===void 0?null:n;var i=e();if(La){zn(!0);try{e()}finally{zn(!1)}}return o.memoizedState=[i,n],i},useReducer:function(e,n,o){var i=Ht();if(o!==void 0){var p=o(n);if(La){zn(!0);try{o(n)}finally{zn(!1)}}}else p=n;return i.memoizedState=i.baseState=p,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:p},i.queue=e,e=e.dispatch=w5.bind(null,Re,e),[i.memoizedState,e]},useRef:function(e){var n=Ht();return e={current:e},n.memoizedState=e},useState:function(e){e=Od(e);var n=e.queue,o=Kg.bind(null,Re,n);return n.dispatch=o,[e.memoizedState,o]},useDebugValue:zd,useDeferredValue:function(e,n){var o=Ht();return Pd(o,e,n)},useTransition:function(){var e=Od(!1);return e=Yg.bind(null,Re,e.queue,!0,!1),Ht().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,o){var i=Re,p=Ht();if(ze){if(o===void 0)throw Error(l(407));o=o()}else{if(o=n(),Fe===null)throw Error(l(349));(De&127)!==0||xg(i,n,o)}p.memoizedState=o;var y={value:o,getSnapshot:n};return p.queue=y,zg(Cg.bind(null,i,y,e),[e]),i.flags|=2048,To(9,{destroy:void 0},Sg.bind(null,i,y,o,n),null),o},useId:function(){var e=Ht(),n=Fe.identifierPrefix;if(ze){var o=Zn,i=Kn;o=(i&~(1<<32-Ot(i)-1)).toString(32)+o,n="_"+n+"R_"+o,o=Ni++,0<\/script>",y=y.removeChild(y.firstChild);break;case"select":y=typeof i.is=="string"?S.createElement("select",{is:i.is}):S.createElement("select"),i.multiple?y.multiple=!0:i.size&&(y.size=i.size);break;default:y=typeof i.is=="string"?S.createElement(p,{is:i.is}):S.createElement(p)}}y[Nt]=n,y[Yt]=i;e:for(S=n.child;S!==null;){if(S.tag===5||S.tag===6)y.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===n)break e;for(;S.sibling===null;){if(S.return===null||S.return===n)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}n.stateNode=y;e:switch(At(y,p,i),p){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&yr(n)}}return Ze(n),ef(n,n.type,e===null?null:e.memoizedProps,n.pendingProps,o),null;case 6:if(e&&n.stateNode!=null)e.memoizedProps!==i&&yr(n);else{if(typeof i!="string"&&n.stateNode===null)throw Error(l(166));if(e=re.current,bo(n)){if(e=n.stateNode,o=n.memoizedProps,i=null,p=jt,p!==null)switch(p.tag){case 27:case 5:i=p.memoizedProps}e[Nt]=n,e=!!(e.nodeValue===o||i!==null&&i.suppressHydrationWarning===!0||y1(e.nodeValue,o)),e||$r(n,!0)}else e=Zi(e).createTextNode(i),e[Nt]=n,n.stateNode=e}return Ze(n),null;case 31:if(o=n.memoizedState,e===null||e.memoizedState!==null){if(i=bo(n),o!==null){if(e===null){if(!i)throw Error(l(318));if(e=n.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(l(557));e[Nt]=n}else Ta(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Ze(n),e=!1}else o=ud(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=o),e=!0;if(!e)return n.flags&256?(an(n),n):(an(n),null);if((n.flags&128)!==0)throw Error(l(558))}return Ze(n),null;case 13:if(i=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(p=bo(n),i!==null&&i.dehydrated!==null){if(e===null){if(!p)throw Error(l(318));if(p=n.memoizedState,p=p!==null?p.dehydrated:null,!p)throw Error(l(317));p[Nt]=n}else Ta(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Ze(n),p=!1}else p=ud(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=p),p=!0;if(!p)return n.flags&256?(an(n),n):(an(n),null)}return an(n),(n.flags&128)!==0?(n.lanes=o,n):(o=i!==null,e=e!==null&&e.memoizedState!==null,o&&(i=n.child,p=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(p=i.alternate.memoizedState.cachePool.pool),y=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(y=i.memoizedState.cachePool.pool),y!==p&&(i.flags|=2048)),o!==e&&o&&(n.child.flags|=8192),zi(n,n.updateQueue),Ze(n),null);case 4:return se(),e===null&&wf(n.stateNode.containerInfo),Ze(n),null;case 10:return pr(n.type),Ze(n),null;case 19:if(O(ot),i=n.memoizedState,i===null)return Ze(n),null;if(p=(n.flags&128)!==0,y=i.rendering,y===null)if(p)Vl(i,!1);else{if(at!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(y=wi(e),y!==null){for(n.flags|=128,Vl(i,!1),e=y.updateQueue,n.updateQueue=e,zi(n,e),n.subtreeFlags=0,e=o,o=n.child;o!==null;)Kh(o,e),o=o.sibling;return H(ot,ot.current&1|2),ze&&fr(n,i.treeForkCount),n.child}e=e.sibling}i.tail!==null&&Bt()>Ui&&(n.flags|=128,p=!0,Vl(i,!1),n.lanes=4194304)}else{if(!p)if(e=wi(y),e!==null){if(n.flags|=128,p=!0,e=e.updateQueue,n.updateQueue=e,zi(n,e),Vl(i,!0),i.tail===null&&i.tailMode==="hidden"&&!y.alternate&&!ze)return Ze(n),null}else 2*Bt()-i.renderingStartTime>Ui&&o!==536870912&&(n.flags|=128,p=!0,Vl(i,!1),n.lanes=4194304);i.isBackwards?(y.sibling=n.child,n.child=y):(e=i.last,e!==null?e.sibling=y:n.child=y,i.last=y)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Bt(),e.sibling=null,o=ot.current,H(ot,p?o&1|2:o&1),ze&&fr(n,i.treeForkCount),e):(Ze(n),null);case 22:case 23:return an(n),wd(),i=n.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(n.flags|=8192):i&&(n.flags|=8192),i?(o&536870912)!==0&&(n.flags&128)===0&&(Ze(n),n.subtreeFlags&6&&(n.flags|=8192)):Ze(n),o=n.updateQueue,o!==null&&zi(n,o.retryQueue),o=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(o=e.memoizedState.cachePool.pool),i=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),i!==o&&(n.flags|=2048),e!==null&&O(Ma),null;case 24:return o=null,e!==null&&(o=e.memoizedState.cache),n.memoizedState.cache!==o&&(n.flags|=2048),pr(st),Ze(n),null;case 25:return null;case 30:return null}throw Error(l(156,n.tag))}function T5(e,n){switch(id(n),n.tag){case 1:return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return pr(st),se(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 26:case 27:case 5:return je(n),null;case 31:if(n.memoizedState!==null){if(an(n),n.alternate===null)throw Error(l(340));Ta()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 13:if(an(n),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(l(340));Ta()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return O(ot),null;case 4:return se(),null;case 10:return pr(n.type),null;case 22:case 23:return an(n),wd(),e!==null&&O(Ma),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 24:return pr(st),null;case 25:return null;default:return null}}function wv(e,n){switch(id(n),n.tag){case 3:pr(st),se();break;case 26:case 27:case 5:je(n);break;case 4:se();break;case 31:n.memoizedState!==null&&an(n);break;case 13:an(n);break;case 19:O(ot);break;case 10:pr(n.type);break;case 22:case 23:an(n),wd(),e!==null&&O(Ma);break;case 24:pr(st)}}function Gl(e,n){try{var o=n.updateQueue,i=o!==null?o.lastEffect:null;if(i!==null){var p=i.next;o=p;do{if((o.tag&e)===e){i=void 0;var y=o.create,S=o.inst;i=y(),S.destroy=i}o=o.next}while(o!==p)}}catch(R){Ie(n,n.return,R)}}function qr(e,n,o){try{var i=n.updateQueue,p=i!==null?i.lastEffect:null;if(p!==null){var y=p.next;i=y;do{if((i.tag&e)===e){var S=i.inst,R=S.destroy;if(R!==void 0){S.destroy=void 0,p=n;var k=o,I=R;try{I()}catch(K){Ie(p,k,K)}}}i=i.next}while(i!==y)}}catch(K){Ie(n,n.return,K)}}function Ev(e){var n=e.updateQueue;if(n!==null){var o=e.stateNode;try{pg(n,o)}catch(i){Ie(e,e.return,i)}}}function Nv(e,n,o){o.props=za(e.type,e.memoizedProps),o.state=e.memoizedState;try{o.componentWillUnmount()}catch(i){Ie(e,n,i)}}function Yl(e,n){try{var o=e.ref;if(o!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof o=="function"?e.refCleanup=o(i):o.current=i}}catch(p){Ie(e,n,p)}}function Qn(e,n){var o=e.ref,i=e.refCleanup;if(o!==null)if(typeof i=="function")try{i()}catch(p){Ie(e,n,p)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof o=="function")try{o(null)}catch(p){Ie(e,n,p)}else o.current=null}function jv(e){var n=e.type,o=e.memoizedProps,i=e.stateNode;try{e:switch(n){case"button":case"input":case"select":case"textarea":o.autoFocus&&i.focus();break e;case"img":o.src?i.src=o.src:o.srcSet&&(i.srcset=o.srcSet)}}catch(p){Ie(e,e.return,p)}}function tf(e,n,o){try{var i=e.stateNode;K5(i,e.type,o,n),i[Yt]=n}catch(p){Ie(e,e.return,p)}}function Rv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Jr(e.type)||e.tag===4}function nf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Rv(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.tag===27&&Jr(e.type)||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 rf(e,n,o){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?(o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o).insertBefore(e,n):(n=o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o,n.appendChild(e),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=cr));else if(i!==4&&(i===27&&Jr(e.type)&&(o=e.stateNode,n=null),e=e.child,e!==null))for(rf(e,n,o),e=e.sibling;e!==null;)rf(e,n,o),e=e.sibling}function Pi(e,n,o){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?o.insertBefore(e,n):o.appendChild(e);else if(i!==4&&(i===27&&Jr(e.type)&&(o=e.stateNode),e=e.child,e!==null))for(Pi(e,n,o),e=e.sibling;e!==null;)Pi(e,n,o),e=e.sibling}function Tv(e){var n=e.stateNode,o=e.memoizedProps;try{for(var i=e.type,p=n.attributes;p.length;)n.removeAttributeNode(p[0]);At(n,i,o),n[Nt]=e,n[Yt]=o}catch(y){Ie(e,e.return,y)}}var br=!1,ut=!1,af=!1,Av=typeof WeakSet=="function"?WeakSet:Set,yt=null;function A5(e,n){if(e=e.containerInfo,jf=ac,e=Uh(e),Zu(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var i=o.getSelection&&o.getSelection();if(i&&i.rangeCount!==0){o=i.anchorNode;var p=i.anchorOffset,y=i.focusNode;i=i.focusOffset;try{o.nodeType,y.nodeType}catch{o=null;break e}var S=0,R=-1,k=-1,I=0,K=0,te=e,G=null;t:for(;;){for(var q;te!==o||p!==0&&te.nodeType!==3||(R=S+p),te!==y||i!==0&&te.nodeType!==3||(k=S+i),te.nodeType===3&&(S+=te.nodeValue.length),(q=te.firstChild)!==null;)G=te,te=q;for(;;){if(te===e)break t;if(G===o&&++I===p&&(R=S),G===y&&++K===i&&(k=S),(q=te.nextSibling)!==null)break;te=G,G=te.parentNode}te=q}o=R===-1||k===-1?null:{start:R,end:k}}else o=null}o=o||{start:0,end:0}}else o=null;for(Rf={focusedElem:e,selectionRange:o},ac=!1,yt=n;yt!==null;)if(n=yt,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,yt=e;else for(;yt!==null;){switch(n=yt,y=n.alternate,e=n.flags,n.tag){case 0:if((e&4)!==0&&(e=n.updateQueue,e=e!==null?e.events:null,e!==null))for(o=0;o title"))),At(y,i,o),y[Nt]=e,vt(y),i=y;break e;case"link":var S=L1("link","href",p).get(i+(o.href||""));if(S){for(var R=0;RYe&&(S=Ye,Ye=xe,xe=S);var B=$h(R,xe),L=$h(R,Ye);if(B&&L&&(q.rangeCount!==1||q.anchorNode!==B.node||q.anchorOffset!==B.offset||q.focusNode!==L.node||q.focusOffset!==L.offset)){var U=te.createRange();U.setStart(B.node,B.offset),q.removeAllRanges(),xe>Ye?(q.addRange(U),q.extend(L.node,L.offset)):(U.setEnd(L.node,L.offset),q.addRange(U))}}}}for(te=[],q=R;q=q.parentNode;)q.nodeType===1&&te.push({element:q,left:q.scrollLeft,top:q.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Ro?32:o,D.T=null,o=ff,ff=null;var y=Kr,S=Er;if(mt=0,Oo=Kr=null,Er=0,($e&6)!==0)throw Error(l(331));var R=$e;if($e|=4,Hv(y.current),Pv(y,y.current,S,o),$e=R,Zl(0,!1),$t&&typeof $t.onPostCommitFiberRoot=="function")try{$t.onPostCommitFiberRoot(ba,y)}catch{}return!0}finally{W.p=p,D.T=i,a1(e,n)}}function l1(e,n,o){n=xn(o,n),n=Gd(e.stateNode,n,2),e=Vr(e,n,2),e!==null&&(tt(e,2),Jn(e))}function Ie(e,n,o){if(e.tag===3)l1(e,e,o);else for(;n!==null;){if(n.tag===3){l1(n,e,o);break}else if(n.tag===1){var i=n.stateNode;if(typeof n.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(Xr===null||!Xr.has(i))){e=xn(o,e),o=sv(2),i=Vr(n,o,2),i!==null&&(iv(o,i,n,e),tt(i,2),Jn(i));break}}n=n.return}}function gf(e,n,o){var i=e.pingCache;if(i===null){i=e.pingCache=new k5;var p=new Set;i.set(n,p)}else p=i.get(n),p===void 0&&(p=new Set,i.set(n,p));p.has(o)||(sf=!0,p.add(o),e=P5.bind(null,e,n,o),n.then(e,e))}function P5(e,n,o){var i=e.pingCache;i!==null&&i.delete(n),e.pingedLanes|=e.suspendedLanes&o,e.warmLanes&=~o,Fe===e&&(De&o)===o&&(at===4||at===3&&(De&62914560)===De&&300>Bt()-Hi?($e&2)===0&&Do(e,0):cf|=o,ko===De&&(ko=0)),Jn(e)}function s1(e,n){n===0&&(n=Dt()),e=ja(e,n),e!==null&&(tt(e,n),Jn(e))}function B5(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),s1(e,o)}function $5(e,n){var o=0;switch(e.tag){case 31:case 13:var i=e.stateNode,p=e.memoizedState;p!==null&&(o=p.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(l(314))}i!==null&&i.delete(n),s1(e,o)}function H5(e,n){return pl(e,n)}var Wi=null,zo=null,vf=!1,Fi=!1,yf=!1,Qr=0;function Jn(e){e!==zo&&e.next===null&&(zo===null?Wi=zo=e:zo=zo.next=e),Fi=!0,vf||(vf=!0,I5())}function Zl(e,n){if(!yf&&Fi){yf=!0;do for(var o=!1,i=Wi;i!==null;){if(e!==0){var p=i.pendingLanes;if(p===0)var y=0;else{var S=i.suspendedLanes,R=i.pingedLanes;y=(1<<31-Ot(42|e)+1)-1,y&=p&~(S&~R),y=y&201326741?y&201326741|1:y?y|2:0}y!==0&&(o=!0,d1(i,y))}else y=De,y=we(i,i===Fe?y:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(y&3)===0||Qe(i,y)||(o=!0,d1(i,y));i=i.next}while(o);yf=!1}}function U5(){i1()}function i1(){Fi=vf=!1;var e=0;Qr!==0&&Q5()&&(e=Qr);for(var n=Bt(),o=null,i=Wi;i!==null;){var p=i.next,y=c1(i,n);y===0?(i.next=null,o===null?Wi=p:o.next=p,p===null&&(zo=o)):(o=i,(e!==0||(y&3)!==0)&&(Fi=!0)),i=p}mt!==0&&mt!==5||Zl(e),Qr!==0&&(Qr=0)}function c1(e,n){for(var o=e.suspendedLanes,i=e.pingedLanes,p=e.expirationTimes,y=e.pendingLanes&-62914561;0R)break;var K=k.transferSize,te=k.initiatorType;K&&b1(te)&&(k=k.responseEnd,S+=K*(k"u"?null:document;function M1(e,n,o){var i=Po;if(i&&typeof n=="string"&&n){var p=yn(n);p='link[rel="'+e+'"][href="'+p+'"]',typeof o=="string"&&(p+='[crossorigin="'+o+'"]'),_1.has(p)||(_1.add(p),e={rel:e,crossOrigin:o,href:n},i.querySelector(p)===null&&(n=i.createElement("link"),At(n,"link",e),vt(n),i.head.appendChild(n)))}}function s3(e){Nr.D(e),M1("dns-prefetch",e,null)}function i3(e,n){Nr.C(e,n),M1("preconnect",e,n)}function c3(e,n,o){Nr.L(e,n,o);var i=Po;if(i&&e&&n){var p='link[rel="preload"][as="'+yn(n)+'"]';n==="image"&&o&&o.imageSrcSet?(p+='[imagesrcset="'+yn(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(p+='[imagesizes="'+yn(o.imageSizes)+'"]')):p+='[href="'+yn(e)+'"]';var y=p;switch(n){case"style":y=Bo(e);break;case"script":y=$o(e)}jn.has(y)||(e=v({rel:"preload",href:n==="image"&&o&&o.imageSrcSet?void 0:e,as:n},o),jn.set(y,e),i.querySelector(p)!==null||n==="style"&&i.querySelector(ts(y))||n==="script"&&i.querySelector(ns(y))||(n=i.createElement("link"),At(n,"link",e),vt(n),i.head.appendChild(n)))}}function u3(e,n){Nr.m(e,n);var o=Po;if(o&&e){var i=n&&typeof n.as=="string"?n.as:"script",p='link[rel="modulepreload"][as="'+yn(i)+'"][href="'+yn(e)+'"]',y=p;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":y=$o(e)}if(!jn.has(y)&&(e=v({rel:"modulepreload",href:e},n),jn.set(y,e),o.querySelector(p)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector(ns(y)))return}i=o.createElement("link"),At(i,"link",e),vt(i),o.head.appendChild(i)}}}function d3(e,n,o){Nr.S(e,n,o);var i=Po;if(i&&e){var p=oo(i).hoistableStyles,y=Bo(e);n=n||"default";var S=p.get(y);if(!S){var R={loading:0,preload:null};if(S=i.querySelector(ts(y)))R.loading=5;else{e=v({rel:"stylesheet",href:e,"data-precedence":n},o),(o=jn.get(y))&&Df(e,o);var k=S=i.createElement("link");vt(k),At(k,"link",e),k._p=new Promise(function(I,K){k.onload=I,k.onerror=K}),k.addEventListener("load",function(){R.loading|=1}),k.addEventListener("error",function(){R.loading|=2}),R.loading|=4,Ji(S,n,i)}S={type:"stylesheet",instance:S,count:1,state:R},p.set(y,S)}}}function f3(e,n){Nr.X(e,n);var o=Po;if(o&&e){var i=oo(o).hoistableScripts,p=$o(e),y=i.get(p);y||(y=o.querySelector(ns(p)),y||(e=v({src:e,async:!0},n),(n=jn.get(p))&&Lf(e,n),y=o.createElement("script"),vt(y),At(y,"link",e),o.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function m3(e,n){Nr.M(e,n);var o=Po;if(o&&e){var i=oo(o).hoistableScripts,p=$o(e),y=i.get(p);y||(y=o.querySelector(ns(p)),y||(e=v({src:e,async:!0,type:"module"},n),(n=jn.get(p))&&Lf(e,n),y=o.createElement("script"),vt(y),At(y,"link",e),o.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function k1(e,n,o,i){var p=(p=re.current)?Qi(p):null;if(!p)throw Error(l(446));switch(e){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(n=Bo(o.href),o=oo(p).hoistableStyles,i=o.get(n),i||(i={type:"style",instance:null,count:0,state:null},o.set(n,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){e=Bo(o.href);var y=oo(p).hoistableStyles,S=y.get(e);if(S||(p=p.ownerDocument||p,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},y.set(e,S),(y=p.querySelector(ts(e)))&&!y._p&&(S.instance=y,S.state.loading=5),jn.has(e)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},jn.set(e,o),y||p3(p,e,o,S.state))),n&&i===null)throw Error(l(528,""));return S}if(n&&i!==null)throw Error(l(529,""));return null;case"script":return n=o.async,o=o.src,typeof o=="string"&&n&&typeof n!="function"&&typeof n!="symbol"?(n=$o(o),o=oo(p).hoistableScripts,i=o.get(n),i||(i={type:"script",instance:null,count:0,state:null},o.set(n,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function Bo(e){return'href="'+yn(e)+'"'}function ts(e){return'link[rel="stylesheet"]['+e+"]"}function O1(e){return v({},e,{"data-precedence":e.precedence,precedence:null})}function p3(e,n,o,i){e.querySelector('link[rel="preload"][as="style"]['+n+"]")?i.loading=1:(n=e.createElement("link"),i.preload=n,n.addEventListener("load",function(){return i.loading|=1}),n.addEventListener("error",function(){return i.loading|=2}),At(n,"link",o),vt(n),e.head.appendChild(n))}function $o(e){return'[src="'+yn(e)+'"]'}function ns(e){return"script[async]"+e}function D1(e,n,o){if(n.count++,n.instance===null)switch(n.type){case"style":var i=e.querySelector('style[data-href~="'+yn(o.href)+'"]');if(i)return n.instance=i,vt(i),i;var p=v({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),vt(i),At(i,"style",p),Ji(i,o.precedence,e),n.instance=i;case"stylesheet":p=Bo(o.href);var y=e.querySelector(ts(p));if(y)return n.state.loading|=4,n.instance=y,vt(y),y;i=O1(o),(p=jn.get(p))&&Df(i,p),y=(e.ownerDocument||e).createElement("link"),vt(y);var S=y;return S._p=new Promise(function(R,k){S.onload=R,S.onerror=k}),At(y,"link",i),n.state.loading|=4,Ji(y,o.precedence,e),n.instance=y;case"script":return y=$o(o.src),(p=e.querySelector(ns(y)))?(n.instance=p,vt(p),p):(i=o,(p=jn.get(y))&&(i=v({},o),Lf(i,p)),e=e.ownerDocument||e,p=e.createElement("script"),vt(p),At(p,"link",i),e.head.appendChild(p),n.instance=p);case"void":return null;default:throw Error(l(443,n.type))}else n.type==="stylesheet"&&(n.state.loading&4)===0&&(i=n.instance,n.state.loading|=4,Ji(i,o.precedence,e));return n.instance}function Ji(e,n,o){for(var i=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),p=i.length?i[i.length-1]:null,y=p,S=0;S title"):null)}function h3(e,n,o){if(o===1||n.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof n.precedence!="string"||typeof n.href!="string"||n.href==="")break;return!0;case"link":if(typeof n.rel!="string"||typeof n.href!="string"||n.href===""||n.onLoad||n.onError)break;switch(n.rel){case"stylesheet":return e=n.disabled,typeof n.precedence=="string"&&e==null;default:return!0}case"script":if(n.async&&typeof n.async!="function"&&typeof n.async!="symbol"&&!n.onLoad&&!n.onError&&n.src&&typeof n.src=="string")return!0}return!1}function P1(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function g3(e,n,o,i){if(o.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var p=Bo(i.href),y=n.querySelector(ts(p));if(y){n=y._p,n!==null&&typeof n=="object"&&typeof n.then=="function"&&(e.count++,e=tc.bind(e),n.then(e,e)),o.state.loading|=4,o.instance=y,vt(y);return}y=n.ownerDocument||n,i=O1(i),(p=jn.get(p))&&Df(i,p),y=y.createElement("link"),vt(y);var S=y;S._p=new Promise(function(R,k){S.onload=R,S.onerror=k}),At(y,"link",i),o.instance=y}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(o,n),(n=o.state.preload)&&(o.state.loading&3)===0&&(e.count++,o=tc.bind(e),n.addEventListener("load",o),n.addEventListener("error",o))}}var zf=0;function v3(e,n){return e.stylesheets&&e.count===0&&rc(e,e.stylesheets),0zf?50:800)+n);return e.unsuspend=o,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(p)}}:null}function tc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)rc(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var nc=null;function rc(e,n){e.stylesheets=null,e.unsuspend!==null&&(e.count++,nc=new Map,n.forEach(y3,e),nc=null,tc.call(e))}function y3(e,n){if(!(n.state.loading&4)){var o=nc.get(e);if(o)var i=o.get(null);else{o=new Map,nc.set(e,o);for(var p=e.querySelectorAll("link[data-precedence],style[data-precedence]"),y=0;y"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),Yf.exports=D3(),Yf.exports}var z3=L3();/** + * react-router v7.15.1 + * + * 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 + */var sy="popstate";function iy(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function P3(t={}){function r(l,s){var h;let c=(h=s.state)==null?void 0:h.masked,{pathname:d,search:m,hash:g}=c||l.location;return vm("",{pathname:d,search:m,hash:g},s.state&&s.state.usr||null,s.state&&s.state.key||"default",c?{pathname:l.location.pathname,search:l.location.search,hash:l.location.hash}:void 0)}function a(l,s){return typeof s=="string"?s:xs(s)}return $3(r,a,null,t)}function et(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function _n(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function B3(){return Math.random().toString(36).substring(2,10)}function cy(t,r){return{usr:t.state,key:t.key,idx:r,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function vm(t,r,a=null,l,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?rl(r):r,state:a,key:r&&r.key||l||B3(),mask:s}}function xs({pathname:t="/",search:r="",hash:a=""}){return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function rl(t){let r={};if(t){let a=t.indexOf("#");a>=0&&(r.hash=t.substring(a),t=t.substring(0,a));let l=t.indexOf("?");l>=0&&(r.search=t.substring(l),t=t.substring(0,l)),t&&(r.pathname=t)}return r}function $3(t,r,a,l={}){let{window:s=document.defaultView,v5Compat:c=!1}=l,d=s.history,m="POP",g=null,h=b();h==null&&(h=0,d.replaceState({...d.state,idx:h},""));function b(){return(d.state||{idx:null}).idx}function v(){m="POP";let j=b(),N=j==null?null:j-h;h=j,g&&g({action:m,location:w.location,delta:N})}function x(j,N){m="PUSH";let _=iy(j)?j:vm(w.location,j,N);h=b()+1;let A=cy(_,h),T=w.createHref(_.mask||_);try{d.pushState(A,"",T)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;s.location.assign(T)}c&&g&&g({action:m,location:w.location,delta:1})}function C(j,N){m="REPLACE";let _=iy(j)?j:vm(w.location,j,N);h=b();let A=cy(_,h),T=w.createHref(_.mask||_);d.replaceState(A,"",T),c&&g&&g({action:m,location:w.location,delta:0})}function E(j){return H3(j)}let w={get action(){return m},get location(){return t(s,d)},listen(j){if(g)throw new Error("A history only accepts one active listener");return s.addEventListener(sy,v),g=j,()=>{s.removeEventListener(sy,v),g=null}},createHref(j){return r(s,j)},createURL:E,encodeLocation(j){let N=E(j);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:x,replace:C,go(j){return d.go(j)}};return w}function H3(t,r=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),et(a,"No window.location.(origin|href) available to create URL");let l=typeof t=="string"?t:xs(t);return l=l.replace(/ $/,"%20"),!r&&l.startsWith("//")&&(l=a+l),new URL(l,a)}function g0(t,r,a="/"){return U3(t,r,a,!1)}function U3(t,r,a,l,s){let c=typeof r=="string"?rl(r):r,d=Rr(c.pathname||"/",a);if(d==null)return null;let m=I3(t),g=null,h=eE(d);for(let b=0;g==null&&b{let b={relativePath:h===void 0?d.path||"":h,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(l)&&g)return;et(b.relativePath.startsWith(l),`Absolute route path "${b.relativePath}" nested under path "${l}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(l.length)}let v=Vn([l,b.relativePath]),x=a.concat(b);d.children&&d.children.length>0&&(et(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),v0(d.children,r,x,v,g)),!(d.path==null&&!d.index)&&r.push({path:v,score:K3(v,d.index),routesMeta:x})};return t.forEach((d,m)=>{var g;if(d.path===""||!((g=d.path)!=null&&g.includes("?")))c(d,m);else for(let h of y0(d.path))c(d,m,!0,h)}),r}function y0(t){let r=t.split("/");if(r.length===0)return[];let[a,...l]=r,s=a.endsWith("?"),c=a.replace(/\?$/,"");if(l.length===0)return s?[c,""]:[c];let d=y0(l.join("/")),m=[];return m.push(...d.map(g=>g===""?c:[c,g].join("/"))),s&&m.push(...d),m.map(g=>t.startsWith("/")&&g===""?"/":g)}function V3(t){t.sort((r,a)=>r.score!==a.score?a.score-r.score:Z3(r.routesMeta.map(l=>l.childrenIndex),a.routesMeta.map(l=>l.childrenIndex)))}var G3=/^:[\w-]+$/,Y3=3,q3=2,W3=1,F3=10,X3=-2,uy=t=>t==="*";function K3(t,r){let a=t.split("/"),l=a.length;return a.some(uy)&&(l+=X3),r&&(l+=q3),a.filter(s=>!uy(s)).reduce((s,c)=>s+(G3.test(c)?Y3:c===""?W3:F3),l)}function Z3(t,r){return t.length===r.length&&t.slice(0,-1).every((l,s)=>l===r[s])?t[t.length-1]-r[r.length-1]:0}function Q3(t,r,a=!1){let{routesMeta:l}=t,s={},c="/",d=[];for(let m=0;m{if(b==="*"){let E=m[x]||"";d=c.slice(0,c.length-E.length).replace(/(.)\/+$/,"$1")}const C=m[x];return v&&!C?h[b]=void 0:h[b]=(C||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:d,pattern:t}}function J3(t,r=!1,a=!0){_n(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let l=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,g,h,b)=>{if(l.push({paramName:m,isOptional:g!=null}),g){let v=b.charAt(h+d.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(l.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,r?void 0:"i"),l]}function eE(t){try{return t.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return _n(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),t}}function Rr(t,r){if(r==="/")return t;if(!t.toLowerCase().startsWith(r.toLowerCase()))return null;let a=r.endsWith("/")?r.length-1:r.length,l=t.charAt(a);return l&&l!=="/"?null:t.slice(a)||"/"}var tE=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function nE(t,r="/"){let{pathname:a,search:l="",hash:s=""}=typeof t=="string"?rl(t):t,c;return a?(a=b0(a),a.startsWith("/")?c=dy(a.substring(1),"/"):c=dy(a,r)):c=r,{pathname:c,search:oE(l),hash:lE(s)}}function dy(t,r){let a=Ac(r).split("/");return t.split("/").forEach(s=>{s===".."?a.length>1&&a.pop():s!=="."&&a.push(s)}),a.length>1?a.join("/"):"/"}function Xf(t,r,a,l){return`Cannot include a '${t}' character in a manually specified \`to.${r}\` field [${JSON.stringify(l)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function rE(t){return t.filter((r,a)=>a===0||r.route.path&&r.route.path.length>0)}function Jm(t){let r=rE(t);return r.map((a,l)=>l===r.length-1?a.pathname:a.pathnameBase)}function qc(t,r,a,l=!1){let s;typeof t=="string"?s=rl(t):(s={...t},et(!s.pathname||!s.pathname.includes("?"),Xf("?","pathname","search",s)),et(!s.pathname||!s.pathname.includes("#"),Xf("#","pathname","hash",s)),et(!s.search||!s.search.includes("#"),Xf("#","search","hash",s)));let c=t===""||s.pathname==="",d=c?"/":s.pathname,m;if(d==null)m=a;else{let v=r.length-1;if(!l&&d.startsWith("..")){let x=d.split("/");for(;x[0]==="..";)x.shift(),v-=1;s.pathname=x.join("/")}m=v>=0?r[v]:"/"}let g=nE(s,m),h=d&&d!=="/"&&d.endsWith("/"),b=(c||d===".")&&a.endsWith("/");return!g.pathname.endsWith("/")&&(h||b)&&(g.pathname+="/"),g}var b0=t=>t.replace(/\/\/+/g,"/"),Vn=t=>b0(t.join("/")),Ac=t=>t.replace(/\/+$/,""),aE=t=>Ac(t).replace(/^\/*/,"/"),oE=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,lE=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,sE=class{constructor(t,r,a,l=!1){this.status=t,this.statusText=r||"",this.internal=l,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function iE(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function cE(t){let r=t.map(a=>a.route.path).filter(Boolean);return Vn(r)||"/"}var x0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function S0(t,r){let a=t;if(typeof a!="string"||!tE.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let l=a,s=!1;if(x0)try{let c=new URL(window.location.href),d=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=Rr(d.pathname,r);d.origin===c.origin&&m!=null?a=m+d.search+d.hash:s=!0}catch{_n(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:l,isExternal:s,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var C0=["POST","PUT","PATCH","DELETE"];new Set(C0);var uE=["GET",...C0];new Set(uE);var al=u.createContext(null);al.displayName="DataRouter";var Wc=u.createContext(null);Wc.displayName="DataRouterState";var w0=u.createContext(!1);function dE(){return u.useContext(w0)}var E0=u.createContext({isTransitioning:!1});E0.displayName="ViewTransition";var fE=u.createContext(new Map);fE.displayName="Fetchers";var mE=u.createContext(null);mE.displayName="Await";var fn=u.createContext(null);fn.displayName="Navigation";var Os=u.createContext(null);Os.displayName="Location";var qn=u.createContext({outlet:null,matches:[],isDataRoute:!1});qn.displayName="Route";var ep=u.createContext(null);ep.displayName="RouteError";var N0="REACT_ROUTER_ERROR",pE="REDIRECT",hE="ROUTE_ERROR_RESPONSE";function gE(t){if(t.startsWith(`${N0}:${pE}:{`))try{let r=JSON.parse(t.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function vE(t){if(t.startsWith(`${N0}:${hE}:{`))try{let r=JSON.parse(t.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new sE(r.status,r.statusText,r.data)}catch{}}function yE(t,{relative:r}={}){et(ol(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:l}=u.useContext(fn),{hash:s,pathname:c,search:d}=Ds(t,{relative:r}),m=c;return a!=="/"&&(m=c==="/"?a:Vn([a,c])),l.createHref({pathname:m,search:d,hash:s})}function ol(){return u.useContext(Os)!=null}function On(){return et(ol(),"useLocation() may be used only in the context of a component."),u.useContext(Os).location}var j0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function R0(t){u.useContext(fn).static||u.useLayoutEffect(t)}function ll(){let{isDataRoute:t}=u.useContext(qn);return t?OE():bE()}function bE(){et(ol(),"useNavigate() may be used only in the context of a component.");let t=u.useContext(al),{basename:r,navigator:a}=u.useContext(fn),{matches:l}=u.useContext(qn),{pathname:s}=On(),c=JSON.stringify(Jm(l)),d=u.useRef(!1);return R0(()=>{d.current=!0}),u.useCallback((g,h={})=>{if(_n(d.current,j0),!d.current)return;if(typeof g=="number"){a.go(g);return}let b=qc(g,JSON.parse(c),s,h.relative==="path");t==null&&r!=="/"&&(b.pathname=b.pathname==="/"?r:Vn([r,b.pathname])),(h.replace?a.replace:a.push)(b,h.state,h)},[r,a,c,s,t])}var xE=u.createContext(null);function SE(t){let r=u.useContext(qn).outlet;return u.useMemo(()=>r&&u.createElement(xE.Provider,{value:t},r),[r,t])}function Ds(t,{relative:r}={}){let{matches:a}=u.useContext(qn),{pathname:l}=On(),s=JSON.stringify(Jm(a));return u.useMemo(()=>qc(t,JSON.parse(s),l,r==="path"),[t,s,l,r])}function CE(t,r){return T0(t,r)}function T0(t,r,a){var j;et(ol(),"useRoutes() may be used only in the context of a component.");let{navigator:l}=u.useContext(fn),{matches:s}=u.useContext(qn),c=s[s.length-1],d=c?c.params:{},m=c?c.pathname:"/",g=c?c.pathnameBase:"/",h=c&&c.route;{let N=h&&h.path||"";_0(m,!h||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let b=On(),v;if(r){let N=typeof r=="string"?rl(r):r;et(g==="/"||((j=N.pathname)==null?void 0:j.startsWith(g)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${g}" but pathname "${N.pathname}" was given in the \`location\` prop.`),v=N}else v=b;let x=v.pathname||"/",C=x;if(g!=="/"){let N=g.replace(/^\//,"").split("/");C="/"+x.replace(/^\//,"").split("/").slice(N.length).join("/")}let E=a&&a.state.matches.length?a.state.matches.map(N=>Object.assign(N,{route:a.manifest[N.route.id]||N.route})):g0(t,{pathname:C});_n(h||E!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),_n(E==null||E[E.length-1].route.element!==void 0||E[E.length-1].route.Component!==void 0||E[E.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let w=RE(E&&E.map(N=>Object.assign({},N,{params:Object.assign({},d,N.params),pathname:Vn([g,l.encodeLocation?l.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?g:Vn([g,l.encodeLocation?l.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),s,a);return r&&w?u.createElement(Os.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},w):w}function wE(){let t=kE(),r=iE(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,l="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:l},c={padding:"2px 4px",backgroundColor:l},d=null;return console.error("Error handled by React Router default ErrorBoundary:",t),d=u.createElement(u.Fragment,null,u.createElement("p",null,"💿 Hey developer 👋"),u.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",u.createElement("code",{style:c},"ErrorBoundary")," or"," ",u.createElement("code",{style:c},"errorElement")," prop on your route.")),u.createElement(u.Fragment,null,u.createElement("h2",null,"Unexpected Application Error!"),u.createElement("h3",{style:{fontStyle:"italic"}},r),a?u.createElement("pre",{style:s},a):null,d)}var EE=u.createElement(wE,null),A0=class extends u.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!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){this.props.onError?this.props.onError(t,r):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=vE(t.digest);a&&(t=a)}let r=t!==void 0?u.createElement(qn.Provider,{value:this.props.routeContext},u.createElement(ep.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?u.createElement(NE,{error:t},r):r}};A0.contextType=w0;var Kf=new WeakMap;function NE({children:t,error:r}){let{basename:a}=u.useContext(fn);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let l=gE(r.digest);if(l){let s=Kf.get(r);if(s)throw s;let c=S0(l.location,a);if(x0&&!Kf.get(r))if(c.isExternal||l.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:l.replace}));throw Kf.set(r,d),d}return u.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return t}function jE({routeContext:t,match:r,children:a}){let l=u.useContext(al);return l&&l.static&&l.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=r.route.id),u.createElement(qn.Provider,{value:t},a)}function RE(t,r=[],a){let l=a==null?void 0:a.state;if(t==null){if(!l)return null;if(l.errors)t=l.matches;else if(r.length===0&&!l.initialized&&l.matches.length>0)t=l.matches;else return null}let s=t,c=l==null?void 0:l.errors;if(c!=null){let b=s.findIndex(v=>v.route.id&&(c==null?void 0:c[v.route.id])!==void 0);et(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),s=s.slice(0,Math.min(s.length,b+1))}let d=!1,m=-1;if(a&&l){d=l.renderFallback;for(let b=0;b=0?s=s.slice(0,m+1):s=[s[0]];break}}}}let g=a==null?void 0:a.onError,h=l&&g?(b,v)=>{var x,C;g(b,{location:l.location,params:((C=(x=l.matches)==null?void 0:x[0])==null?void 0:C.params)??{},pattern:cE(l.matches),errorInfo:v})}:void 0;return s.reduceRight((b,v,x)=>{let C,E=!1,w=null,j=null;l&&(C=c&&v.route.id?c[v.route.id]:void 0,w=v.route.errorElement||EE,d&&(m<0&&x===0?(_0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),E=!0,j=null):m===x&&(E=!0,j=v.route.hydrateFallbackElement||null)));let N=r.concat(s.slice(0,x+1)),_=()=>{let A;return C?A=w:E?A=j:v.route.Component?A=u.createElement(v.route.Component,null):v.route.element?A=v.route.element:A=b,u.createElement(jE,{match:v,routeContext:{outlet:b,matches:N,isDataRoute:l!=null},children:A})};return l&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?u.createElement(A0,{location:l.location,revalidation:l.revalidation,component:w,error:C,children:_(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:h}):_()},null)}function tp(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function TE(t){let r=u.useContext(al);return et(r,tp(t)),r}function AE(t){let r=u.useContext(Wc);return et(r,tp(t)),r}function _E(t){let r=u.useContext(qn);return et(r,tp(t)),r}function np(t){let r=_E(t),a=r.matches[r.matches.length-1];return et(a.route.id,`${t} can only be used on routes that contain a unique "id"`),a.route.id}function ME(){return np("useRouteId")}function kE(){var l;let t=u.useContext(ep),r=AE("useRouteError"),a=np("useRouteError");return t!==void 0?t:(l=r.errors)==null?void 0:l[a]}function OE(){let{router:t}=TE("useNavigate"),r=np("useNavigate"),a=u.useRef(!1);return R0(()=>{a.current=!0}),u.useCallback(async(s,c={})=>{_n(a.current,j0),a.current&&(typeof s=="number"?await t.navigate(s):await t.navigate(s,{fromRouteId:r,...c}))},[t,r])}var fy={};function _0(t,r,a){!r&&!fy[t]&&(fy[t]=!0,_n(!1,a))}u.memo(DE);function DE({routes:t,manifest:r,future:a,state:l,isStatic:s,onError:c}){return T0(t,void 0,{manifest:r,state:l,isStatic:s,onError:c})}function Ua({to:t,replace:r,state:a,relative:l}){et(ol()," may be used only in the context of a component.");let{static:s}=u.useContext(fn);_n(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:c}=u.useContext(qn),{pathname:d}=On(),m=ll(),g=qc(t,Jm(c),d,l==="path"),h=JSON.stringify(g);return u.useEffect(()=>{m(JSON.parse(h),{replace:r,state:a,relative:l})},[m,h,l,r,a]),null}function LE(t){return SE(t.context)}function Un(t){et(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function zE({basename:t="/",children:r=null,location:a,navigationType:l="POP",navigator:s,static:c=!1,useTransitions:d}){et(!ol(),"You cannot render a inside another . You should never have more than one in your app.");let m=t.replace(/^\/*/,"/"),g=u.useMemo(()=>({basename:m,navigator:s,static:c,useTransitions:d,future:{}}),[m,s,c,d]);typeof a=="string"&&(a=rl(a));let{pathname:h="/",search:b="",hash:v="",state:x=null,key:C="default",mask:E}=a,w=u.useMemo(()=>{let j=Rr(h,m);return j==null?null:{location:{pathname:j,search:b,hash:v,state:x,key:C,mask:E},navigationType:l}},[m,h,b,v,x,C,l,E]);return _n(w!=null,` is not able to match the URL "${h}${b}${v}" because it does not start with the basename, so the won't render anything.`),w==null?null:u.createElement(fn.Provider,{value:g},u.createElement(Os.Provider,{children:r,value:w}))}function PE({children:t,location:r}){return CE(ym(t),r)}function ym(t,r=[]){let a=[];return u.Children.forEach(t,(l,s)=>{if(!u.isValidElement(l))return;let c=[...r,s];if(l.type===u.Fragment){a.push.apply(a,ym(l.props.children,c));return}et(l.type===Un,`[${typeof l.type=="string"?l.type:l.type.name}] is not a component. All component children of must be a or `),et(!l.props.index||!l.props.children,"An index route cannot have child routes.");let d={id:l.props.id||c.join("-"),caseSensitive:l.props.caseSensitive,element:l.props.element,Component:l.props.Component,index:l.props.index,path:l.props.path,middleware:l.props.middleware,loader:l.props.loader,action:l.props.action,hydrateFallbackElement:l.props.hydrateFallbackElement,HydrateFallback:l.props.HydrateFallback,errorElement:l.props.errorElement,ErrorBoundary:l.props.ErrorBoundary,hasErrorBoundary:l.props.hasErrorBoundary===!0||l.props.ErrorBoundary!=null||l.props.errorElement!=null,shouldRevalidate:l.props.shouldRevalidate,handle:l.props.handle,lazy:l.props.lazy};l.props.children&&(d.children=ym(l.props.children,c)),a.push(d)}),a}var Cc="get",wc="application/x-www-form-urlencoded";function Fc(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function BE(t){return Fc(t)&&t.tagName.toLowerCase()==="button"}function $E(t){return Fc(t)&&t.tagName.toLowerCase()==="form"}function HE(t){return Fc(t)&&t.tagName.toLowerCase()==="input"}function UE(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function IE(t,r){return t.button===0&&(!r||r==="_self")&&!UE(t)}function bm(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((r,a)=>{let l=t[a];return r.concat(Array.isArray(l)?l.map(s=>[a,s]):[[a,l]])},[]))}function VE(t,r){let a=bm(t);return r&&r.forEach((l,s)=>{a.has(s)||r.getAll(s).forEach(c=>{a.append(s,c)})}),a}var dc=null;function GE(){if(dc===null)try{new FormData(document.createElement("form"),0),dc=!1}catch{dc=!0}return dc}var YE=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Zf(t){return t!=null&&!YE.has(t)?(_n(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${wc}"`),null):t}function qE(t,r){let a,l,s,c,d;if($E(t)){let m=t.getAttribute("action");l=m?Rr(m,r):null,a=t.getAttribute("method")||Cc,s=Zf(t.getAttribute("enctype"))||wc,c=new FormData(t)}else if(BE(t)||HE(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a `,L=>`${R}-${L.id}`)}const N=x`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${S(n.skinTones,(k,A)=>x`
${k}
`,k=>k)}
${S(n.currentEmojisWithCategories,(k,A)=>x`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,E=(k,A)=>{for(const R of e.querySelectorAll(`[${k}]`))A(R,R.getAttribute(k))};if(h){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(A,R)=>{A.addEventListener(k,o[R])});E("data-ref",(k,A)=>{i[A]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,A)=>{let R=m.get(A);R||m.set(A,R=new WeakSet),R.has(k)||(R.add(k),l[A](k))})}const wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function Ez(e){let n=!1,a;const o=new Map,l=new Set;let i;const d=()=>{if(n)return;const p=[...l];l.clear();try{for(const y of p)y()}finally{i=!1,l.size&&(i=!0,wu(d))}},m=new Proxy({},{get(p,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return p[y]},set(p,y,v){if(p[y]!==v){p[y]=v;const x=o.get(y);if(x){for(const S of x)l.add(S);i||(i=!0,wu(d))}}return!0}}),h=p=>{const y=()=>{const v=a;a=y;try{return p()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:h}}function fp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const mp=[],{assign:Yc}=Object;function kz(e,n){const a={},o=new AbortController,l=o.signal,{state:i,createEffect:d}=Ez(l),m=new Map;Yc(i,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Yc(i,n),Yc(i,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:YL,isRtl:!1,currentGroupIndex:0,groups:lp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{i.currentGroup!==i.groups[i.currentGroupIndex]&&(i.currentGroup=i.groups[i.currentGroupIndex])});const h=G=>{e.getElementById(G).focus()},p=G=>e.getElementById(`emo-${G.id}`),y=(G,se)=>{a.rootElement.dispatchEvent(new CustomEvent(G,{detail:se,bubbles:!0,composed:!0}))},v=(G,se)=>G.id===se.id,x=(G,se)=>{const{category:ge,emojis:je}=G,{category:Ae,emojis:Qe}=se;return ge!==Ae?!1:fp(je,Qe,v)},S=G=>{fp(i.currentEmojis,G,v)||(i.currentEmojis=G)},j=G=>{i.searchMode!==G&&(i.searchMode=G)},C=G=>{fp(i.currentEmojisWithCategories,G,x)||(i.currentEmojisWithCategories=G)},N=(G,se)=>se&&G.skins&&G.skins[se]||G.unicode,A={labelWithSkin:(G,se)=>cz([G.name||N(G,se),G.annotation,...G.shortcodes||mp].filter(Boolean)).join(", "),titleForEmoji:G=>G.annotation||(G.shortcodes||mp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:V,onEmojiClick:O,onNavClick:re,onNavKeydown:oe,onSearchKeydown:K,onSkinToneOptionsClick:I,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ne,onSkinToneOptionsKeyup:J,onSearchInput:pe},L={calculateEmojiGridStyle:U,updateOnIntersection:q};let z=!0;d(()=>{jz(e,i,A,R,L,a,l,m,z),z=!1}),i.emojiVersion||cp().then(G=>{G||(i.message=i.i18n.emojiUnsupportedMessage)}),d(()=>{async function G(){let se=!1;const ge=setTimeout(()=>{se=!0,i.message=i.i18n.loadingMessage},GL);try{await i.database.ready(),i.databaseLoaded=!0}catch(je){console.error(je),i.message=i.i18n.networkErrorMessage}finally{clearTimeout(ge),se&&(se=!1,i.message="")}}i.database&&G()}),d(()=>{i.pickerStyle=` + --num-groups: ${i.groups.length}; + --indicator-opacity: ${i.searchMode?0:1}; + --num-skintones: ${Mx};`}),d(()=>{i.customEmoji&&i.database&&B()}),d(()=>{i.customEmoji&&i.customEmoji.length?i.groups!==Zp&&(i.groups=Zp):i.groups!==lp&&(i.currentGroupIndex&&i.currentGroupIndex--,i.groups=lp)}),d(()=>{async function G(){i.databaseLoaded&&(i.currentSkinTone=await i.database.getPreferredSkinTone())}G()}),d(()=>{i.skinTones=Array(Mx).fill().map((G,se)=>rz(i.skinToneEmoji,se))}),d(()=>{i.skinToneButtonText=i.skinTones[i.currentSkinTone]}),d(()=>{i.skinToneButtonLabel=i.i18n.skinToneLabel.replace("{skinTone}",i.i18n.skinTones[i.currentSkinTone])}),d(()=>{async function G(){const{database:se}=i,ge=(await Promise.all(WL.map(je=>se.getEmojiByUnicodeOrName(je)))).filter(Boolean);i.defaultFavoriteEmojis=ge}i.databaseLoaded&&G()});function B(){const{customEmoji:G,database:se}=i,ge=G||mp;se.customEmoji!==ge&&(se.customEmoji=ge)}d(()=>{async function G(){B();const{database:se,defaultFavoriteEmojis:ge,numColumns:je}=i,Ae=await se.getTopFavoriteEmoji(je),Qe=await ce(c5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));i.currentFavorites=Qe}i.databaseLoaded&&i.defaultFavoriteEmojis&&G()});function U(G){sz(G,l,()=>{{const se=getComputedStyle(a.rootElement),ge=parseInt(se.getPropertyValue("--num-columns"),10),je=se.getPropertyValue("direction")==="rtl";i.numColumns=ge,i.isRtl=je}})}function q(G){Nz(G,l,se=>{for(const{target:ge,isIntersecting:je}of se)ge.classList.toggle("onscreen",je)})}d(()=>{async function G(){const{searchText:se,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=i;if(!je)i.currentEmojis=[],i.searchMode=!1;else if(se.length>=HL){const Qe=await M(se);i.searchText===se&&(S(Qe),j(!0))}else{const{id:Qe}=ge;if(Qe!==-1||Ae&&Ae.length){const ct=await he(Qe);i.currentGroup.id===Qe&&(S(ct),j(!1))}}}G()});const Z=()=>{tu(()=>uz(a.tabpanelElement))};d(()=>{const{currentEmojis:G,emojiVersion:se}=i,ge=G.filter(je=>je.unicode).filter(je=>Ox(je)&&!Qp.has(je.unicode));if(!se&&ge.length)S(G),tu(()=>Q(ge));else{const je=se?G:G.filter(fe);S(je),Z()}});function Q(G){iz(G,a.baselineEmoji,p)?Z():i.currentEmojis=[...i.currentEmojis]}function fe(G){return!G.unicode||!Ox(G)||Qp.get(G.unicode)}async function de(G){const se=i.emojiVersion||await cp();return G.filter(({version:ge})=>!ge||ge<=se)}async function ce(G){return az(G,i.emojiVersion||await cp())}async function he(G){const se=G===-1?i.customEmoji:await i.database.getEmojiByGroup(G);return ce(await de(se))}async function M(G){return ce(await de(await i.database.getEmojiBySearchQuery(G)))}d(()=>{}),d(()=>{function G(){const{searchMode:ge,currentEmojis:je}=i;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const Qe of je){const ct=Qe.category||"";let Tt=Ae.get(ct);Tt||(Tt=[],Ae.set(ct,Tt)),Tt.push(Qe)}return[...Ae.entries()].map(([Qe,ct])=>({category:Qe,emojis:ct})).sort((Qe,ct)=>i.customCategorySorting(Qe.category,ct.category))}const se=G();C(se)}),d(()=>{i.activeSearchItemId=i.activeSearchItem!==-1&&i.currentEmojis[i.activeSearchItem].id}),d(()=>{const{rawSearchText:G}=i;l5(()=>{i.searchText=(G||"").trim(),i.activeSearchItem=-1})});function K(G){if(!i.searchMode||!i.currentEmojis.length)return;const se=ge=>{rr(G),i.activeSearchItem=up(ge,i.activeSearchItem,i.currentEmojis)};switch(G.key){case"ArrowDown":return se(!1);case"ArrowUp":return se(!0);case"Enter":if(i.activeSearchItem===-1)i.activeSearchItem=0;else return rr(G),_(i.currentEmojis[i.activeSearchItem].id)}}function re(G){const{target:se}=G,ge=se.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",i.rawSearchText="",i.searchText="",i.activeSearchItem=-1,i.currentGroupIndex=i.groups.findIndex(Ae=>Ae.id===je)}function oe(G){const{target:se,key:ge}=G,je=Ae=>{Ae&&(rr(G),Ae.focus())};switch(ge){case"ArrowLeft":return je(se.previousElementSibling);case"ArrowRight":return je(se.nextElementSibling);case"Home":return je(se.parentElement.firstElementChild);case"End":return je(se.parentElement.lastElementChild)}}async function ee(G){const se=await i.database.getEmojiByUnicodeOrName(G),ge=[...i.currentEmojis,...i.currentFavorites].find(Ae=>Ae.id===G),je=ge.unicode&&N(ge,i.currentSkinTone);return await i.database.incrementFavoriteEmojiCount(G),{emoji:se,skinTone:i.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function _(G){const se=ee(G);y("emoji-click-sync",se),y("emoji-click",await se)}function O(G){const{target:se}=G;if(!se.classList.contains("emoji"))return;rr(G);const ge=se.id.substring(4);_(ge)}function H(G){i.currentSkinTone=G,i.skinTonePickerExpanded=!1,h("skintone-button"),y("skin-tone-change",{skinTone:G}),i.database.setPreferredSkinTone(G)}function I(G){const{target:{id:se}}=G,ge=se&&se.match(/^skintone-(\d)/);if(!ge)return;rr(G);const je=parseInt(ge[1],10);H(je)}function V(G){i.skinTonePickerExpanded=!i.skinTonePickerExpanded,i.activeSkinTone=i.currentSkinTone,i.skinTonePickerExpanded&&(rr(G),tu(()=>h("skintone-list")))}d(()=>{i.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{i.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):i.skinTonePickerExpandedAfterAnimation=!1});function ne(G){if(!i.skinTonePickerExpanded)return;const se=async ge=>{rr(G),i.activeSkinTone=ge};switch(G.key){case"ArrowUp":return se(up(!0,i.activeSkinTone,i.skinTones));case"ArrowDown":return se(up(!1,i.activeSkinTone,i.skinTones));case"Home":return se(0);case"End":return se(i.skinTones.length-1);case"Enter":return rr(G),H(i.activeSkinTone);case"Escape":return rr(G),i.skinTonePickerExpanded=!1,h("skintone-button")}}function J(G){if(i.skinTonePickerExpanded)switch(G.key){case" ":return rr(G),H(i.activeSkinTone)}}async function me(G){const{relatedTarget:se}=G;(!se||se.id!=="skintone-list")&&(i.skinTonePickerExpanded=!1)}function pe(G){i.rawSearchText=G.target.value}return{$set(G){Yc(i,G)},$destroy(){o.abort()}}}const Tz="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Rz="en";var Az={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},_z=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const u5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],Mz=`:host{--emoji-font-family:${i5}}`;class bg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=_z+Mz,this.shadowRoot.appendChild(a),this._ctx={locale:Rz,dataSource:Tz,skinToneEmoji:FL,customCategorySorting:qL,customEmoji:null,i18n:Az,emojiVersion:null,...n};for(const o of u5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){Ix(this),this._cmp||(this._cmp=kz(this.shadowRoot,this._ctx))}disconnectedCallback(){Ix(this),wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,i)=>i.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new UL({locale:n,dataSource:a}))}_dbFlush(){wu(()=>this._dbCreate())}}const d5={};for(const e of u5)d5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(bg.prototype,d5);function Ix(e){e instanceof bg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",bg);function Oz({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=i=>{var h;const d=i.detail,m=(d==null?void 0:d.unicode)??((h=d==null?void 0:d.emoji)==null?void 0:h.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),c.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const Dz=/^<(a?):([^:>]+):(\d{17,20})>$/;function nu(e,n,a=!1){return`${a?"`}function f5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(Dz);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function m5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function Lz(e,n=[]){const a=f5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==nu(o.name,o.id,o.animated))return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function zz({value:e,guildEmojis:n,size:a="md"}){const o=Lz(e,n),l=a==="lg"?"size-10":"size-7",i=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?c.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?c.jsxs("span",{className:"inline-flex items-center gap-3",children:[c.jsx("img",{src:m5(o.id,o.animated),alt:o.name??"custom emoji",className:ie(l,"shrink-0 rounded-md"),loading:"lazy"}),c.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[c.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),c.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):c.jsx("span",{className:ie(i,"leading-none"),title:o.value,children:o.value})}function Pz({id:e,label:n,description:a,value:o,onChange:l,readOnly:i}){const[d,m]=f.useState(!1),[h,p]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Z=!1)=>{C(!0),S("");try{const Q=await ke.getGuildResources(Z);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const A=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Z=N.trim().toLowerCase();return Z?A.filter(Q=>Q.name.toLowerCase().includes(Z)):A},[A,N]),L=String(o??""),z=f5(L);function B(Z){l(Z),m(!1)}function U(Z){l(nu(Z.name,Z.id,Z.animated)),m(!1)}function q(){l("")}return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:e,children:n}),a?c.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,c.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("div",{className:"min-w-0 flex-1",children:c.jsx(zz,{value:o,guildEmojis:A,size:"lg"})}),c.jsxs("div",{className:"flex shrink-0 gap-2",children:[c.jsx(be,{type:"button",variant:"secondary",size:"sm",disabled:i,onClick:()=>m(!0),children:"Choose emoji"}),L?c.jsx(be,{type:"button",variant:"ghost",size:"sm",disabled:i,onClick:q,children:"Clear"}):null]})]}),c.jsx($w,{open:d,onOpenChange:m,children:c.jsxs(Zh,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[c.jsxs(Qh,{className:"space-y-1 border-b border-border px-5 py-4",children:[c.jsx(Jh,{children:"Choose emoji"}),c.jsxs(eg,{children:["Server emojis save as"," ",c.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),c.jsxs(Yj,{value:h,onValueChange:Z=>p(Z),className:"flex min-h-0 flex-1 flex-col",children:[c.jsxs(fg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[c.jsx(Ka,{value:"server",children:"Server"}),c.jsx(Ka,{value:"unicode",children:"All emojis"})]}),c.jsxs(Wp,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[c.jsxs("div",{className:"relative mb-3",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by name…",value:N,onChange:Z=>E(Z.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?c.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",A.length," custom emoji",A.length===1?"":"s"]}):null,c.jsx(hi,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?c.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Z,Q)=>c.jsx(Fe,{className:"aspect-square rounded-lg"},Q))}):x?c.jsxs("div",{className:"space-y-3 p-4 text-center",children:[c.jsx("p",{className:"text-sm text-destructive",children:x}),c.jsx(be,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?c.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:A.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):c.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Z=>{const Q=z.kind==="custom"&&z.id===Z.id;return c.jsx("button",{type:"button",title:`:${Z.name}:`,className:ie("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>U(Z),children:c.jsx("img",{src:Z.url??m5(Z.id,Z.animated),alt:Z.name,className:"size-8 object-contain",loading:"lazy"})},Z.id)})})})]}),c.jsx(Wp,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:c.jsx(Oz,{onPick:B})})]})]})}),c.jsx(rt,{value:L,disabled:i,onChange:Z=>l(Z.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const Ux="BOT_TOKEN",Bz="MODEL_API_KEY";function yg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return c.jsx(UD,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return c.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[c.jsxs("div",{children:[c.jsx(Ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),c.jsx(Dn,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(BD,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsxs(ud,{value:String(n??""),disabled:o,onValueChange:a,children:[c.jsx(gi,{id:l,className:"border-border bg-secondary/30",children:c.jsx(dd,{placeholder:"Select…"})}),c.jsx(vi,{children:e.options.map(d=>c.jsx(no,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=lr(String(n??"#000000"));return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsxs("div",{className:"flex gap-2",children:[c.jsx(cg,{value:d,onChange:a}),c.jsx(rt,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(lr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return c.jsx(Pz,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return c.jsx(HD,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===Ux||n===Bz||!n?"":"••••••••••••";return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const h=m.target.value;a(h||(e.placeholder??Ux))},className:"border-border bg-secondary/30"})]})}const i="border-border bg-secondary/30";return e.type==="textarea"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsx(sd,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${i}`})]}):c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:i})]})}const We=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));We.displayName="Card";const at=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex flex-col space-y-1.5 p-6",e),...n}));at.displayName="CardHeader";const ot=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("font-semibold leading-none tracking-tight",e),...n}));ot.displayName="CardTitle";const Nt=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("text-sm text-muted-foreground",e),...n}));Nt.displayName="CardDescription";const qe=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("p-6 pt-0",e),...n}));qe.displayName="CardContent";const p5=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex items-center p-6 pt-0",e),...n}));p5.displayName="CardFooter";function Hx(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function $z(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function xg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const i=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:i,label:Hx(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...xg(l,i));continue}a.push({path:i,label:Hx(o),type:$z(o,l)})}return a}function Iz(e){const n=xg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function ao(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function Xl(e,n,a){const o=n.split("."),l=structuredClone(e);let i=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const Hz=e=>{switch(e){case"success":return Fz;case"info":return Wz;case"warning":return Yz;case"error":return qz;default:return null}},Vz=Array(12).fill(0),Gz=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},Vz.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),Fz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Yz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Wz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),qz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Kz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Xz=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let Jp=1;class Zz{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,i=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:Jp++,d=this.toasts.find(h=>h.id===i),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(i)&&this.dismissedToasts.delete(i),d?this.toasts=this.toasts.map(h=>h.id===i?(this.publish({...h,...n,id:i,title:o}),{...h,...n,id:i,dismissible:m,title:o}):h):this.addToast({title:o,...l,dismissible:m,id:i}),i},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let i=o!==void 0,d;const m=l.then(async p=>{if(d=["resolve",p],ue.isValidElement(p))i=!1,this.create({id:o,type:"default",message:p});else if(Jz(p)&&!p.ok){i=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${p.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${p.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(p instanceof Error){i=!1;const v=typeof a.error=="function"?await a.error(p):a.error,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){i=!1;const v=typeof a.success=="function"?await a.success(p):a.success,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async p=>{if(d=["reject",p],a.error!==void 0){i=!1;const y=typeof a.error=="function"?await a.error(p):a.error,v=typeof a.description=="function"?await a.description(p):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{i&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),h=()=>new Promise((p,y)=>m.then(()=>d[0]==="reject"?y(d[1]):p(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:h}:Object.assign(o,{unwrap:h})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||Jp++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const cn=new Zz,Qz=(e,n)=>{const a=(n==null?void 0:n.id)||Jp++;return cn.addToast({title:e,...n,id:a}),a},Jz=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",eP=Qz,tP=()=>cn.toasts,nP=()=>cn.getActiveToasts(),rs=Object.assign(eP,{success:cn.success,info:cn.info,warning:cn.warning,error:cn.error,custom:cn.custom,message:cn.message,promise:cn.promise,dismiss:cn.dismiss,loading:cn.loading},{getHistory:tP,getToasts:nP});Uz("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Wc(e){return e.label!==void 0}const rP=3,aP="24px",oP="16px",Vx=4e3,sP=356,lP=14,iP=45,cP=200;function ar(...e){return e.filter(Boolean).join(" ")}function uP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const dP=e=>{var n,a,o,l,i,d,m,h,p;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:A,removeToast:R,defaultRichColors:L,closeButton:z,style:B,cancelButtonStyle:U,actionButtonStyle:q,className:Z="",descriptionClassName:Q="",duration:fe,position:de,gap:ce,expandByDefault:he,classNames:M,icons:K,closeButtonAriaLabel:re="Close toast"}=e,[oe,ee]=ue.useState(null),[_,O]=ue.useState(null),[H,I]=ue.useState(!1),[V,ne]=ue.useState(!1),[J,me]=ue.useState(!1),[pe,G]=ue.useState(!1),[se,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[Qe,ct]=ue.useState(0),Tt=ue.useRef(v.duration||fe||Vx),Ca=ue.useRef(null),Rt=ue.useRef(null),Os=E===0,Ds=E+1<=C,Yt=v.type,$r=v.dismissible!==!1,Wt=v.className||"",gd=v.descriptionClassName||"",ja=ue.useMemo(()=>N.findIndex(Te=>Te.toastId===v.id)||0,[N,v.id]),xi=ue.useMemo(()=>{var Te;return(Te=v.closeButton)!=null?Te:z},[v.closeButton,z]),Ea=ue.useMemo(()=>v.duration||fe||Vx,[v.duration,fe]),Ls=ue.useRef(0),dr=ue.useRef(0),Si=ue.useRef(0),Ir=ue.useRef(null),[Na,qt]=de.split("-"),$n=ue.useMemo(()=>N.reduce((Te,ut,At)=>At>=ja?Te:Te+ut.height,0),[N,ja]),Ht=Xz(),vd=v.invert||y,zs=Yt==="loading";dr.current=ue.useMemo(()=>ja*ce+$n,[ja,$n]),ue.useEffect(()=>{Tt.current=Ea},[Ea]),ue.useEffect(()=>{I(!0)},[]),ue.useEffect(()=>{const Te=Rt.current;if(Te){const ut=Te.getBoundingClientRect().height;return ct(ut),j(At=>[{toastId:v.id,height:ut,position:v.position},...At]),()=>j(At=>At.filter(Vt=>Vt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!H)return;const Te=Rt.current,ut=Te.style.height;Te.style.height="auto";const At=Te.getBoundingClientRect().height;Te.style.height=ut,ct(At),j(Vt=>Vt.find(mt=>mt.toastId===v.id)?Vt.map(mt=>mt.toastId===v.id?{...mt,height:At}:mt):[{toastId:v.id,height:At,position:v.position},...Vt])},[H,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Xn=ue.useCallback(()=>{ne(!0),Ae(dr.current),j(Te=>Te.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},cP)},[v,R,j,dr]);ue.useEffect(()=>{if(v.promise&&Yt==="loading"||v.duration===1/0||v.type==="loading")return;let Te;return A||S||Ht?(()=>{if(Si.current{Tt.current!==1/0&&(Ls.current=new Date().getTime(),Te=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Xn()},Tt.current))})(),()=>clearTimeout(Te)},[A,S,v,Yt,Ht,Xn]),ue.useEffect(()=>{v.delete&&(Xn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Xn,v.delete]);function fo(){var Te;if(K!=null&&K.loading){var ut;return ue.createElement("div",{className:ar(M==null?void 0:M.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Yt==="loading"},K.loading)}return ue.createElement(Gz,{className:ar(M==null?void 0:M.loader,v==null||(Te=v.classNames)==null?void 0:Te.loader),visible:Yt==="loading"})}const mo=v.icon||(K==null?void 0:K[Yt])||Hz(Yt);var ka,Zn;return ue.createElement("li",{tabIndex:0,ref:Rt,className:ar(Z,Wt,M==null?void 0:M.toast,v==null||(n=v.classNames)==null?void 0:n.toast,M==null?void 0:M.default,M==null?void 0:M[Yt],v==null||(a=v.classNames)==null?void 0:a[Yt]),"data-sonner-toast":"","data-rich-colors":(ka=v.richColors)!=null?ka:L,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":H,"data-promise":!!v.promise,"data-swiped":se,"data-removed":V,"data-visible":Ds,"data-y-position":Na,"data-x-position":qt,"data-index":E,"data-front":Os,"data-swiping":J,"data-dismissible":$r,"data-type":Yt,"data-invert":vd,"data-swipe-out":pe,"data-swipe-direction":_,"data-expanded":!!(A||he&&H),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${V?je:dr.current}px`,"--initial-height":he?"auto":`${Qe}px`,...B,...v.style},onDragEnd:()=>{me(!1),ee(null),Ir.current=null},onPointerDown:Te=>{Te.button!==2&&(zs||!$r||(Ca.current=new Date,Ae(dr.current),Te.target.setPointerCapture(Te.pointerId),Te.target.tagName!=="BUTTON"&&(me(!0),Ir.current={x:Te.clientX,y:Te.clientY})))},onPointerUp:()=>{var Te,ut,At;if(pe||!$r)return;Ir.current=null;const Vt=Number(((Te=Rt.current)==null?void 0:Te.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ur=Number(((ut=Rt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((At=Ca.current)==null?void 0:At.getTime()),Zt=oe==="x"?Vt:Ur,Ta=Math.abs(Zt)/mt;if(Math.abs(Zt)>=iP||Ta>.11){Ae(dr.current),v.onDismiss==null||v.onDismiss.call(v,v),O(oe==="x"?Vt>0?"right":"left":Ur>0?"down":"up"),Xn(),G(!0);return}else{var Qt,Jt;(Qt=Rt.current)==null||Qt.style.setProperty("--swipe-amount-x","0px"),(Jt=Rt.current)==null||Jt.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),ee(null)},onPointerMove:Te=>{var ut,At,Vt;if(!Ir.current||!$r||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Te.clientY-Ir.current.y,Zt=Te.clientX-Ir.current.x;var Ta;const Qt=(Ta=e.swipeDirections)!=null?Ta:uP(de);!oe&&(Math.abs(Zt)>1||Math.abs(mt)>1)&&ee(Math.abs(Zt)>Math.abs(mt)?"x":"y");let Jt={x:0,y:0};const po=In=>1/(1.5+Math.abs(In)/20);if(oe==="y"){if(Qt.includes("top")||Qt.includes("bottom"))if(Qt.includes("top")&&mt<0||Qt.includes("bottom")&&mt>0)Jt.y=mt;else{const In=mt*po(mt);Jt.y=Math.abs(In)0)Jt.x=Zt;else{const In=Zt*po(Zt);Jt.x=Math.abs(In)0||Math.abs(Jt.y)>0)&&ge(!0),(At=Rt.current)==null||At.style.setProperty("--swipe-amount-x",`${Jt.x}px`),(Vt=Rt.current)==null||Vt.style.setProperty("--swipe-amount-y",`${Jt.y}px`)}},xi&&!v.jsx&&Yt!=="loading"?ue.createElement("button",{"aria-label":re,"data-disabled":zs,"data-close-button":!0,onClick:zs||!$r?()=>{}:()=>{Xn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:ar(M==null?void 0:M.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Zn=K==null?void 0:K.close)!=null?Zn:Kz):null,(Yt||v.icon||v.promise)&&v.icon!==null&&((K==null?void 0:K[Yt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:ar(M==null?void 0:M.icon,v==null||(l=v.classNames)==null?void 0:l.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||fo():null,v.type!=="loading"?mo:null):null,ue.createElement("div",{"data-content":"",className:ar(M==null?void 0:M.content,v==null||(i=v.classNames)==null?void 0:i.content)},ue.createElement("div",{"data-title":"",className:ar(M==null?void 0:M.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:ar(Q,gd,M==null?void 0:M.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&Wc(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||U,onClick:Te=>{Wc(v.cancel)&&$r&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Te),Xn())},className:ar(M==null?void 0:M.cancelButton,v==null||(h=v.classNames)==null?void 0:h.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&Wc(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||q,onClick:Te=>{Wc(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Te),!Te.defaultPrevented&&Xn())},className:ar(M==null?void 0:M.actionButton,v==null||(p=v.classNames)==null?void 0:p.actionButton)},v.action.label):null)};function Gx(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function fP(e,n){const a={};return[e,n].forEach((o,l)=>{const i=l===1,d=i?"--mobile-offset":"--offset",m=i?oP:aP;function h(p){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof p=="number"?`${p}px`:p})}typeof o=="number"||typeof o=="string"?h(o):typeof o=="object"?["top","right","bottom","left"].forEach(p=>{o[p]===void 0?a[`${d}-${p}`]=m:a[`${d}-${p}`]=typeof o[p]=="number"?`${o[p]}px`:o[p]}):h(m)}),a}const mP=ue.forwardRef(function(n,a){const{id:o,invert:l,position:i="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:h,className:p,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=rP,toastOptions:E,dir:k=Gx(),gap:A=lP,icons:R,containerAriaLabel:L="Notifications"}=n,[z,B]=ue.useState([]),U=ue.useMemo(()=>o?z.filter(H=>H.toasterId===o):z.filter(H=>!H.toasterId),[z,o]),q=ue.useMemo(()=>Array.from(new Set([i].concat(U.filter(H=>H.position).map(H=>H.position)))),[U,i]),[Z,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[ce,he]=ue.useState(!1),[M,K]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),re=ue.useRef(null),oe=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),ee=ue.useRef(null),_=ue.useRef(!1),O=ue.useCallback(H=>{B(I=>{var V;return(V=I.find(ne=>ne.id===H.id))!=null&&V.delete||cn.dismiss(H.id),I.filter(({id:ne})=>ne!==H.id)})},[]);return ue.useEffect(()=>cn.subscribe(H=>{if(H.dismiss){requestAnimationFrame(()=>{B(I=>I.map(V=>V.id===H.id?{...V,delete:!0}:V))});return}setTimeout(()=>{g0.flushSync(()=>{B(I=>{const V=I.findIndex(ne=>ne.id===H.id);return V!==-1?[...I.slice(0,V),{...I[V],...H},...I.slice(V+1)]:[H,...I]})})})}),[z]),ue.useEffect(()=>{if(x!=="system"){K(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light")),typeof window>"u")return;const H=window.matchMedia("(prefers-color-scheme: dark)");try{H.addEventListener("change",({matches:I})=>{K(I?"dark":"light")})}catch{H.addListener(({matches:V})=>{try{K(V?"dark":"light")}catch(ne){console.error(ne)}})}},[x]),ue.useEffect(()=>{z.length<=1&&de(!1)},[z]),ue.useEffect(()=>{const H=I=>{var V;if(d.every(me=>I[me]||I.code===me)){var J;de(!0),(J=re.current)==null||J.focus()}I.code==="Escape"&&(document.activeElement===re.current||(V=re.current)!=null&&V.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",H),()=>document.removeEventListener("keydown",H)},[d]),ue.useEffect(()=>{if(re.current)return()=>{ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null,_.current=!1)}},[re.current]),ue.createElement("section",{ref:a,"aria-label":`${L} ${oe}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},q.map((H,I)=>{var V;const[ne,J]=H.split("-");return U.length?ue.createElement("ol",{key:H,dir:k==="auto"?Gx():k,tabIndex:-1,ref:re,className:p,"data-sonner-toaster":!0,"data-sonner-theme":M,"data-y-position":ne,"data-x-position":J,style:{"--front-toast-height":`${((V=Z[0])==null?void 0:V.height)||0}px`,"--width":`${sP}px`,"--gap":`${A}px`,...C,...fP(y,v)},onBlur:me=>{_.current&&!me.currentTarget.contains(me.relatedTarget)&&(_.current=!1,ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||_.current||(_.current=!0,ee.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{ce||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||he(!0)},onPointerUp:()=>he(!1)},U.filter(me=>!me.position&&I===0||me.position===H).map((me,pe)=>{var G,se;return ue.createElement(dP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(G=E==null?void 0:E.duration)!=null?G:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:l,visibleToasts:N,closeButton:(se=E==null?void 0:E.closeButton)!=null?se:h,interacting:ce,position:H,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:O,toasts:U.filter(ge=>ge.position==me.position),heights:Z.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:A,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function ru(e){const n=rs.loading("Saving changes…");try{const a=await e();if(rs.success("Changes saved",{id:n}),a.botRestart){const o=rs.loading("Restarting bot…");a.botRestart.success?rs.success("Bot started",{id:o}):rs.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw rs.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function pP({filename:e}){const{canEditConfig:n}=Ft(),a=!n("supportbot"),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{h(!0),x(""),j("");try{const L=(await ke.getAddonConfigJson(e)).data??{};l(L),d(structuredClone(L))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?Iz(o):null;function E(R,L){l(z=>z&&Xl(z,R,L))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await ru(()=>ke.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const A=i&&JSON.stringify(o)!==JSON.stringify(i);return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[A?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:C,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:k,disabled:p||!A,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,N.map(R=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:R.title}),R.description?c.jsx(Nt,{children:R.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(L=>c.jsx("div",{className:L.type==="textarea"||L.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:L,value:ao(o,L.path),readOnly:a,onChange:z=>E(L.path,z)})},L.path))})]},R.title))]})}function hP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function gP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=xg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",h=l.get(m)??[];h.push(d),l.set(m,h)}const i=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:hP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((h,p)=>h.path.localeCompare(p.path))}));return[...e,...i]}function vP(e){return e!==null&&typeof e=="object"&&"Command"in e}function bP(e){return Object.entries(e).filter(([,n])=>vP(n)).map(([n,a])=>({key:n,...a}))}function yP({data:e,onChange:n}){const a=bP(e);function o(l,i){const d=e[l];n({...e,[l]:{...d,...i}})}return a.length===0?c.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:c.jsx(ye,{icon:ms,size:18})}),c.jsx(ot,{className:"text-base",children:l.key})]}),c.jsxs(qe,{className:"space-y-3",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx(Ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),c.jsx(Dn,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:i=>o(l.key,{Enabled:i})})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Slash command"}),c.jsx(rt,{value:l.Command??"",onChange:i=>o(l.key,{Command:i.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Description"}),c.jsx(rt,{value:l.Description??"",onChange:i=>o(l.key,{Description:i.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function xP(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=ao(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=ao(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function SP(e,n,a,o){const l={};for(const i of n)for(const d of i.fields){const m=ao(a,d.path),h=ao(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(h)&&(l[`${e}:${d.path}`]=m)}return l}function wP({configFile:e}){const{canEditConfig:n}=Ft(),a=!n(e),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[A,R]=f.useState(""),L=V7(e),z=f.useMemo(()=>!L||L==="commands"||!o?L:gP(L,o),[L,o]),B=f.useCallback(async()=>{h(!0),x(""),j("");try{const he=(await ke.getConfigJson(e)).data??{},M=xP(e,he);l(M),d(M);const re=(await ke.getConfigRaw(e)).data??"",oe=D4(re,e);k(oe),R(oe)}catch(ce){x(ce instanceof Error?ce.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{B()},[B]);function U(ce,he){l(M=>M&&Xl(M,ce,he))}async function q(){if(!(a||E===A)){y(!0),x(""),j("");try{const ce=await ru(()=>ke.saveConfigRaw(e,E));j(ce.message||"Config saved."),await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}async function Z(){if(!(a||!o||!i)){if(C==="yaml"){await q();return}y(!0),x(""),j("");try{if(L==="commands"){const ce={};for(const M of Object.keys(o))JSON.stringify(o[M])!==JSON.stringify(i[M])&&(ce[`${e}:${M}`]=o[M]);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}else if(z&&z!=="commands"){const ce=SP(e,z,o,i);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}if(L===null)return c.jsx(Ue,{children:c.jsx(He,{children:"No visual editor available for this file."})});if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const Q=i&&JSON.stringify(o)!==JSON.stringify(i),de=C==="yaml"?E!==A:Q;return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),c.jsx(be,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[de?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:B,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:Z,disabled:p||!de,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,C==="yaml"?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:"Raw YAML"}),c.jsx(Nt,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),c.jsx(qe,{children:c.jsx(sd,{value:E,disabled:a,onChange:ce=>k(ce.target.value),className:"min-h-[min(520px,60vh)] font-mono text-xs leading-relaxed",spellCheck:!1})})]}):L==="commands"?c.jsx(yP,{data:o,onChange:ce=>l(ce)}):z&&z!=="commands"?z.map(ce=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:ce.title}),ce.description?c.jsx(Nt,{children:ce.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:ce.fields.map(he=>c.jsx("div",{className:he.type==="textarea"||he.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:he,value:ao(o,he.path),readOnly:a,onChange:M=>U(he.path,M)})},he.path))})]},ce.title)):null]})}const CP=ke.listConfigs(),jP={supportbot:"Bot config","ticket-panel":"Ticket system",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function EP(){var R,L;const{permissions:e,canViewConfig:n}=Ft(),{files:a}=R0(),[o,l]=dh(),i=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>CP.filter(z=>n(z)),[n]),h=f.useMemo(()=>d?a:[],[d,a]),p=f.useMemo(()=>[...m,...h.map(z=>is(z))],[m,h]),y=p[0]??"",[v,x]=f.useState(()=>i&&p.includes(i)?i:y);if(f.useEffect(()=>{i&&p.includes(i)?x(i):p.includes(v)||(x(y),y&&l({file:y}))},[i,p,v,y,l]),p.length===0)return c.jsx(Mr,{to:Sh(e),replace:!0});function S(z){x(z),l({file:z})}const j=V4(v),C=(j==null?void 0:j.type)==="addon",N=C?j.file:null,E=C?A0(N):jP[v]??"Configuration",k=C?!!((R=e==null?void 0:e.configs.supportbot)!=null&&R.edit):e?!!((L=e.configs[v])!=null&&L.edit):!1,A=C?N:`${v}.yml`;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),c.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${A} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${A} — you do not have permission to save changes.`})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-[220px_1fr]",children:[c.jsxs(We,{className:"h-fit border-border bg-card",children:[c.jsx(at,{className:"pb-2",children:c.jsx(ot,{className:"text-sm font-medium text-muted-foreground",children:"Configuration files"})}),c.jsx(qe,{className:"p-0",children:c.jsx(hi,{className:"h-[min(400px,50vh)]",children:c.jsxs("ul",{className:"space-y-3 p-2",children:[m.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Core"}),c.jsx("ul",{className:"space-y-0.5",children:m.map(z=>c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>S(z),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",z===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[z,".yml"]})},z))})]}):null,h.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Addons"}),c.jsx("ul",{className:"space-y-0.5",children:h.map(z=>{const B=is(z);return c.jsx("li",{children:c.jsx("button",{type:"button",onClick:()=>S(B),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",B===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:z})},z)})})]}):null]})})})]}),c.jsx("div",{className:"min-w-0",children:C&&N?c.jsx(pP,{filename:N},N):c.jsx(wP,{configFile:v},v)})]})]})}const NP={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function kP(e){return e?NP[e]||"Sign-in failed. Please try again.":""}function TP(){const{branding:e}=Ou(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ft(),[l]=dh(),i=f.useMemo(()=>kP(l.get("error")),[l]);return!a&&n?c.jsx(Mr,{to:"/",replace:!0}):c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background p-4",children:c.jsxs(We,{className:"w-full max-w-md border-border bg-card",children:[c.jsx(at,{className:"space-y-4",children:c.jsxs("div",{className:"flex items-center gap-3",children:[e.hasFavicon&&e.faviconUrl?c.jsx("img",{src:`${e.faviconUrl}${e.updatedAt?`?v=${e.updatedAt}`:""}`,alt:"",className:"size-11 rounded-xl object-contain"}):c.jsx("div",{className:"flex size-11 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:22})}),c.jsxs("div",{children:[c.jsx(ot,{className:"text-xl",children:e.title}),c.jsx(Nt,{children:"Sign in to your dashboard"})]})]})}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("p",{className:"text-sm text-muted-foreground",children:["Sign in with Discord. Your application credentials and allowed user IDs are configured in"," ",c.jsx("code",{className:"rounded-md bg-secondary px-1.5 py-0.5 text-xs text-foreground",children:"Configs/api.yml"}),"."]}),i?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:i})}):null,c.jsx(be,{type:"button",className:"w-full",disabled:a,onClick:o,children:a?"Checking session…":"Continue with Discord"})]})]})})}const fs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:ku},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M4},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:N4},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:gh},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:yh}];function RP(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function AP({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return c.jsx("div",{className:"min-h-svh bg-background",children:c.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[c.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?c.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):c.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:24})}),c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),c.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function _P({currentIndex:e,validation:n}){const a=(e+1)/fs.length*100;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[c.jsxs("span",{children:["Step ",e+1," of ",fs.length]}),c.jsxs("span",{children:[Math.round(a),"%"]})]}),c.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:c.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),c.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:fs.map((o,l)=>{var p;const i=RP(o.id),d=(p=n[i])==null?void 0:p.ok,m=l===e,h=lc.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx(ye,{icon:Tu,size:14}),o.globalName||o.username,c.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?c.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:e.error})}):null}function OP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",c.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",c.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"botToken",children:"Bot token"}),c.jsx(rt,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:i=>n({...e,botToken:i.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.botToken}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function DP({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:i}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"secretKey",children:"Session secret"}),c.jsx(rt,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.secretKey}),c.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",variant:"outline",onClick:i,children:"Generate secure secret"}),c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function LP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",c.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientId",children:"Client ID"}),c.jsx(rt,{id:"clientId",value:e.clientId,onChange:i=>n({...e,clientId:i.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientSecret",children:"Client Secret"}),c.jsx(rt,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:i=>n({...e,clientSecret:i.target.value}),className:"h-11 font-mono text-sm"})]})]}),c.jsx(yi,{result:a.oauth}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function zP({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",c.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"redirectUri",children:"Redirect URI"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(rt,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),c.jsx(be,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:c.jsx(ye,{icon:x0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?c.jsx(yi,{result:a.redirectUri}):c.jsx(Ue,{className:"border-border bg-secondary",children:c.jsx(He,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function PP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",c.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",c.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"owners",children:"Owner user IDs"}),c.jsx(sd,{id:"owners",value:e.ownerUserIds,onChange:i=>n({...e,ownerUserIds:i.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),c.jsx(yi,{result:a.owners}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function BP({onContinue:e}){return c.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:c.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[c.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:c.jsx(ye,{icon:Tu,size:40})}),c.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),c.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",c.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),c.jsx(Ue,{className:"mt-6 text-left",children:c.jsx(He,{children:"After restarting, sign in with Discord to open the dashboard."})}),c.jsx(be,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $P({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:i}){const d=e===fs.length-1;return c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(be,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[c.jsx(ye,{icon:b0,size:18,className:"mr-1"}),"Back"]}),c.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?c.jsx(be,{type:"button",size:"lg",disabled:a||n,onClick:i,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):c.jsxs(be,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",c.jsx(ye,{icon:ph,size:18,className:"ml-1"})]})})]})}function IP(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function UP(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function Fx(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function HP(){const e=oo(),{branding:n}=Ou(),{loading:a,error:o,refresh:l,status:i}=yC(),[d,m]=f.useState(0),[h,p]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,A]=f.useState(!1),R=fs[d];f.useEffect(()=>{i!=null&&i.suggestedRedirectUri&&!h.redirectUri&&p(Q=>({...Q,redirectUri:i.suggestedRedirectUri}))},[i==null?void 0:i.suggestedRedirectUri,h.redirectUri]);const L=f.useMemo(()=>({botToken:h.botToken,secretKey:h.secretKey,clientId:h.clientId,clientSecret:h.clientSecret,redirectUri:h.redirectUri,ownerUserIds:UP(h.ownerUserIds)}),[h]);async function z(){S(!0),E("");try{const Q=await ke.validateSetup(L);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function B(){var de,ce;const Q=Fx(R.id),fe=await z();return!!((ce=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&ce.ok)}async function U(){const Q=Fx(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await B()||m(de=>Math.min(de+1,fs.length-1))}async function q(){C(!0),E("");try{const Q=await z();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await ke.completeSetup(L),A(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Z(){const Q={values:h,setValues:p,validation:y,validating:x};switch(R.id){case"botToken":return c.jsx(OP,{...Q,onValidate:()=>void B()});case"secretKey":return c.jsx(DP,{...Q,onGenerate:()=>p(fe=>({...fe,secretKey:IP()})),onValidate:()=>void B()});case"oauth":return c.jsx(LP,{...Q,onValidate:()=>void B()});case"redirectUri":return c.jsx(zP,{values:h,setValues:p,validation:y});case"owners":return c.jsx(PP,{...Q,onValidate:()=>void B()})}}return a?c.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:c.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[c.jsx(Fe,{className:"h-14 w-64"}),c.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[c.jsx(Fe,{className:"hidden h-80 lg:block"}),c.jsx(Fe,{className:"h-[520px] rounded-2xl"})]})]})}):c.jsxs(AP,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt,hasFavicon:n.hasFavicon,children:[o?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:o})}):null,N?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:N})}):null,k?c.jsx(BP,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):c.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[c.jsx(_P,{currentIndex:d,validation:y}),c.jsx(MP,{step:R,footer:c.jsx($P,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void U(),onFinish:()=>void q()}),children:Z()})]})]})}const VP={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function GP({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return c.jsxs(kt,{to:a,className:ie("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[c.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:c.jsx(ye,{icon:n,size:20})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate font-semibold",children:e}),c.jsx("span",{className:ie("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",VP[l]),children:o})]})]})}function FP({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),h=d-m/100*d;return c.jsxs("div",{className:ie("relative inline-flex",a),children:[c.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:h,className:l})]}),c.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[c.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),c.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const YP={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function WP({title:e,subtitle:n,icon:a,href:o,status:l,meta:i="Open in dashboard"}){const d=YP[l];return c.jsxs(kt,{to:o,className:ie("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsx("span",{className:ie("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),c.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),c.jsxs("div",{children:[c.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),c.jsx("span",{className:ie("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),c.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:a,size:16})}),c.jsx("span",{className:"text-xs text-muted-foreground",children:i})]}),c.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[c.jsx(ye,{icon:gh,size:14,className:"opacity-60"}),c.jsx(ye,{icon:Xa,size:14,className:"opacity-60 group-hover:text-primary"}),c.jsx(ye,{icon:ph,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function qP({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:j0(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return c.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[c.jsxs(ot,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),c.jsxs(qe,{className:"pt-0",children:[c.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>c.jsxs(gs,{className:"size-9 border-2 border-card ring-0",children:[c.jsx(vs,{src:e.bot.avatar,alt:""}),c.jsx(bs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?c.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),c.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),c.jsx(We,{className:"overflow-hidden border-border bg-secondary",children:c.jsx(qe,{className:"p-5",children:c.jsxs("div",{className:"space-y-3",children:[c.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:_4,size:22})}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),c.jsx(be,{asChild:!0,size:"sm",className:"w-full",children:c.jsxs(kt,{to:"/settings",children:[c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),"Open settings"]})})]})})}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[c.jsx(ot,{className:"text-sm font-semibold",children:"System activity"}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),c.jsxs(qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>c.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{className:"bg-secondary text-xs",children:"SB"})]}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),c.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),c.jsx(be,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:c.jsxs(kt,{to:"/system",children:["All system details",c.jsx(ye,{icon:ph,size:14})]})})]})]}),c.jsx(We,{className:"border-border bg-card",children:c.jsxs(qe,{className:"flex items-center gap-3 p-4",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:Xa,size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),c.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const h5={todo:"Needs setup",progress:"In progress",done:"Active"};function eh(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function KP(){return c.jsxs("div",{className:"flex gap-6",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-44 rounded-2xl"}),c.jsx(Fe,{className:"h-44 rounded-2xl"})]}),c.jsx(Fe,{className:"h-8 w-48"}),c.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>c.jsx(Fe,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),c.jsx(Fe,{className:"h-8 w-56"}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>c.jsx(Fe,{className:"h-20 rounded-2xl"},n))})]}),c.jsx(Fe,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function XP(){const{stats:e,loading:n,error:a}=Du(),[o,l]=f.useState("all"),i=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?ls.filter(y=>y.category==="tickets"):o==="all"?ls:ls.filter(y=>y.category===o),[o]);if(n)return c.jsx(KP,{});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"No stats available"})});const m=e.tickets.open,h=e.tickets.closed,p=e.tickets.total;return c.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(We,{className:"overflow-hidden border-border bg-card",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",c.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),c.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),c.jsx(be,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:c.jsx(kt,{to:"/transcripts",children:"Review"})})]}),c.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[c.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),c.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),c.jsx(We,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),c.jsxs("ul",{className:"space-y-1.5 text-sm",children:[c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[p," total"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[h," closed"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),c.jsx(FP,{percent:i,size:120})]})})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),c.jsx(Yj,{value:o,onValueChange:y=>l(y),children:c.jsxs(fg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[c.jsx(Ka,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),c.jsx(Ka,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),c.jsx(Ka,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),G7.filter(y=>y.id!=="all").map(y=>c.jsx(Ka,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),c.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:Mu,href:"/transcripts",status:"todo",meta:"View transcripts"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${h} resolved`,icon:Tu,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=eh(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>c.jsx(WP,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),c.jsx(kt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.slice(0,4).map(y=>{const v=eh(y.id,e.modules);return c.jsx(GP,{title:y.title,icon:y.icon,href:y.href,badge:h5[v.status],status:v.status},y.id)})})]})]}),c.jsx(qP,{stats:e})]})}function ZP(){const{permissions:e}=Ft();return Ln(e,"overview")?c.jsx(XP,{}):c.jsx(Mr,{to:Sh(e),replace:!0})}function as({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ft();return a?c.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Ln(l,e)?c.jsx(c.Fragment,{children:n}):c.jsx(Mr,{to:Sh(l),replace:!0}):c.jsx(Mr,{to:"/login",replace:!0})}const Sg="supportbot-dashboard-accent",$l="#8b5cf6",QP=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function JP(e){const n=lr(e,$l),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,i=Math.max(a,o,l),d=Math.min(a,o,l),m=(i+d)/2;let h=0,p=0;if(i!==d){const y=i-d;switch(p=m>.5?y/(2-i-d):y/(i+d),i){case a:h=((o-l)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function aB({canEdit:e}){const{branding:n,setBrandingLocal:a}=Ou(),o=f.useRef(null),[l,i]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[h,p]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{i(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){p(!0),S("");try{const R=await ke.updateBranding({title:l,pageTitle:d});R.data&&a(R.data),S(R.message||"Branding saved.")}catch(R){S(R instanceof Error?R.message:"Save failed")}finally{p(!1)}}}async function N(R){if(!(!e||!R)){v(!0),S("");try{const L=await rB(R),z=await ke.uploadBrandingFavicon(L);z.data&&a(z.data),S(z.message||"Favicon uploaded.")}catch(L){S(L instanceof Error?L.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const R=await ke.removeBrandingFavicon();R.data&&a(R.data),S(R.message||"Favicon removed.")}catch(R){S(R instanceof Error?R.message:"Remove failed")}finally{v(!1)}}}async function k(){if(e){p(!0),S("");try{const R=await ke.resetBranding();R.data&&a(R.data),S(R.message||"Reset to defaults.")}catch(R){S(R instanceof Error?R.message:"Reset failed")}finally{p(!1)}}}const A=l.trim()!==n.title||d.trim()!==n.pageTitle;return c.jsxs("div",{className:"space-y-4 border-t border-border pt-4",children:[c.jsxs("div",{children:[c.jsx("p",{className:"text-sm font-medium",children:"Branding"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title, browser tab title, and favicon — saved on the server for everyone using this dashboard."})]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-title",children:"Sidebar title"}),c.jsx(rt,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:R=>i(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),c.jsx(rt,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:R=>m(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Favicon"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."}),c.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[c.jsx("div",{className:"flex size-14 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?c.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-1"}):c.jsx(ye,{icon:j4,size:22,className:"text-muted-foreground"})}),c.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:R=>{var L;return void N(((L=R.target.files)==null?void 0:L[0])??null)}}),e?c.jsxs(c.Fragment,{children:[c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>{var R;return(R=o.current)==null?void 0:R.click()},children:y?"Uploading…":"Upload favicon"}),n.hasFavicon?c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"})]})]}),e?c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",size:"sm",disabled:h||!A,onClick:()=>void C(),children:h?"Saving…":"Save titles"}),c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:h||y,onClick:()=>void k(),children:"Reset branding"})]}):null,x?c.jsx("p",{className:"text-xs text-muted-foreground",children:x}):null]})}function oB(){const{hasPermission:e}=Ft(),n=e("settings.update"),[a,o]=f.useState(null),[l,i]=f.useState(!0),[d,m]=f.useState(!1),[h,p]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>v5()??$l),[j,C]=f.useState(""),N=f.useCallback(async()=>{i(!0),p("");try{const k=await ke.checkForUpdates();k.data&&o(k.data)}catch(k){p(k instanceof Error?k.message:"Could not check for updates")}finally{i(!1)}},[]);f.useEffect(()=>{N()},[N]);async function E(){if(a!=null&&a.updateAvailable){m(!0),p(""),v("");try{const k=await ke.runUpdate(a.latest);v(k.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(k){p(k instanceof Error?k.message:"Update failed")}finally{m(!1)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),c.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard appearance"}),c.jsx(Nt,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsx(aB,{canEdit:n}),c.jsxs("div",{className:"border-t border-border pt-4",children:[c.jsx("p",{className:"mb-3 text-sm font-medium",children:"Accent colour"}),c.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),c.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"accent-colour",children:"Accent colour"}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx(cg,{value:x,onChange:k=>{S(k),Yx(k),C("Accent updated.")}}),c.jsx(rt,{id:"accent-colour",value:x,onChange:k=>S(k.target.value),onBlur:()=>{const k=lr(x,$l);S(k),Yx(k),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]})]}),c.jsx(be,{type:"button",variant:"outline",onClick:()=>{tB(),S($l),C("Reset to default purple.")},children:"Reset to default"})]}),c.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[c.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),c.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),c.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?c.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Software updates"}),c.jsxs(Nt,{children:["Checks"," ",c.jsx("a",{href:"https://github.com/C-h-a-r/SupportBot-Dashboard",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"SupportBot-Dashboard"})," ","on the release branch."]})]}),c.jsxs(qe,{className:"space-y-4",children:[l?c.jsx(Fe,{className:"h-24 w-full"}):a?c.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[c.jsxs("div",{className:"flex flex-wrap gap-x-6 gap-y-2 text-sm",children:[c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.current]})]}),c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.latest]})]})]}),a.updateAvailable?c.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads bot files while keeping your Configs and Data."}):c.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."})]}):null,h?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:h})}):null,y?c.jsx(Ue,{children:c.jsx(He,{children:y})}):null,c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsxs(be,{type:"button",variant:"outline",onClick:N,disabled:l||d,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),"Check again"]}),a!=null&&a.updateAvailable&&n?c.jsxs(be,{type:"button",onClick:E,disabled:d,children:[d?c.jsx(ye,{icon:w0,size:16,className:"mr-2 animate-spin"}):c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,a!=null&&a.updateAvailable&&!n?c.jsx("p",{className:"text-xs text-muted-foreground",children:"You can check for updates but cannot install them with your role."}):null]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return c.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),c.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const sB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function lB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function iB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Du(),[l,i]=f.useState(null),[d,m]=f.useState(null),[h,p]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([ke.getGuildStatus().catch(()=>null),ke.health().catch(()=>null)]);j!=null&&j.data&&i(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){p(!0);try{await Promise.all([o(),y()])}finally{p(!1)}}if(n&&!e)return c.jsxs("div",{className:"space-y-6",children:[c.jsx(Fe,{className:"h-10 w-64"}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-56 rounded-2xl"}),c.jsx(Fe,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(be,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:c.jsxs(kt,{to:"/",children:[c.jsx(ye,{icon:b0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),c.jsxs(be,{type:"button",variant:"outline",disabled:h,onClick:()=>void v(),children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),h?"Refreshing…":"Refresh now"]})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Discord bot"}),c.jsx(Nt,{children:"Connection and identity"})]}),c.jsxs(qe,{children:[c.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[c.jsxs(gs,{className:"size-12",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{children:"SB"})]}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:e.bot.username}),c.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),c.jsxs("dl",{children:[c.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),c.jsx(pt,{label:"Gateway latency",value:c.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),c.jsx(pt,{label:"Process uptime",value:j0(e.bot.uptime)}),c.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),c.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?c.jsx(pt,{label:"Invite link",value:c.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Host machine"}),c.jsx(Nt,{children:"Server resources running this instance"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),c.jsx(pt,{label:"Memory usage",value:c.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),c.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),c.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Tickets"}),c.jsx(Nt,{children:"Database snapshot"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Total tickets",value:e.tickets.total}),c.jsx(pt,{label:"Open",value:c.jsx("span",{className:"text-primary",children:e.tickets.open})}),c.jsx(pt,{label:"Closed",value:e.tickets.closed}),c.jsx(pt,{label:"Transcripts",value:c.jsx(kt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Guild health"}),c.jsx(Nt,{children:"Configured server and membership"})]}),c.jsx(qe,{children:l?c.jsxs("dl",{children:[c.jsx(pt,{label:"Status",value:c.jsx("span",{className:lB(l.status),children:sB[l.status]})}),c.jsx(pt,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?c.jsx(pt,{label:"Configured server",value:`${l.configuredGuild.name} (${((S=l.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,l.message?c.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?c.jsxs("div",{className:"mt-3 space-y-2",children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),c.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(j=>c.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):c.jsx(Fe,{className:"h-24 w-full"})})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard services"}),c.jsx(Nt,{children:"API and authentication"})]}),c.jsx(qe,{children:d?c.jsxs("dl",{className:"max-w-xl",children:[c.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),c.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),c.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),c.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),c.jsx(pt,{label:"Software updates",value:c.jsx(kt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),c.jsx(pt,{label:"Logs",value:c.jsx(kt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):c.jsx(Fe,{className:"h-32 w-full max-w-xl"})})]}),e.modules?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Module setup status"}),c.jsx(Nt,{children:"Which features are configured and active"})]}),c.jsx(qe,{children:c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.map(j=>{const C=eh(j.id,e.modules);return c.jsxs(kt,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx("p",{className:"text-sm font-medium",children:j.title}),c.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),c.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:h5[C.status]})]},j.id)})})})]}):null]})}function cB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const uB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],dB=["Output","Warn","Error"],fB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},mB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},Wx=2e3,pB=2e3;function th(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function hB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,h)=>th(m,h))),i=[];for(let m=0;mWx?d.slice(d.length-Wx):d}function gB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,i]=f.useState(""),[d,m]=f.useState(!1),[h,p]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),A=f.useRef(null),R=f.useRef(d);R.current=d;const L=f.useMemo(()=>y==="all"?dB:[y],[y]),z=f.useCallback(async q=>{var fe,de;const Z=await ke.getLogs({types:L,cursor:q?void 0:k.current??void 0,tail:q?500:0}),Q=((fe=Z.data)==null?void 0:fe.entries)??[];return k.current=((de=Z.data)==null?void 0:de.cursor)??{},n(ce=>hB(ce,Q,q)),Q.length},[L]),B=f.useCallback(async()=>{var q;o(!0),i(""),k.current=null;try{const fe=(((q=(await ke.getLogsMeta()).data)==null?void 0:q.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await z(!0),C(!0)}catch(Z){i(Z instanceof Error?Z.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const q=window.setInterval(async()=>{if(!R.current)try{await z(!1),C(!0),i("")}catch(Z){C(!1),i(Z instanceof Error?Z.message:"Live update failed")}},pB);return()=>window.clearInterval(q)},[d,a,z]),f.useEffect(()=>{if(!h||d)return;const q=A.current;q&&(q.scrollTop=q.scrollHeight)},[e,h,d]);const U=f.useMemo(()=>e.filter(q=>{var Q;if(y!=="all"&&q.type!==y)return!1;if(!x.trim())return!0;const Z=x.toLowerCase();return q.message.toLowerCase().includes(Z)||(((Q=q.timestamp)==null?void 0:Q.toLowerCase().includes(Z))??!1)}),[e,y,x]);return c.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{className:ie("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),c.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:l})}):null,c.jsxs(We,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[c.jsxs(at,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Console",a?null:c.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[U.length," line",U.length===1?"":"s"]})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[c.jsx(Dn,{id:"auto-scroll",checked:h,onCheckedChange:p}),c.jsx(Ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>m(q=>!q),children:[c.jsx(ye,{icon:d?A4:R4,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[c.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:uB.map(q=>c.jsx(be,{type:"button",variant:y===q.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(q.id),children:q.label},q.id))}),c.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[c.jsx(ye,{icon:_u,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Filter lines…",value:x,onChange:q=>S(q.target.value),className:"h-9 pl-9"})]})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0",children:a?c.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((q,Z)=>c.jsx(Fe,{className:"h-4 w-full"},Z))}):c.jsx("div",{ref:A,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:U.length===0?c.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):c.jsx("ul",{className:"space-y-1",children:U.map((q,Z)=>c.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[c.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:cB(q.timestamp)}),c.jsx("span",{className:ie("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",mB[q.type]),children:q.type}),c.jsx("span",{className:ie("min-w-0 flex-1 whitespace-pre-wrap break-words",fB[q.type]),children:q.message||" "})]},th(q,Z)))})})})]})]})}const vB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],bB=450;function yB(e,n){return n&&e!=="viewer"}function xB(){const{user:e,hasPermission:n}=Ft(),a=!yB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),A=f.useRef(null),R=f.useCallback(async()=>{var q;h(!0),x(""),j("");try{const Q=(await ke.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:Mj((q=Q.Typography)==null?void 0:q.FontFamily)}};l(fe),d(structuredClone(fe))}}catch(Z){x(Z instanceof Error?Z.message:"Failed to load template")}finally{h(!1)}},[]);f.useEffect(()=>{R()},[R]);const L=f.useCallback(async q=>{k(!0);try{const Z=await ke.previewTranscriptTemplate(q);N(Z)}catch{N("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return A.current&&clearTimeout(A.current),A.current=setTimeout(()=>{L(o)},bB),()=>{A.current&&clearTimeout(A.current)}},[o,L]);function z(q,Z){l(Q=>Q&&Xl(Q,q,Z))}async function B(){if(!(a||!o)){y(!0),x(""),j("");try{const q=await ke.saveTranscriptTemplate(o);j(q.message||"Saved."),d(structuredClone(o))}catch(q){x(q instanceof Error?q.message:"Save failed")}finally{y(!1)}}}const U=o&&i&&JSON.stringify(o)!==JSON.stringify(i);return m?c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-96 rounded-xl"}),c.jsx(Fe,{className:"h-96 rounded-xl"})]}):o?c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),c.jsxs("div",{className:"flex items-center gap-2",children:[U?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:B,disabled:p||!U,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save appearance"]})]})]}),v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[c.jsx(SB,{data:o,readOnly:a,onPatch:z}),c.jsxs(We,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsx(ot,{className:"text-base",children:"Live preview"}),c.jsxs(Nt,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-4 pt-0",children:c.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ie("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load template"})})}function SB({data:e,readOnly:n,onPatch:a}){return c.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:vB.map(o=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:o.title}),o.description?c.jsx(Nt,{children:o.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>c.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:c.jsx(yg,{field:l,value:ao(e,l.path),readOnly:n,onChange:i=>a(l.path,i)})},l.path))})]},o.title))})}function wB(e,n){return n&&e!=="viewer"}function CB(){const{user:e,hasPermission:n}=Ft(),a=!wB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(!0),[m,h]=f.useState(!1),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,A,R;d(!0),x(""),j("");try{const z=(await ke.getTranscriptSettings()).data;z&&l({autoDelete:{enabled:!!((k=z.autoDelete)!=null&&k.enabled),afterDays:((A=z.autoDelete)==null?void 0:A.afterDays)??30},publicAccess:{enabled:!!((R=z.publicAccess)!=null&&R.enabled)}})}catch(L){x(L instanceof Error?L.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){h(!0),x(""),j("");try{const k=await ke.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{h(!1)}}}async function E(){var k,A;if(!a){y(!0),x(""),j("");try{const R=await ke.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((A=R.data)==null?void 0:A.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return i?c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-40 w-full rounded-xl"}),c.jsx(Fe,{className:"h-40 w-full rounded-xl"})]}):o?c.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?c.jsx(Ue,{children:c.jsx(He,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{children:c.jsx(He,{children:S})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Auto-delete"}),c.jsx(Nt,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),c.jsx(rt,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",disabled:a||p,onClick:()=>void E(),children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Run cleanup now"]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Public transcripts"}),c.jsxs(Nt,{children:["When enabled, anyone with the link can view a transcript at"," ",c.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),c.jsx(qe,{children:c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,publicAccess:{enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:c.jsxs(be,{type:"button",disabled:m,onClick:()=>void N(),children:[c.jsx(ye,{icon:Au,size:16}),m?"Saving…":"Save settings"]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:"Could not load transcript settings."})})}function jB(e,n){return n&&e!=="viewer"}function qx(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Kx(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function EB(){var H;const{user:e,hasPermission:n}=Ft(),a=jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[i,d]=f.useState([]),[m,h]=f.useState(null),[p,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[A,R]=f.useState(!1),[L,z]=f.useState(!1),[B,U]=f.useState(!1),[q,Z]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const V=(await ke.listTranscripts()).data??[];d(V),h(ne=>{var J;return ne&&V.some(me=>me.id===ne)?ne:((J=V[0])==null?void 0:J.id)??null})}catch(I){j(I instanceof Error?I.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&ke.getTranscriptSettings().then(I=>{var V,ne;U(!!((ne=(V=I.data)==null?void 0:V.publicAccess)!=null&&ne.enabled))}).catch(()=>U(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return i;const I=C.toLowerCase();return i.filter(V=>V.id.includes(I)||V.filename.toLowerCase().includes(I)||V.ticketName&&V.ticketName.toLowerCase().includes(I))},[i,C]),de=f.useMemo(()=>i.find(I=>I.id===m)??null,[i,m]),ce=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,he=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,M=m&&B?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function K(I){x(""),h(I),k(V=>V+1)}function re(){ce&&window.open(ce,"_blank","noopener,noreferrer")}function oe(){M&&window.open(M,"_blank","noopener,noreferrer")}async function ee(){if(M)try{await navigator.clipboard.writeText(M),Z(!0),window.setTimeout(()=>Z(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function _(){var V;if(!m||!a)return;const I=((V=de==null?void 0:de.ticketName)==null?void 0:V.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${I}? This cannot be undone.`)){z(!0),x("");try{await ke.deleteTranscript(m),await Q()}catch(ne){x(ne instanceof Error?ne.message:"Failed to delete transcript")}finally{z(!1)}}}async function O(){if(!(!he||!de)){R(!0),x("");try{const I=await fetch(he,{credentials:"include"});if(!I.ok){const me=await I.json().catch(()=>({}));throw new Error(me.error||`Download failed (${I.status})`)}const V=await I.blob(),ne=URL.createObjectURL(V),J=document.createElement("a");J.href=ne,J.download=de.filename,J.click(),URL.revokeObjectURL(ne)}catch(I){x(I instanceof Error?I.message:"Failed to download transcript")}finally{R(!1)}}}return c.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),c.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),c.jsx(be,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),c.jsx(be,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:p,children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?c.jsx(xB,{}):o==="settings"?c.jsx(CB,{}):c.jsxs(c.Fragment,{children:[S?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[c.jsxs(We,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[c.jsxs(at,{className:"space-y-3 pb-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Saved transcripts",!p&&i.length>0?c.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",i.length,")"]}):null]}),c.jsxs("div",{className:"relative",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:I=>N(I.target.value),className:"pl-9"})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0 pb-4",children:c.jsx(hi,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:p?c.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((I,V)=>c.jsx(Fe,{className:"h-16 w-full rounded-lg"},V))}):fe.length===0?c.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:32,className:"opacity-40"}),c.jsx("p",{children:i.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):c.jsx("ul",{className:"space-y-1.5",children:fe.map(I=>{var J;const V=I.id===m,ne=((J=I.ticketName)==null?void 0:J.trim())||`Channel ${I.id}`;return c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>K(I.id),className:ie("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",V?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[c.jsx("p",{className:"truncate text-sm font-medium",children:ne}),c.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[Kx(I.createdAt),I.size!=null?` · ${qx(I.size)}`:""]})]})},I.id)})})})})]}),c.jsxs(We,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx(ot,{className:"truncate text-base font-medium",children:de?((H=de.ticketName)==null?void 0:H.trim())||`Channel ${de.id}`:"Preview"}),de?c.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[Kx(de.createdAt),de.size!=null?` · ${qx(de.size)}`:""]}):null]}),c.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[M?c.jsxs(c.Fragment,{children:[c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>void ee(),children:[c.jsx(ye,{icon:x0,size:16}),q?"Copied":"Copy link"]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:oe,children:[c.jsx(ye,{icon:gh,size:16}),"Public page"]})]}):null,c.jsxs(be,{variant:"outline",size:"sm",disabled:!ce,onClick:re,children:[c.jsx(ye,{icon:S4,size:16}),"Open tab"]}),c.jsxs(be,{variant:"outline",size:"sm",disabled:!he||A,onClick:()=>void O(),children:[c.jsx(ye,{icon:Ru,size:16}),A?"Saving…":"Download"]}),a?c.jsxs(be,{variant:"outline",size:"sm",disabled:!m||L,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[c.jsx(ye,{icon:hh,size:16}),L?"Deleting…":"Delete"]}):null]})]}),c.jsxs(qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,de&&ce?c.jsx("iframe",{title:`Transcript ${de.id}`,src:ce,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):c.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:40,className:"opacity-30"}),c.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}const NB=["admin","moderator","editor","viewer","custom"];function kB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Hl("viewer"),yamlOwner:!1}}function TB({permissions:e,onChange:n,disabled:a}){const o=l=>n({...e,...l});return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([l,i])=>c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:l}),c.jsx(Dn,{checked:e[i],disabled:a,onCheckedChange:d=>o({[i]:d})})]},i)),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — view"}),c.jsx(Dn,{checked:e.settings.view,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — install updates"}),c.jsx(Dn,{checked:e.settings.update,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,update:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — view"}),c.jsx(Dn,{checked:e.users.view,disabled:a,onCheckedChange:l=>o({users:{...e.users,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — manage"}),c.jsx(Dn,{checked:e.users.manage,disabled:a,onCheckedChange:l=>o({users:{...e.users,manage:l}})})]})]}),c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),c.jsx("div",{className:"space-y-2",children:xh.map(l=>c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:z4[l]}),c.jsxs("div",{className:"flex items-center gap-4",children:[c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",c.jsx(Dn,{checked:e.configs[l].view,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],view:i}}})})]}),c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",c.jsx(Dn,{checked:e.configs[l].edit,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],edit:i,view:i?!0:e.configs[l].view}}})})]})]})]},l))})]})]})}function RB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function AB(){const{user:e,hasPermission:n}=Ft(),a=n("users.manage"),[o,l]=f.useState([]),[i,d]=f.useState(!0),[m,h]=f.useState(""),[p,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),h("");try{const R=await ke.listDashboardUsers();R.data&&l(R.data.users)}catch(R){h(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function C(){y(kB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Hl(R.role),yamlOwner:R.yamlOwner})}function E(R){p&&y({...p,role:R,permissions:Hl(R,p.permissions)})}async function k(){if(!(!p||!a)){x(!0),h("");try{p.mode==="add"?await ke.addDashboardUser({id:p.id.trim(),role:p.role,username:p.username||void 0,globalName:p.globalName||void 0,enabled:p.enabled,permissions:p.role==="custom"?p.permissions:void 0}):await ke.updateDashboardUser(p.id,{role:p.yamlOwner?void 0:p.role,enabled:p.enabled,username:p.username||void 0,globalName:p.globalName||void 0,permissions:p.role==="custom"?p.permissions:void 0}),y(null),await S()}catch(R){h(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function A(R){if(a&&window.confirm("Remove this user from the dashboard?")){h("");try{await ke.removeDashboardUser(R),await S()}catch(L){h(L instanceof Error?L.message:"Could not remove user")}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),c.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",c.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?c.jsxs(be,{onClick:C,children:[c.jsx(ye,{icon:x4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:m})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Dashboard access"}),c.jsxs(Nt,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),c.jsx(qe,{children:i?c.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):c.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>c.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[c.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:R.avatar,alt:R.username}),c.jsx(bs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),c.jsxs("div",{className:"min-w-0",children:[c.jsxs("p",{className:"truncate font-medium",children:[E0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),c.jsx(Ll,{variant:"secondary",children:M1[R.yamlOwner?"owner":R.role]}),c.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:RB(R)}),R.enabled?c.jsx(Ll,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):c.jsx(Ll,{variant:"outline",children:"Disabled"}),a?c.jsxs("div",{className:"ml-auto flex gap-1",children:[c.jsx(be,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:c.jsx(ye,{icon:C4,size:16})}),R.yamlOwner?null:c.jsx(be,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>A(R.id),"aria-label":"Remove user",children:c.jsx(ye,{icon:hh,size:16})})]}):null]},R.id))})})]}),c.jsx($w,{open:!!p,onOpenChange:R=>!R&&y(null),children:c.jsxs(Zh,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[c.jsxs(Qh,{children:[c.jsx(Jh,{children:(p==null?void 0:p.mode)==="add"?"Add dashboard user":"Edit user"}),c.jsx(eg,{children:p!=null&&p.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":L4[(p==null?void 0:p.role)??"viewer"]})]}),p?c.jsxs("div",{className:"space-y-4",children:[p.mode==="add"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"discord-id",children:"Discord user ID"}),c.jsx(rt,{id:"discord-id",value:p.id,onChange:R=>y({...p,id:R.target.value}),placeholder:"829112572816130058"})]}):null,c.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Display name (optional)"}),c.jsx(rt,{value:p.globalName,onChange:R=>y({...p,globalName:R.target.value})})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Username (optional)"}),c.jsx(rt,{value:p.username,onChange:R=>y({...p,username:R.target.value})})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Role"}),c.jsxs(ud,{value:p.role,disabled:p.yamlOwner,onValueChange:R=>E(R),children:[c.jsx(gi,{children:c.jsx(dd,{})}),c.jsx(vi,{children:p.yamlOwner?c.jsx(no,{value:"owner",children:"Owner"}):NB.map(R=>c.jsx(no,{value:R,children:M1[R]},R))})]})]}),c.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Account enabled"}),c.jsx(Dn,{checked:p.enabled,disabled:p.yamlOwner,onCheckedChange:R=>y({...p,enabled:R})})]}),p.role==="custom"&&!p.yamlOwner?c.jsx(TB,{permissions:p.permissions,onChange:R=>y({...p,permissions:R})}):null]}):null,c.jsxs(Uw,{children:[c.jsx(be,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),c.jsx(be,{disabled:v||!a||(p==null?void 0:p.mode)==="add"&&!/^\d{17,20}$/.test(p.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function _B(){const{hasPermission:e}=Ft(),n=e("settings.update"),a=oo(),[o,l]=f.useState([]),[i,d]=f.useState(""),[m,h]=f.useState(!0),[p,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{h(!0),y("");try{const E=await ke.getAddonsCatalog();E.data&&(l(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{h(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await ke.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const A=E.configFiles[0];A&&a(`/configs?file=${is(A)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),c.jsxs("p",{className:"text-muted-foreground",children:["Install community addons from"," ",c.jsx("a",{href:i||"https://github.com/Emerald-Services/Addons",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Emerald-Services/Addons"}),". Enable addons under"," ",c.jsx(kt,{to:"/configs?file=supportbot",className:"text-primary underline-offset-4 hover:underline",children:"Bot config → General → Addons"}),". Installed addon configs appear in the left sidebar under"," ",c.jsx("strong",{className:"font-medium text-foreground",children:"Addons"}),"."]})]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[c.jsx(ye,{icon:w0,size:16,className:ie("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),p?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:p})}):null,v?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:v})}):null,c.jsxs("section",{className:"space-y-4",children:[c.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"})]}):c.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsxs(ot,{className:"flex items-center gap-2 text-lg",children:[c.jsx(ye,{icon:bh,size:20,className:"text-primary"}),E.name]}),E.installed?c.jsxs(Ll,{variant:"secondary",className:"shrink-0 gap-1",children:[c.jsx(ye,{icon:O4,size:14}),"Installed"]}):null]}),c.jsx(Nt,{children:E.description})]}),c.jsxs(qe,{className:"space-y-2 text-xs text-muted-foreground",children:[c.jsxs("p",{children:[E.jsFiles.length," command file",E.jsFiles.length===1?"":"s",":"," ",c.jsx("span",{className:"font-mono",children:E.jsFiles.join(", ")})]}),E.configFiles.length>0?c.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,A)=>c.jsxs("span",{children:[A>0?", ":null,c.jsx(kt,{to:`/configs?file=${is(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),c.jsxs(p5,{className:"flex flex-wrap gap-2",children:[c.jsx(be,{variant:"outline",size:"sm",asChild:!0,children:c.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View on GitHub"})}),E.installed&&E.configFiles[0]?c.jsx(be,{size:"sm",variant:"secondary",asChild:!0,children:c.jsx(kt,{to:`/configs?file=${is(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?c.jsx(be,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):c.jsxs(be,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[c.jsx(ye,{icon:Ru,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function MB({children:e}){const{isAuthenticated:n,loading:a}=Ft();return a?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?c.jsx(c.Fragment,{children:e}):c.jsx(Mr,{to:"/login",replace:!0})}function OB(){const{complete:e,loading:n}=yC(),a=Sn();return n?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?c.jsx(Mr,{to:"/login",replace:!0}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/login",element:c.jsx(TP,{})}),c.jsxs(ln,{element:c.jsx(MB,{children:c.jsx(XM,{})}),children:[c.jsx(ln,{index:!0,element:c.jsx(ZP,{})}),c.jsx(ln,{path:"system",element:c.jsx(as,{permission:"overview",children:c.jsx(iB,{})})}),c.jsx(ln,{path:"settings",element:c.jsx(as,{permission:"settings.view",children:c.jsx(oB,{})})}),c.jsx(ln,{path:"configs",element:c.jsx(EP,{})}),c.jsx(ln,{path:"logs",element:c.jsx(as,{permission:"logs",children:c.jsx(gB,{})})}),c.jsx(ln,{path:"transcripts",element:c.jsx(as,{permission:"transcripts",children:c.jsx(EB,{})})}),c.jsx(ln,{path:"users",element:c.jsx(as,{permission:"users.view",children:c.jsx(AB,{})})}),c.jsx(ln,{path:"addons",element:c.jsx(as,{permission:"settings.view",children:c.jsx(_B,{})})})]}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/",replace:!0})})]}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/setup",element:c.jsx(HP,{})}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/setup",replace:!0})})]})}function DB({...e}){return c.jsx(mP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}nB();IN.createRoot(document.getElementById("root")).render(c.jsx(f.StrictMode,{children:c.jsx(d4,{children:c.jsx(xw,{children:c.jsx(U4,{children:c.jsx(ZM,{children:c.jsxs(I4,{children:[c.jsx(OB,{}),c.jsx(DB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-DOri9ZTI.css b/public/dashboard/assets/index-DOri9ZTI.css new file mode 100644 index 0000000..66b8ed4 --- /dev/null +++ b/public/dashboard/assets/index-DOri9ZTI.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 263 70% 58%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 263 45% 18%;--accent-foreground: 263 80% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 263 70% 58%;--radius: .75rem;--chart-1: 263 70% 58%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 263 70% 58%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 263 40% 14%;--sidebar-accent-foreground: 263 75% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 263 70% 58%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/70{background-color:#ffffffb3}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-DUq0PrN_.css b/public/dashboard/assets/index-DUq0PrN_.css deleted file mode 100644 index c747189..0000000 --- a/public/dashboard/assets/index-DUq0PrN_.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 8% 8%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 263 70% 58%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 263 45% 18%;--accent-foreground: 263 80% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 16%;--input: 240 6% 14%;--ring: 263 70% 58%;--radius: .75rem;--chart-1: 263 70% 58%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 263 70% 58%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 263 40% 14%;--sidebar-accent-foreground: 263 75% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 263 70% 58%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-right-4{right:-1rem}.-right-8{right:-2rem}.-top-0\.5{top:-.125rem}.-top-4{top:-1rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-12{right:3rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-14{width:3.5rem;height:3.5rem}.size-2{width:.5rem;height:.5rem}.size-24{width:6rem;height:6rem}.size-28{width:7rem;height:7rem}.size-32{width:8rem;height:8rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-48{width:12rem;height:12rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-black\/20{background-color:#0003}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/40{background-color:hsl(var(--card) / .4)}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/30{background-color:hsl(var(--primary) / .3)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/10{background-color:#ffffff1a}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from: hsl(var(--primary) / .2) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/25{--tw-gradient-from: hsl(var(--primary) / .25) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/30{--tw-gradient-from: hsl(var(--primary) / .3) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/40{--tw-gradient-from: hsl(var(--primary) / .4) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-primary\/10{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-primary\/90{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .9) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-card{--tw-gradient-to: hsl(var(--card)) var(--tw-gradient-to-position)}.to-primary\/5{--tw-gradient-to: hsl(var(--primary) / .05) var(--tw-gradient-to-position)}.to-primary\/75{--tw-gradient-to: hsl(var(--primary) / .75) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/10{--tw-shadow-color: hsl(var(--primary) / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/25{--tw-shadow-color: hsl(var(--primary) / .25);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-2{--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)}.ring-primary\/20{--tw-ring-color: hsl(var(--primary) / .2)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.blur-2xl{--tw-blur: blur(40px);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)}.blur-3xl{--tw-blur: blur(64px);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)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));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)}.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-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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.dashboard-glow{background:radial-gradient(ellipse 70% 45% at 0% 0%,hsl(var(--primary) / .18),transparent 55%),radial-gradient(ellipse 50% 35% at 100% 0%,hsl(var(--primary) / .08),transparent 50%),hsl(var(--background))}.promo-gradient{background:linear-gradient(105deg,hsl(var(--accent) / .95),hsl(var(--sidebar-accent) / .9) 45%,hsl(var(--background)))}.overview-card-glow{box-shadow:0 0 0 1px hsl(var(--primary) / .08),0 12px 40px -12px hsl(var(--primary) / .25)}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary\/25:hover{border-color:hsl(var(--primary) / .25)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-card:hover{background-color:hsl(var(--card))}.hover\:bg-card\/90:hover{background-color:hsl(var(--card) / .9)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.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-md:hover{--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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-primary\/5:hover{--tw-shadow-color: hsl(var(--primary) / .05);--tw-shadow: var(--tw-shadow-colored)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-WkaLPu9d.js b/public/dashboard/assets/index-WkaLPu9d.js deleted file mode 100644 index 1123e53..0000000 --- a/public/dashboard/assets/index-WkaLPu9d.js +++ /dev/null @@ -1,187 +0,0 @@ -function XE(t,r){for(var a=0;ao[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&o(f)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function zb(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var tm={exports:{}},us={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var p1;function KE(){if(p1)return us;p1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(o,s,c){var f=null;if(c!==void 0&&(f=""+c),s.key!==void 0&&(f=""+s.key),"key"in s){c={};for(var m in s)m!=="key"&&(c[m]=s[m])}else c=s;return s=c.ref,{$$typeof:t,type:o,key:f,ref:s!==void 0?s:null,props:c}}return us.Fragment=r,us.jsx=a,us.jsxs=a,us}var h1;function ZE(){return h1||(h1=1,tm.exports=KE()),tm.exports}var u=ZE(),nm={exports:{}},je={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var g1;function QE(){if(g1)return je;g1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function C(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,j={};function N(M,D,H){this.props=M,this.context=D,this.refs=j,this.updater=H||E}N.prototype.isReactComponent={},N.prototype.setState=function(M,D){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,D,"setState")},N.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function A(){}A.prototype=N.prototype;function k(M,D,H){this.props=M,this.context=D,this.refs=j,this.updater=H||E}var T=k.prototype=new A;T.constructor=k,w(T,N.prototype),T.isPureReactComponent=!0;var z=Array.isArray;function P(){}var B={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function W(M,D,H){var U=H.ref;return{$$typeof:t,type:M,key:D,ref:U!==void 0?U:null,props:H}}function oe(M,D){return W(M.type,D,M.props)}function ie(M){return typeof M=="object"&&M!==null&&M.$$typeof===t}function me(M){var D={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(H){return D[H]})}var de=/\/+/g;function se(M,D){return typeof M=="object"&&M!==null&&M.key!=null?me(""+M.key):D.toString(36)}function fe(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(P,P):(M.status="pending",M.then(function(D){M.status==="pending"&&(M.status="fulfilled",M.value=D)},function(D){M.status==="pending"&&(M.status="rejected",M.reason=D)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function _(M,D,H,U,I){var J=typeof M;(J==="undefined"||J==="boolean")&&(M=null);var K=!1;if(M===null)K=!0;else switch(J){case"bigint":case"string":case"number":K=!0;break;case"object":switch(M.$$typeof){case t:case r:K=!0;break;case b:return K=M._init,_(K(M._payload),D,H,U,I)}}if(K)return I=I(M),K=U===""?"."+se(M,0):U,z(I)?(H="",K!=null&&(H=K.replace(de,"$&/")+"/"),_(I,D,H,"",function(we){return we})):I!=null&&(ie(I)&&(I=oe(I,H+(I.key==null||M&&M.key===I.key?"":(""+I.key).replace(de,"$&/")+"/")+K)),D.push(I)),1;K=0;var ce=U===""?".":U+":";if(z(M))for(var ue=0;ue>>1,Q=_[ne];if(0>>1;nes(H,ee))Us(I,H)?(_[ne]=I,_[U]=ee,ne=U):(_[ne]=H,_[D]=ee,ne=D);else if(Us(I,ee))_[ne]=I,_[U]=ee,ne=U;else break e}}return q}function s(_,q){var ee=_.sortIndex-q.sortIndex;return ee!==0?ee:_.id-q.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var f=Date,m=f.now();t.unstable_now=function(){return f.now()-m}}var g=[],h=[],b=1,v=null,x=3,C=!1,E=!1,w=!1,j=!1,N=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function T(_){for(var q=a(h);q!==null;){if(q.callback===null)o(h);else if(q.startTime<=_)o(h),q.sortIndex=q.expirationTime,r(g,q);else break;q=a(h)}}function z(_){if(w=!1,T(_),!E)if(a(g)!==null)E=!0,P||(P=!0,me());else{var q=a(h);q!==null&&fe(z,q.startTime-_)}}var P=!1,B=-1,V=5,W=-1;function oe(){return j?!0:!(t.unstable_now()-W_&&oe());){var ne=v.callback;if(typeof ne=="function"){v.callback=null,x=v.priorityLevel;var Q=ne(v.expirationTime<=_);if(_=t.unstable_now(),typeof Q=="function"){v.callback=Q,T(_),q=!0;break t}v===a(g)&&o(g),T(_)}else o(g);v=a(g)}if(v!==null)q=!0;else{var M=a(h);M!==null&&fe(z,M.startTime-_),q=!1}}break e}finally{v=null,x=ee,C=!1}q=void 0}}finally{q?me():P=!1}}}var me;if(typeof k=="function")me=function(){k(ie)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,se=de.port2;de.port1.onmessage=ie,me=function(){se.postMessage(null)}}else me=function(){N(ie,0)};function fe(_,q){B=N(function(){_(t.unstable_now())},q)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(_){_.callback=null},t.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):V=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return x},t.unstable_next=function(_){switch(x){case 1:case 2:case 3:var q=3;break;default:q=x}var ee=x;x=q;try{return _()}finally{x=ee}},t.unstable_requestPaint=function(){j=!0},t.unstable_runWithPriority=function(_,q){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var ee=x;x=_;try{return q()}finally{x=ee}},t.unstable_scheduleCallback=function(_,q,ee){var ne=t.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0ne?(_.sortIndex=ee,r(h,_),a(g)===null&&_===a(h)&&(w?(A(B),B=-1):w=!0,fe(z,ee-ne))):(_.sortIndex=Q,r(g,_),E||C||(E=!0,P||(P=!0,me()))),_},t.unstable_shouldYield=oe,t.unstable_wrapCallback=function(_){var q=x;return function(){var ee=x;x=q;try{return _.apply(this,arguments)}finally{x=ee}}}})(om)),om}var b1;function e3(){return b1||(b1=1,am.exports=JE()),am.exports}var lm={exports:{}},Bt={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var x1;function t3(){if(x1)return Bt;x1=1;var t=Jc();function r(g){var h="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),lm.exports=t3(),lm.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var C1;function n3(){if(C1)return ds;C1=1;var t=e3(),r=Jc(),a=Pb();function o(e){var n="https://react.dev/errors/"+e;if(1Q||(e.current=ne[Q],ne[Q]=null,Q--)}function H(e,n){Q++,ne[Q]=e.current,e.current=n}var U=M(null),I=M(null),J=M(null),K=M(null);function ce(e,n){switch(H(J,n),H(I,e),H(U,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?Py(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)n=Py(n),e=By(n,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(U),H(U,e)}function ue(){D(U),D(I),D(J)}function we(e){e.memoizedState!==null&&H(K,e);var n=U.current,l=By(n,e.type);n!==l&&(H(I,e),H(U,l))}function Re(e){I.current===e&&(D(U),D(I)),K.current===e&&(D(K),ls._currentValue=ee)}var Ne,st;function We(e){if(Ne===void 0)try{throw Error()}catch(l){var n=l.stack.trim().match(/\n( *(at )?)/);Ne=n&&n[1]||"",st=-1)":-1p||O[i]!==Y[p]){var Z=` -`+O[i].replace(" at new "," at ");return e.displayName&&Z.includes("")&&(Z=Z.replace("",e.displayName)),Z}while(1<=i&&0<=p);break}}}finally{zn=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?We(l):""}function rn(e,n){switch(e.tag){case 26:case 27:case 5:return We(e.type);case 16:return We("Lazy");case 13:return e.child!==n&&n!==null?We("Suspense Fallback"):We("Suspense");case 19:return We("SuspenseList");case 0:case 15:return bn(e.type,!1);case 11:return bn(e.type.render,!1);case 1:return bn(e.type,!0);case 31:return We("Activity");default:return""}}function ba(e){try{var n="",l=null;do n+=rn(e,l),l=e,e=e.return;while(e);return n}catch(i){return` -Error generating stack: `+i.message+` -`+i.stack}}var wt=Object.prototype.hasOwnProperty,vl=t.unstable_scheduleCallback,yl=t.unstable_cancelCallback,Ut=t.unstable_shouldYield,Lr=t.unstable_requestPaint,Ht=t.unstable_now,Iu=t.unstable_getCurrentPriorityLevel,xa=t.unstable_ImmediatePriority,ai=t.unstable_UserBlockingPriority,Sa=t.unstable_NormalPriority,bl=t.unstable_LowPriority,cr=t.unstable_IdlePriority,oi=t.log,zr=t.unstable_setDisableYieldValue,Ca=null,It=null;function Pn(e){if(typeof oi=="function"&&zr(e),It&&typeof It.setStrictMode=="function")try{It.setStrictMode(Ca,e)}catch{}}var zt=Math.clz32?Math.clz32:Xn,Vu=Math.log,xl=Math.LN2;function Xn(e){return e>>>=0,e===0?32:31-(Vu(e)/xl|0)|0}var ro=256,ao=262144,wa=4194304;function Kn(e){var n=e&42;if(n!==0)return n;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ee(e,n,l){var i=e.pendingLanes;if(i===0)return 0;var p=0,y=e.suspendedLanes,S=e.pingedLanes;e=e.warmLanes;var R=i&134217727;return R!==0?(i=R&~y,i!==0?p=Kn(i):(S&=R,S!==0?p=Kn(S):l||(l=R&~e,l!==0&&(p=Kn(l))))):(R=i&~y,R!==0?p=Kn(R):S!==0?p=Kn(S):l||(l=i&~e,l!==0&&(p=Kn(l)))),p===0?0:n!==0&&n!==p&&(n&y)===0&&(y=p&-p,l=n&-n,y>=l||y===32&&(l&4194048)!==0)?n:p}function et(e,n){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)===0}function Et(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32: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 n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pt(){var e=wa;return wa<<=1,(wa&62914560)===0&&(wa=4194304),e}function Pr(e){for(var n=[],l=0;31>l;l++)n.push(e);return n}function ot(e,n){e.pendingLanes|=n,n!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Yt(e,n,l,i,p,y){var S=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var R=e.entanglements,O=e.expirationTimes,Y=e.hiddenUpdates;for(l=S&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Vw=/[\n"\\]/g;function Sn(e){return e.replace(Vw,function(n){return"\\"+n.charCodeAt(0).toString(16)+" "})}function qu(e,n,l,i,p,y,S,R){e.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?e.type=S:e.removeAttribute("type"),n!=null?S==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+xn(n)):e.value!==""+xn(n)&&(e.value=""+xn(n)):S!=="submit"&&S!=="reset"||e.removeAttribute("value"),n!=null?Xu(e,S,xn(n)):l!=null?Xu(e,S,xn(l)):i!=null&&e.removeAttribute("value"),p==null&&y!=null&&(e.defaultChecked=!!y),p!=null&&(e.checked=p&&typeof p!="function"&&typeof p!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?e.name=""+xn(R):e.removeAttribute("name")}function Mh(e,n,l,i,p,y,S,R){if(y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(e.type=y),n!=null||l!=null){if(!(y!=="submit"&&y!=="reset"||n!=null)){Wu(e);return}l=l!=null?""+xn(l):"",n=n!=null?""+xn(n):l,R||n===e.value||(e.value=n),e.defaultValue=n}i=i??p,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=R?e.checked:!!i,e.defaultChecked=!!i,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(e.name=S),Wu(e)}function Xu(e,n,l){n==="number"&&ii(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function fo(e,n,l,i){if(e=e.options,n){n={};for(var p=0;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ed=!1;if(fr)try{var El={};Object.defineProperty(El,"passive",{get:function(){ed=!0}}),window.addEventListener("test",El,El),window.removeEventListener("test",El,El)}catch{ed=!1}var $r=null,td=null,ui=null;function Bh(){if(ui)return ui;var e,n=td,l=n.length,i,p="value"in $r?$r.value:$r.textContent,y=p.length;for(e=0;e=Rl),Gh=" ",Yh=!1;function Fh(e,n){switch(e){case"keyup":return v5.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var go=!1;function b5(e,n){switch(e){case"compositionend":return Wh(n);case"keypress":return n.which!==32?null:(Yh=!0,Gh);case"textInput":return e=n.data,e===Gh&&Yh?null:e;default:return null}}function x5(e,n){if(go)return e==="compositionend"||!ld&&Fh(e,n)?(e=Bh(),ui=td=$r=null,go=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:l,offset:n-e};e=i}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=tg(l)}}function rg(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?rg(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function ag(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var n=ii(e.document);n instanceof e.HTMLIFrameElement;){try{var l=typeof n.contentWindow.location.href=="string"}catch{l=!1}if(l)e=n.contentWindow;else break;n=ii(e.document)}return n}function cd(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}var T5=fr&&"documentMode"in document&&11>=document.documentMode,vo=null,ud=null,Ml=null,dd=!1;function og(e,n,l){var i=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;dd||vo==null||vo!==ii(i)||(i=vo,"selectionStart"in i&&cd(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),Ml&&kl(Ml,i)||(Ml=i,i=rc(ud,"onSelect"),0>=S,p-=S,Zn=1<<32-zt(n)+p|l<Me?(Pe=ye,ye=null):Pe=ye.sibling;var Ue=F($,ye,G[Me],te);if(Ue===null){ye===null&&(ye=Pe);break}e&&ye&&Ue.alternate===null&&n($,ye),L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue,ye=Pe}if(Me===G.length)return l($,ye),Be&&pr($,Me),Se;if(ye===null){for(;MeMe?(Pe=ye,ye=null):Pe=ye.sibling;var sa=F($,ye,Ue.value,te);if(sa===null){ye===null&&(ye=Pe);break}e&&ye&&sa.alternate===null&&n($,ye),L=y(sa,L,Me),$e===null?Se=sa:$e.sibling=sa,$e=sa,ye=Pe}if(Ue.done)return l($,ye),Be&&pr($,Me),Se;if(ye===null){for(;!Ue.done;Me++,Ue=G.next())Ue=re($,Ue.value,te),Ue!==null&&(L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue);return Be&&pr($,Me),Se}for(ye=i(ye);!Ue.done;Me++,Ue=G.next())Ue=X(ye,$,Me,Ue.value,te),Ue!==null&&(e&&Ue.alternate!==null&&ye.delete(Ue.key===null?Me:Ue.key),L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue);return e&&ye.forEach(function(qE){return n($,qE)}),Be&&pr($,Me),Se}function Fe($,L,G,te){if(typeof G=="object"&&G!==null&&G.type===w&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case C:e:{for(var Se=G.key;L!==null;){if(L.key===Se){if(Se=G.type,Se===w){if(L.tag===7){l($,L.sibling),te=p(L,G.props.children),te.return=$,$=te;break e}}else if(L.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===V&&La(Se)===L.type){l($,L.sibling),te=p(L,G.props),Pl(te,G),te.return=$,$=te;break e}l($,L);break}else n($,L);L=L.sibling}G.type===w?(te=ka(G.props.children,$.mode,te,G.key),te.return=$,$=te):(te=xi(G.type,G.key,G.props,null,$.mode,te),Pl(te,G),te.return=$,$=te)}return S($);case E:e:{for(Se=G.key;L!==null;){if(L.key===Se)if(L.tag===4&&L.stateNode.containerInfo===G.containerInfo&&L.stateNode.implementation===G.implementation){l($,L.sibling),te=p(L,G.children||[]),te.return=$,$=te;break e}else{l($,L);break}else n($,L);L=L.sibling}te=yd(G,$.mode,te),te.return=$,$=te}return S($);case V:return G=La(G),Fe($,L,G,te)}if(fe(G))return ve($,L,G,te);if(me(G)){if(Se=me(G),typeof Se!="function")throw Error(o(150));return G=Se.call(G),Ce($,L,G,te)}if(typeof G.then=="function")return Fe($,L,Ri(G),te);if(G.$$typeof===k)return Fe($,L,wi($,G),te);Ti($,G)}return typeof G=="string"&&G!==""||typeof G=="number"||typeof G=="bigint"?(G=""+G,L!==null&&L.tag===6?(l($,L.sibling),te=p(L,G),te.return=$,$=te):(l($,L),te=vd(G,$.mode,te),te.return=$,$=te),S($)):l($,L)}return function($,L,G,te){try{zl=0;var Se=Fe($,L,G,te);return To=null,Se}catch(ye){if(ye===Ro||ye===Ni)throw ye;var $e=on(29,ye,null,$.mode);return $e.lanes=te,$e.return=$,$e}finally{}}}var Pa=Tg(!0),Ag=Tg(!1),Gr=!1;function kd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Md(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Yr(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Fr(e,n,l){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,(He&2)!==0){var p=i.pending;return p===null?n.next=n:(n.next=p.next,p.next=n),i.pending=n,n=bi(e),fg(e,null,l),n}return yi(e,i,n,l),bi(e)}function Bl(e,n,l){if(n=n.updateQueue,n!==null&&(n=n.shared,(l&4194048)!==0)){var i=n.lanes;i&=e.pendingLanes,l|=i,n.lanes=l,Ft(e,l)}}function _d(e,n){var l=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,l===i)){var p=null,y=null;if(l=l.firstBaseUpdate,l!==null){do{var S={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};y===null?p=y=S:y=y.next=S,l=l.next}while(l!==null);y===null?p=y=n:y=y.next=n}else p=y=n;l={baseState:i.baseState,firstBaseUpdate:p,lastBaseUpdate:y,shared:i.shared,callbacks:i.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=n:e.next=n,l.lastBaseUpdate=n}var Od=!1;function $l(){if(Od){var e=jo;if(e!==null)throw e}}function Ul(e,n,l,i){Od=!1;var p=e.updateQueue;Gr=!1;var y=p.firstBaseUpdate,S=p.lastBaseUpdate,R=p.shared.pending;if(R!==null){p.shared.pending=null;var O=R,Y=O.next;O.next=null,S===null?y=Y:S.next=Y,S=O;var Z=e.alternate;Z!==null&&(Z=Z.updateQueue,R=Z.lastBaseUpdate,R!==S&&(R===null?Z.firstBaseUpdate=Y:R.next=Y,Z.lastBaseUpdate=O))}if(y!==null){var re=p.baseState;S=0,Z=Y=O=null,R=y;do{var F=R.lane&-536870913,X=F!==R.lane;if(X?(ze&F)===F:(i&F)===F){F!==0&&F===No&&(Od=!0),Z!==null&&(Z=Z.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});e:{var ve=e,Ce=R;F=n;var Fe=l;switch(Ce.tag){case 1:if(ve=Ce.payload,typeof ve=="function"){re=ve.call(Fe,re,F);break e}re=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=Ce.payload,F=typeof ve=="function"?ve.call(Fe,re,F):ve,F==null)break e;re=v({},re,F);break e;case 2:Gr=!0}}F=R.callback,F!==null&&(e.flags|=64,X&&(e.flags|=8192),X=p.callbacks,X===null?p.callbacks=[F]:X.push(F))}else X={lane:F,tag:R.tag,payload:R.payload,callback:R.callback,next:null},Z===null?(Y=Z=X,O=re):Z=Z.next=X,S|=F;if(R=R.next,R===null){if(R=p.shared.pending,R===null)break;X=R,R=X.next,X.next=null,p.lastBaseUpdate=X,p.shared.pending=null}}while(!0);Z===null&&(O=re),p.baseState=O,p.firstBaseUpdate=Y,p.lastBaseUpdate=Z,y===null&&(p.shared.lanes=0),Zr|=S,e.lanes=S,e.memoizedState=re}}function kg(e,n){if(typeof e!="function")throw Error(o(191,e));e.call(n)}function Mg(e,n){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;ey?y:8;var S=_.T,R={};_.T=R,Qd(e,!1,n,l);try{var O=p(),Y=_.S;if(Y!==null&&Y(R,O),O!==null&&typeof O=="object"&&typeof O.then=="function"){var Z=P5(O,i);Vl(e,n,Z,dn(e))}else Vl(e,n,i,dn(e))}catch(re){Vl(e,n,{then:function(){},status:"rejected",reason:re},dn())}finally{q.p=y,S!==null&&R.types!==null&&(S.types=R.types),_.T=S}}function V5(){}function Kd(e,n,l,i){if(e.tag!==5)throw Error(o(476));var p=cv(e).queue;iv(e,p,n,ee,l===null?V5:function(){return uv(e),l(i)})}function cv(e){var n=e.memoizedState;if(n!==null)return n;n={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:ee},next:null};var l={};return n.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:l},next:null},e.memoizedState=n,e=e.alternate,e!==null&&(e.memoizedState=n),n}function uv(e){var n=cv(e);n.next===null&&(n=e.alternate.memoizedState),Vl(e,n.next.queue,{},dn())}function Zd(){return Mt(ls)}function dv(){return ft().memoizedState}function fv(){return ft().memoizedState}function G5(e){for(var n=e.return;n!==null;){switch(n.tag){case 24:case 3:var l=dn();e=Yr(l);var i=Fr(n,e,l);i!==null&&(en(i,n,l),Bl(i,n,l)),n={cache:jd()},e.payload=n;return}n=n.return}}function Y5(e,n,l){var i=dn();l={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Bi(e)?pv(n,l):(l=hd(e,n,l,i),l!==null&&(en(l,e,i),hv(l,n,i)))}function mv(e,n,l){var i=dn();Vl(e,n,l,i)}function Vl(e,n,l,i){var p={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Bi(e))pv(n,p);else{var y=e.alternate;if(e.lanes===0&&(y===null||y.lanes===0)&&(y=n.lastRenderedReducer,y!==null))try{var S=n.lastRenderedState,R=y(S,l);if(p.hasEagerState=!0,p.eagerState=R,an(R,S))return yi(e,n,p,0),qe===null&&vi(),!1}catch{}finally{}if(l=hd(e,n,p,i),l!==null)return en(l,e,i),hv(l,n,i),!0}return!1}function Qd(e,n,l,i){if(i={lane:2,revertLane:Mf(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},Bi(e)){if(n)throw Error(o(479))}else n=hd(e,l,i,2),n!==null&&en(n,e,2)}function Bi(e){var n=e.alternate;return e===Te||n!==null&&n===Te}function pv(e,n){ko=Mi=!0;var l=e.pending;l===null?n.next=n:(n.next=l.next,l.next=n),e.pending=n}function hv(e,n,l){if((l&4194048)!==0){var i=n.lanes;i&=e.pendingLanes,l|=i,n.lanes=l,Ft(e,l)}}var Gl={readContext:Mt,use:Di,useCallback:it,useContext:it,useEffect:it,useImperativeHandle:it,useLayoutEffect:it,useInsertionEffect:it,useMemo:it,useReducer:it,useRef:it,useState:it,useDebugValue:it,useDeferredValue:it,useTransition:it,useSyncExternalStore:it,useId:it,useHostTransitionStatus:it,useFormState:it,useActionState:it,useOptimistic:it,useMemoCache:it,useCacheRefresh:it};Gl.useEffectEvent=it;var gv={readContext:Mt,use:Di,useCallback:function(e,n){return Vt().memoizedState=[e,n===void 0?null:n],e},useContext:Mt,useEffect:Jg,useImperativeHandle:function(e,n,l){l=l!=null?l.concat([e]):null,zi(4194308,4,rv.bind(null,n,e),l)},useLayoutEffect:function(e,n){return zi(4194308,4,e,n)},useInsertionEffect:function(e,n){zi(4,2,e,n)},useMemo:function(e,n){var l=Vt();n=n===void 0?null:n;var i=e();if(Ba){Pn(!0);try{e()}finally{Pn(!1)}}return l.memoizedState=[i,n],i},useReducer:function(e,n,l){var i=Vt();if(l!==void 0){var p=l(n);if(Ba){Pn(!0);try{l(n)}finally{Pn(!1)}}}else p=n;return i.memoizedState=i.baseState=p,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:p},i.queue=e,e=e.dispatch=Y5.bind(null,Te,e),[i.memoizedState,e]},useRef:function(e){var n=Vt();return e={current:e},n.memoizedState=e},useState:function(e){e=Yd(e);var n=e.queue,l=mv.bind(null,Te,n);return n.dispatch=l,[e.memoizedState,l]},useDebugValue:qd,useDeferredValue:function(e,n){var l=Vt();return Xd(l,e,n)},useTransition:function(){var e=Yd(!1);return e=iv.bind(null,Te,e.queue,!0,!1),Vt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,l){var i=Te,p=Vt();if(Be){if(l===void 0)throw Error(o(407));l=l()}else{if(l=n(),qe===null)throw Error(o(349));(ze&127)!==0||Pg(i,n,l)}p.memoizedState=l;var y={value:l,getSnapshot:n};return p.queue=y,Jg($g.bind(null,i,y,e),[e]),i.flags|=2048,_o(9,{destroy:void 0},Bg.bind(null,i,y,l,n),null),l},useId:function(){var e=Vt(),n=qe.identifierPrefix;if(Be){var l=Qn,i=Zn;l=(i&~(1<<32-zt(i)-1)).toString(32)+l,n="_"+n+"R_"+l,l=_i++,0<\/script>",y=y.removeChild(y.firstChild);break;case"select":y=typeof i.is=="string"?S.createElement("select",{is:i.is}):S.createElement("select"),i.multiple?y.multiple=!0:i.size&&(y.size=i.size);break;default:y=typeof i.is=="string"?S.createElement(p,{is:i.is}):S.createElement(p)}}y[At]=n,y[qt]=i;e:for(S=n.child;S!==null;){if(S.tag===5||S.tag===6)y.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===n)break e;for(;S.sibling===null;){if(S.return===null||S.return===n)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}n.stateNode=y;e:switch(Ot(y,p,i),p){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&xr(n)}}return Je(n),mf(n,n.type,e===null?null:e.memoizedProps,n.pendingProps,l),null;case 6:if(e&&n.stateNode!=null)e.memoizedProps!==i&&xr(n);else{if(typeof i!="string"&&n.stateNode===null)throw Error(o(166));if(e=J.current,wo(n)){if(e=n.stateNode,l=n.memoizedProps,i=null,p=kt,p!==null)switch(p.tag){case 27:case 5:i=p.memoizedProps}e[At]=n,e=!!(e.nodeValue===l||i!==null&&i.suppressHydrationWarning===!0||Ly(e.nodeValue,l)),e||Ir(n,!0)}else e=ac(e).createTextNode(i),e[At]=n,n.stateNode=e}return Je(n),null;case 31:if(l=n.memoizedState,e===null||e.memoizedState!==null){if(i=wo(n),l!==null){if(e===null){if(!i)throw Error(o(318));if(e=n.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[At]=n}else Ma(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Je(n),e=!1}else l=Cd(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return n.flags&256?(sn(n),n):(sn(n),null);if((n.flags&128)!==0)throw Error(o(558))}return Je(n),null;case 13:if(i=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(p=wo(n),i!==null&&i.dehydrated!==null){if(e===null){if(!p)throw Error(o(318));if(p=n.memoizedState,p=p!==null?p.dehydrated:null,!p)throw Error(o(317));p[At]=n}else Ma(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Je(n),p=!1}else p=Cd(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=p),p=!0;if(!p)return n.flags&256?(sn(n),n):(sn(n),null)}return sn(n),(n.flags&128)!==0?(n.lanes=l,n):(l=i!==null,e=e!==null&&e.memoizedState!==null,l&&(i=n.child,p=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(p=i.alternate.memoizedState.cachePool.pool),y=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(y=i.memoizedState.cachePool.pool),y!==p&&(i.flags|=2048)),l!==e&&l&&(n.child.flags|=8192),Vi(n,n.updateQueue),Je(n),null);case 4:return ue(),e===null&&Lf(n.stateNode.containerInfo),Je(n),null;case 10:return gr(n.type),Je(n),null;case 19:if(D(dt),i=n.memoizedState,i===null)return Je(n),null;if(p=(n.flags&128)!==0,y=i.rendering,y===null)if(p)Fl(i,!1);else{if(ct!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(y=ki(e),y!==null){for(n.flags|=128,Fl(i,!1),e=y.updateQueue,n.updateQueue=e,Vi(n,e),n.subtreeFlags=0,e=l,l=n.child;l!==null;)mg(l,e),l=l.sibling;return H(dt,dt.current&1|2),Be&&pr(n,i.treeForkCount),n.child}e=e.sibling}i.tail!==null&&Ht()>qi&&(n.flags|=128,p=!0,Fl(i,!1),n.lanes=4194304)}else{if(!p)if(e=ki(y),e!==null){if(n.flags|=128,p=!0,e=e.updateQueue,n.updateQueue=e,Vi(n,e),Fl(i,!0),i.tail===null&&i.tailMode==="hidden"&&!y.alternate&&!Be)return Je(n),null}else 2*Ht()-i.renderingStartTime>qi&&l!==536870912&&(n.flags|=128,p=!0,Fl(i,!1),n.lanes=4194304);i.isBackwards?(y.sibling=n.child,n.child=y):(e=i.last,e!==null?e.sibling=y:n.child=y,i.last=y)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Ht(),e.sibling=null,l=dt.current,H(dt,p?l&1|2:l&1),Be&&pr(n,i.treeForkCount),e):(Je(n),null);case 22:case 23:return sn(n),Ld(),i=n.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(n.flags|=8192):i&&(n.flags|=8192),i?(l&536870912)!==0&&(n.flags&128)===0&&(Je(n),n.subtreeFlags&6&&(n.flags|=8192)):Je(n),l=n.updateQueue,l!==null&&Vi(n,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),i=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),i!==l&&(n.flags|=2048),e!==null&&D(Da),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),n.memoizedState.cache!==l&&(n.flags|=2048),gr(mt),Je(n),null;case 25:return null;case 30:return null}throw Error(o(156,n.tag))}function K5(e,n){switch(xd(n),n.tag){case 1:return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return gr(mt),ue(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 26:case 27:case 5:return Re(n),null;case 31:if(n.memoizedState!==null){if(sn(n),n.alternate===null)throw Error(o(340));Ma()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 13:if(sn(n),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(o(340));Ma()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return D(dt),null;case 4:return ue(),null;case 10:return gr(n.type),null;case 22:case 23:return sn(n),Ld(),e!==null&&D(Da),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 24:return gr(mt),null;case 25:return null;default:return null}}function Uv(e,n){switch(xd(n),n.tag){case 3:gr(mt),ue();break;case 26:case 27:case 5:Re(n);break;case 4:ue();break;case 31:n.memoizedState!==null&&sn(n);break;case 13:sn(n);break;case 19:D(dt);break;case 10:gr(n.type);break;case 22:case 23:sn(n),Ld(),e!==null&&D(Da);break;case 24:gr(mt)}}function Wl(e,n){try{var l=n.updateQueue,i=l!==null?l.lastEffect:null;if(i!==null){var p=i.next;l=p;do{if((l.tag&e)===e){i=void 0;var y=l.create,S=l.inst;i=y(),S.destroy=i}l=l.next}while(l!==p)}}catch(R){Ve(n,n.return,R)}}function Xr(e,n,l){try{var i=n.updateQueue,p=i!==null?i.lastEffect:null;if(p!==null){var y=p.next;i=y;do{if((i.tag&e)===e){var S=i.inst,R=S.destroy;if(R!==void 0){S.destroy=void 0,p=n;var O=l,Y=R;try{Y()}catch(Z){Ve(p,O,Z)}}}i=i.next}while(i!==y)}}catch(Z){Ve(n,n.return,Z)}}function Hv(e){var n=e.updateQueue;if(n!==null){var l=e.stateNode;try{Mg(n,l)}catch(i){Ve(e,e.return,i)}}}function Iv(e,n,l){l.props=$a(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(i){Ve(e,n,i)}}function ql(e,n){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof l=="function"?e.refCleanup=l(i):l.current=i}}catch(p){Ve(e,n,p)}}function Jn(e,n){var l=e.ref,i=e.refCleanup;if(l!==null)if(typeof i=="function")try{i()}catch(p){Ve(e,n,p)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(p){Ve(e,n,p)}else l.current=null}function Vv(e){var n=e.type,l=e.memoizedProps,i=e.stateNode;try{e:switch(n){case"button":case"input":case"select":case"textarea":l.autoFocus&&i.focus();break e;case"img":l.src?i.src=l.src:l.srcSet&&(i.srcset=l.srcSet)}}catch(p){Ve(e,e.return,p)}}function pf(e,n,l){try{var i=e.stateNode;yE(i,e.type,l,n),i[qt]=n}catch(p){Ve(e,e.return,p)}}function Gv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&na(e.type)||e.tag===4}function hf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Gv(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.tag===27&&na(e.type)||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 gf(e,n,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,n):(n=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,n.appendChild(e),l=l._reactRootContainer,l!=null||n.onclick!==null||(n.onclick=dr));else if(i!==4&&(i===27&&na(e.type)&&(l=e.stateNode,n=null),e=e.child,e!==null))for(gf(e,n,l),e=e.sibling;e!==null;)gf(e,n,l),e=e.sibling}function Gi(e,n,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?l.insertBefore(e,n):l.appendChild(e);else if(i!==4&&(i===27&&na(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Gi(e,n,l),e=e.sibling;e!==null;)Gi(e,n,l),e=e.sibling}function Yv(e){var n=e.stateNode,l=e.memoizedProps;try{for(var i=e.type,p=n.attributes;p.length;)n.removeAttributeNode(p[0]);Ot(n,i,l),n[At]=e,n[qt]=l}catch(y){Ve(e,e.return,y)}}var Sr=!1,gt=!1,vf=!1,Fv=typeof WeakSet=="function"?WeakSet:Set,jt=null;function Z5(e,n){if(e=e.containerInfo,Bf=dc,e=ag(e),cd(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var i=l.getSelection&&l.getSelection();if(i&&i.rangeCount!==0){l=i.anchorNode;var p=i.anchorOffset,y=i.focusNode;i=i.focusOffset;try{l.nodeType,y.nodeType}catch{l=null;break e}var S=0,R=-1,O=-1,Y=0,Z=0,re=e,F=null;t:for(;;){for(var X;re!==l||p!==0&&re.nodeType!==3||(R=S+p),re!==y||i!==0&&re.nodeType!==3||(O=S+i),re.nodeType===3&&(S+=re.nodeValue.length),(X=re.firstChild)!==null;)F=re,re=X;for(;;){if(re===e)break t;if(F===l&&++Y===p&&(R=S),F===y&&++Z===i&&(O=S),(X=re.nextSibling)!==null)break;re=F,F=re.parentNode}re=X}l=R===-1||O===-1?null:{start:R,end:O}}else l=null}l=l||{start:0,end:0}}else l=null;for($f={focusedElem:e,selectionRange:l},dc=!1,jt=n;jt!==null;)if(n=jt,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,jt=e;else for(;jt!==null;){switch(n=jt,y=n.alternate,e=n.flags,n.tag){case 0:if((e&4)!==0&&(e=n.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),Ot(y,i,l),y[At]=e,Nt(y),i=y;break e;case"link":var S=Qy("link","href",p).get(i+(l.href||""));if(S){for(var R=0;RFe&&(S=Fe,Fe=Ce,Ce=S);var $=ng(R,Ce),L=ng(R,Fe);if($&&L&&(X.rangeCount!==1||X.anchorNode!==$.node||X.anchorOffset!==$.offset||X.focusNode!==L.node||X.focusOffset!==L.offset)){var G=re.createRange();G.setStart($.node,$.offset),X.removeAllRanges(),Ce>Fe?(X.addRange(G),X.extend(L.node,L.offset)):(G.setEnd(L.node,L.offset),X.addRange(G))}}}}for(re=[],X=R;X=X.parentNode;)X.nodeType===1&&re.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Rl?32:l,_.T=null,l=Ef,Ef=null;var y=Jr,S=jr;if(St=0,Po=Jr=null,jr=0,(He&6)!==0)throw Error(o(331));var R=He;if(He|=4,ry(y.current),ey(y,y.current,S,l),He=R,es(0,!1),It&&typeof It.onPostCommitFiberRoot=="function")try{It.onPostCommitFiberRoot(Ca,y)}catch{}return!0}finally{q.p=p,_.T=i,Sy(e,n)}}function wy(e,n,l){n=wn(l,n),n=nf(e.stateNode,n,2),e=Fr(e,n,2),e!==null&&(ot(e,2),er(e))}function Ve(e,n,l){if(e.tag===3)wy(e,e,l);else for(;n!==null;){if(n.tag===3){wy(n,e,l);break}else if(n.tag===1){var i=n.stateNode;if(typeof n.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(Qr===null||!Qr.has(i))){e=wn(l,e),l=Ev(2),i=Fr(n,l,2),i!==null&&(Nv(l,i,n,e),ot(i,2),er(i));break}}n=n.return}}function Tf(e,n,l){var i=e.pingCache;if(i===null){i=e.pingCache=new eE;var p=new Set;i.set(n,p)}else p=i.get(n),p===void 0&&(p=new Set,i.set(n,p));p.has(l)||(xf=!0,p.add(l),e=oE.bind(null,e,n,l),n.then(e,e))}function oE(e,n,l){var i=e.pingCache;i!==null&&i.delete(n),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,qe===e&&(ze&l)===l&&(ct===4||ct===3&&(ze&62914560)===ze&&300>Ht()-Wi?(He&2)===0&&Bo(e,0):Sf|=l,zo===ze&&(zo=0)),er(e)}function Ey(e,n){n===0&&(n=Pt()),e=Aa(e,n),e!==null&&(ot(e,n),er(e))}function lE(e){var n=e.memoizedState,l=0;n!==null&&(l=n.retryLane),Ey(e,l)}function sE(e,n){var l=0;switch(e.tag){case 31:case 13:var i=e.stateNode,p=e.memoizedState;p!==null&&(l=p.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(o(314))}i!==null&&i.delete(n),Ey(e,l)}function iE(e,n){return vl(e,n)}var ec=null,Uo=null,Af=!1,tc=!1,kf=!1,ta=0;function er(e){e!==Uo&&e.next===null&&(Uo===null?ec=Uo=e:Uo=Uo.next=e),tc=!0,Af||(Af=!0,uE())}function es(e,n){if(!kf&&tc){kf=!0;do for(var l=!1,i=ec;i!==null;){if(e!==0){var p=i.pendingLanes;if(p===0)var y=0;else{var S=i.suspendedLanes,R=i.pingedLanes;y=(1<<31-zt(42|e)+1)-1,y&=p&~(S&~R),y=y&201326741?y&201326741|1:y?y|2:0}y!==0&&(l=!0,Ty(i,y))}else y=ze,y=Ee(i,i===qe?y:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(y&3)===0||et(i,y)||(l=!0,Ty(i,y));i=i.next}while(l);kf=!1}}function cE(){Ny()}function Ny(){tc=Af=!1;var e=0;ta!==0&&xE()&&(e=ta);for(var n=Ht(),l=null,i=ec;i!==null;){var p=i.next,y=jy(i,n);y===0?(i.next=null,l===null?ec=p:l.next=p,p===null&&(Uo=l)):(l=i,(e!==0||(y&3)!==0)&&(tc=!0)),i=p}St!==0&&St!==5||es(e),ta!==0&&(ta=0)}function jy(e,n){for(var l=e.suspendedLanes,i=e.pingedLanes,p=e.expirationTimes,y=e.pendingLanes&-62914561;0R)break;var Z=O.transferSize,re=O.initiatorType;Z&&zy(re)&&(O=O.responseEnd,S+=Z*(O"u"?null:document;function qy(e,n,l){var i=Ho;if(i&&typeof n=="string"&&n){var p=Sn(n);p='link[rel="'+e+'"][href="'+p+'"]',typeof l=="string"&&(p+='[crossorigin="'+l+'"]'),Wy.has(p)||(Wy.add(p),e={rel:e,crossOrigin:l,href:n},i.querySelector(p)===null&&(n=i.createElement("link"),Ot(n,"link",e),Nt(n),i.head.appendChild(n)))}}function AE(e){Rr.D(e),qy("dns-prefetch",e,null)}function kE(e,n){Rr.C(e,n),qy("preconnect",e,n)}function ME(e,n,l){Rr.L(e,n,l);var i=Ho;if(i&&e&&n){var p='link[rel="preload"][as="'+Sn(n)+'"]';n==="image"&&l&&l.imageSrcSet?(p+='[imagesrcset="'+Sn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(p+='[imagesizes="'+Sn(l.imageSizes)+'"]')):p+='[href="'+Sn(e)+'"]';var y=p;switch(n){case"style":y=Io(e);break;case"script":y=Vo(e)}An.has(y)||(e=v({rel:"preload",href:n==="image"&&l&&l.imageSrcSet?void 0:e,as:n},l),An.set(y,e),i.querySelector(p)!==null||n==="style"&&i.querySelector(as(y))||n==="script"&&i.querySelector(os(y))||(n=i.createElement("link"),Ot(n,"link",e),Nt(n),i.head.appendChild(n)))}}function _E(e,n){Rr.m(e,n);var l=Ho;if(l&&e){var i=n&&typeof n.as=="string"?n.as:"script",p='link[rel="modulepreload"][as="'+Sn(i)+'"][href="'+Sn(e)+'"]',y=p;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":y=Vo(e)}if(!An.has(y)&&(e=v({rel:"modulepreload",href:e},n),An.set(y,e),l.querySelector(p)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(os(y)))return}i=l.createElement("link"),Ot(i,"link",e),Nt(i),l.head.appendChild(i)}}}function OE(e,n,l){Rr.S(e,n,l);var i=Ho;if(i&&e){var p=co(i).hoistableStyles,y=Io(e);n=n||"default";var S=p.get(y);if(!S){var R={loading:0,preload:null};if(S=i.querySelector(as(y)))R.loading=5;else{e=v({rel:"stylesheet",href:e,"data-precedence":n},l),(l=An.get(y))&&Ff(e,l);var O=S=i.createElement("link");Nt(O),Ot(O,"link",e),O._p=new Promise(function(Y,Z){O.onload=Y,O.onerror=Z}),O.addEventListener("load",function(){R.loading|=1}),O.addEventListener("error",function(){R.loading|=2}),R.loading|=4,lc(S,n,i)}S={type:"stylesheet",instance:S,count:1,state:R},p.set(y,S)}}}function DE(e,n){Rr.X(e,n);var l=Ho;if(l&&e){var i=co(l).hoistableScripts,p=Vo(e),y=i.get(p);y||(y=l.querySelector(os(p)),y||(e=v({src:e,async:!0},n),(n=An.get(p))&&Wf(e,n),y=l.createElement("script"),Nt(y),Ot(y,"link",e),l.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function LE(e,n){Rr.M(e,n);var l=Ho;if(l&&e){var i=co(l).hoistableScripts,p=Vo(e),y=i.get(p);y||(y=l.querySelector(os(p)),y||(e=v({src:e,async:!0,type:"module"},n),(n=An.get(p))&&Wf(e,n),y=l.createElement("script"),Nt(y),Ot(y,"link",e),l.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function Xy(e,n,l,i){var p=(p=J.current)?oc(p):null;if(!p)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(n=Io(l.href),l=co(p).hoistableStyles,i=l.get(n),i||(i={type:"style",instance:null,count:0,state:null},l.set(n,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=Io(l.href);var y=co(p).hoistableStyles,S=y.get(e);if(S||(p=p.ownerDocument||p,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},y.set(e,S),(y=p.querySelector(as(e)))&&!y._p&&(S.instance=y,S.state.loading=5),An.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},An.set(e,l),y||zE(p,e,l,S.state))),n&&i===null)throw Error(o(528,""));return S}if(n&&i!==null)throw Error(o(529,""));return null;case"script":return n=l.async,l=l.src,typeof l=="string"&&n&&typeof n!="function"&&typeof n!="symbol"?(n=Vo(l),l=co(p).hoistableScripts,i=l.get(n),i||(i={type:"script",instance:null,count:0,state:null},l.set(n,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Io(e){return'href="'+Sn(e)+'"'}function as(e){return'link[rel="stylesheet"]['+e+"]"}function Ky(e){return v({},e,{"data-precedence":e.precedence,precedence:null})}function zE(e,n,l,i){e.querySelector('link[rel="preload"][as="style"]['+n+"]")?i.loading=1:(n=e.createElement("link"),i.preload=n,n.addEventListener("load",function(){return i.loading|=1}),n.addEventListener("error",function(){return i.loading|=2}),Ot(n,"link",l),Nt(n),e.head.appendChild(n))}function Vo(e){return'[src="'+Sn(e)+'"]'}function os(e){return"script[async]"+e}function Zy(e,n,l){if(n.count++,n.instance===null)switch(n.type){case"style":var i=e.querySelector('style[data-href~="'+Sn(l.href)+'"]');if(i)return n.instance=i,Nt(i),i;var p=v({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),Nt(i),Ot(i,"style",p),lc(i,l.precedence,e),n.instance=i;case"stylesheet":p=Io(l.href);var y=e.querySelector(as(p));if(y)return n.state.loading|=4,n.instance=y,Nt(y),y;i=Ky(l),(p=An.get(p))&&Ff(i,p),y=(e.ownerDocument||e).createElement("link"),Nt(y);var S=y;return S._p=new Promise(function(R,O){S.onload=R,S.onerror=O}),Ot(y,"link",i),n.state.loading|=4,lc(y,l.precedence,e),n.instance=y;case"script":return y=Vo(l.src),(p=e.querySelector(os(y)))?(n.instance=p,Nt(p),p):(i=l,(p=An.get(y))&&(i=v({},l),Wf(i,p)),e=e.ownerDocument||e,p=e.createElement("script"),Nt(p),Ot(p,"link",i),e.head.appendChild(p),n.instance=p);case"void":return null;default:throw Error(o(443,n.type))}else n.type==="stylesheet"&&(n.state.loading&4)===0&&(i=n.instance,n.state.loading|=4,lc(i,l.precedence,e));return n.instance}function lc(e,n,l){for(var i=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),p=i.length?i[i.length-1]:null,y=p,S=0;S title"):null)}function PE(e,n,l){if(l===1||n.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof n.precedence!="string"||typeof n.href!="string"||n.href==="")break;return!0;case"link":if(typeof n.rel!="string"||typeof n.href!="string"||n.href===""||n.onLoad||n.onError)break;switch(n.rel){case"stylesheet":return e=n.disabled,typeof n.precedence=="string"&&e==null;default:return!0}case"script":if(n.async&&typeof n.async!="function"&&typeof n.async!="symbol"&&!n.onLoad&&!n.onError&&n.src&&typeof n.src=="string")return!0}return!1}function e1(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function BE(e,n,l,i){if(l.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var p=Io(i.href),y=n.querySelector(as(p));if(y){n=y._p,n!==null&&typeof n=="object"&&typeof n.then=="function"&&(e.count++,e=ic.bind(e),n.then(e,e)),l.state.loading|=4,l.instance=y,Nt(y);return}y=n.ownerDocument||n,i=Ky(i),(p=An.get(p))&&Ff(i,p),y=y.createElement("link"),Nt(y);var S=y;S._p=new Promise(function(R,O){S.onload=R,S.onerror=O}),Ot(y,"link",i),l.instance=y}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,n),(n=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=ic.bind(e),n.addEventListener("load",l),n.addEventListener("error",l))}}var qf=0;function $E(e,n){return e.stylesheets&&e.count===0&&uc(e,e.stylesheets),0qf?50:800)+n);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(p)}}:null}function ic(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)uc(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var cc=null;function uc(e,n){e.stylesheets=null,e.unsuspend!==null&&(e.count++,cc=new Map,n.forEach(UE,e),cc=null,ic.call(e))}function UE(e,n){if(!(n.state.loading&4)){var l=cc.get(e);if(l)var i=l.get(null);else{l=new Map,cc.set(e,l);for(var p=e.querySelectorAll("link[data-precedence],style[data-precedence]"),y=0;y"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),rm.exports=n3(),rm.exports}var a3=r3();/** - * react-router v7.15.1 - * - * 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 - */var E1="popstate";function N1(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function o3(t={}){function r(o,s){var h;let c=(h=s.state)==null?void 0:h.masked,{pathname:f,search:m,hash:g}=c||o.location;return _m("",{pathname:f,search:m,hash:g},s.state&&s.state.usr||null,s.state&&s.state.key||"default",c?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,s){return typeof s=="string"?s:Es(s)}return s3(r,a,null,t)}function at(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function On(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function l3(){return Math.random().toString(36).substring(2,10)}function j1(t,r){return{usr:t.state,key:t.key,idx:r,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function _m(t,r,a=null,o,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?ll(r):r,state:a,key:r&&r.key||o||l3(),mask:s}}function Es({pathname:t="/",search:r="",hash:a=""}){return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function ll(t){let r={};if(t){let a=t.indexOf("#");a>=0&&(r.hash=t.substring(a),t=t.substring(0,a));let o=t.indexOf("?");o>=0&&(r.search=t.substring(o),t=t.substring(0,o)),t&&(r.pathname=t)}return r}function s3(t,r,a,o={}){let{window:s=document.defaultView,v5Compat:c=!1}=o,f=s.history,m="POP",g=null,h=b();h==null&&(h=0,f.replaceState({...f.state,idx:h},""));function b(){return(f.state||{idx:null}).idx}function v(){m="POP";let j=b(),N=j==null?null:j-h;h=j,g&&g({action:m,location:w.location,delta:N})}function x(j,N){m="PUSH";let A=N1(j)?j:_m(w.location,j,N);h=b()+1;let k=j1(A,h),T=w.createHref(A.mask||A);try{f.pushState(k,"",T)}catch(z){if(z instanceof DOMException&&z.name==="DataCloneError")throw z;s.location.assign(T)}c&&g&&g({action:m,location:w.location,delta:1})}function C(j,N){m="REPLACE";let A=N1(j)?j:_m(w.location,j,N);h=b();let k=j1(A,h),T=w.createHref(A.mask||A);f.replaceState(k,"",T),c&&g&&g({action:m,location:w.location,delta:0})}function E(j){return i3(j)}let w={get action(){return m},get location(){return t(s,f)},listen(j){if(g)throw new Error("A history only accepts one active listener");return s.addEventListener(E1,v),g=j,()=>{s.removeEventListener(E1,v),g=null}},createHref(j){return r(s,j)},createURL:E,encodeLocation(j){let N=E(j);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:x,replace:C,go(j){return f.go(j)}};return w}function i3(t,r=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),at(a,"No window.location.(origin|href) available to create URL");let o=typeof t=="string"?t:Es(t);return o=o.replace(/ $/,"%20"),!r&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function Bb(t,r,a="/"){return c3(t,r,a,!1)}function c3(t,r,a,o,s){let c=typeof r=="string"?ll(r):r,f=kr(c.pathname||"/",a);if(f==null)return null;let m=u3(t),g=null,h=C3(f);for(let b=0;g==null&&b{let b={relativePath:h===void 0?f.path||"":h,caseSensitive:f.caseSensitive===!0,childrenIndex:m,route:f};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&g)return;at(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let v=Gn([o,b.relativePath]),x=a.concat(b);f.children&&f.children.length>0&&(at(f.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),$b(f.children,r,x,v,g)),!(f.path==null&&!f.index)&&r.push({path:v,score:y3(v,f.index),routesMeta:x})};return t.forEach((f,m)=>{var g;if(f.path===""||!((g=f.path)!=null&&g.includes("?")))c(f,m);else for(let h of Ub(f.path))c(f,m,!0,h)}),r}function Ub(t){let r=t.split("/");if(r.length===0)return[];let[a,...o]=r,s=a.endsWith("?"),c=a.replace(/\?$/,"");if(o.length===0)return s?[c,""]:[c];let f=Ub(o.join("/")),m=[];return m.push(...f.map(g=>g===""?c:[c,g].join("/"))),s&&m.push(...f),m.map(g=>t.startsWith("/")&&g===""?"/":g)}function d3(t){t.sort((r,a)=>r.score!==a.score?a.score-r.score:b3(r.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var f3=/^:[\w-]+$/,m3=3,p3=2,h3=1,g3=10,v3=-2,R1=t=>t==="*";function y3(t,r){let a=t.split("/"),o=a.length;return a.some(R1)&&(o+=v3),r&&(o+=p3),a.filter(s=>!R1(s)).reduce((s,c)=>s+(f3.test(c)?m3:c===""?h3:g3),o)}function b3(t,r){return t.length===r.length&&t.slice(0,-1).every((o,s)=>o===r[s])?t[t.length-1]-r[r.length-1]:0}function x3(t,r,a=!1){let{routesMeta:o}=t,s={},c="/",f=[];for(let m=0;m{if(b==="*"){let E=m[x]||"";f=c.slice(0,c.length-E.length).replace(/(.)\/+$/,"$1")}const C=m[x];return v&&!C?h[b]=void 0:h[b]=(C||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:f,pattern:t}}function S3(t,r=!1,a=!0){On(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let o=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(f,m,g,h,b)=>{if(o.push({paramName:m,isOptional:g!=null}),g){let v=b.charAt(h+f.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(o.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,r?void 0:"i"),o]}function C3(t){try{return t.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return On(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),t}}function kr(t,r){if(r==="/")return t;if(!t.toLowerCase().startsWith(r.toLowerCase()))return null;let a=r.endsWith("/")?r.length-1:r.length,o=t.charAt(a);return o&&o!=="/"?null:t.slice(a)||"/"}var w3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function E3(t,r="/"){let{pathname:a,search:o="",hash:s=""}=typeof t=="string"?ll(t):t,c;return a?(a=Hb(a),a.startsWith("/")?c=T1(a.substring(1),"/"):c=T1(a,r)):c=r,{pathname:c,search:R3(o),hash:T3(s)}}function T1(t,r){let a=Pc(r).split("/");return t.split("/").forEach(s=>{s===".."?a.length>1&&a.pop():s!=="."&&a.push(s)}),a.length>1?a.join("/"):"/"}function sm(t,r,a,o){return`Cannot include a '${t}' character in a manually specified \`to.${r}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function N3(t){return t.filter((r,a)=>a===0||r.route.path&&r.route.path.length>0)}function pp(t){let r=N3(t);return r.map((a,o)=>o===r.length-1?a.pathname:a.pathnameBase)}function eu(t,r,a,o=!1){let s;typeof t=="string"?s=ll(t):(s={...t},at(!s.pathname||!s.pathname.includes("?"),sm("?","pathname","search",s)),at(!s.pathname||!s.pathname.includes("#"),sm("#","pathname","hash",s)),at(!s.search||!s.search.includes("#"),sm("#","search","hash",s)));let c=t===""||s.pathname==="",f=c?"/":s.pathname,m;if(f==null)m=a;else{let v=r.length-1;if(!o&&f.startsWith("..")){let x=f.split("/");for(;x[0]==="..";)x.shift(),v-=1;s.pathname=x.join("/")}m=v>=0?r[v]:"/"}let g=E3(s,m),h=f&&f!=="/"&&f.endsWith("/"),b=(c||f===".")&&a.endsWith("/");return!g.pathname.endsWith("/")&&(h||b)&&(g.pathname+="/"),g}var Hb=t=>t.replace(/\/\/+/g,"/"),Gn=t=>Hb(t.join("/")),Pc=t=>t.replace(/\/+$/,""),j3=t=>Pc(t).replace(/^\/*/,"/"),R3=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,T3=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,A3=class{constructor(t,r,a,o=!1){this.status=t,this.statusText=r||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function k3(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function M3(t){let r=t.map(a=>a.route.path).filter(Boolean);return Gn(r)||"/"}var Ib=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Vb(t,r){let a=t;if(typeof a!="string"||!w3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,s=!1;if(Ib)try{let c=new URL(window.location.href),f=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=kr(f.pathname,r);f.origin===c.origin&&m!=null?a=m+f.search+f.hash:s=!0}catch{On(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:s,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Gb=["POST","PUT","PATCH","DELETE"];new Set(Gb);var _3=["GET",...Gb];new Set(_3);var sl=d.createContext(null);sl.displayName="DataRouter";var tu=d.createContext(null);tu.displayName="DataRouterState";var Yb=d.createContext(!1);function O3(){return d.useContext(Yb)}var Fb=d.createContext({isTransitioning:!1});Fb.displayName="ViewTransition";var D3=d.createContext(new Map);D3.displayName="Fetchers";var L3=d.createContext(null);L3.displayName="Await";var gn=d.createContext(null);gn.displayName="Navigation";var Bs=d.createContext(null);Bs.displayName="Location";var Wn=d.createContext({outlet:null,matches:[],isDataRoute:!1});Wn.displayName="Route";var hp=d.createContext(null);hp.displayName="RouteError";var Wb="REACT_ROUTER_ERROR",z3="REDIRECT",P3="ROUTE_ERROR_RESPONSE";function B3(t){if(t.startsWith(`${Wb}:${z3}:{`))try{let r=JSON.parse(t.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function $3(t){if(t.startsWith(`${Wb}:${P3}:{`))try{let r=JSON.parse(t.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new A3(r.status,r.statusText,r.data)}catch{}}function U3(t,{relative:r}={}){at(il(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=d.useContext(gn),{hash:s,pathname:c,search:f}=$s(t,{relative:r}),m=c;return a!=="/"&&(m=c==="/"?a:Gn([a,c])),o.createHref({pathname:m,search:f,hash:s})}function il(){return d.useContext(Bs)!=null}function Dn(){return at(il(),"useLocation() may be used only in the context of a component."),d.useContext(Bs).location}var qb="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Xb(t){d.useContext(gn).static||d.useLayoutEffect(t)}function cl(){let{isDataRoute:t}=d.useContext(Wn);return t?t4():H3()}function H3(){at(il(),"useNavigate() may be used only in the context of a component.");let t=d.useContext(sl),{basename:r,navigator:a}=d.useContext(gn),{matches:o}=d.useContext(Wn),{pathname:s}=Dn(),c=JSON.stringify(pp(o)),f=d.useRef(!1);return Xb(()=>{f.current=!0}),d.useCallback((g,h={})=>{if(On(f.current,qb),!f.current)return;if(typeof g=="number"){a.go(g);return}let b=eu(g,JSON.parse(c),s,h.relative==="path");t==null&&r!=="/"&&(b.pathname=b.pathname==="/"?r:Gn([r,b.pathname])),(h.replace?a.replace:a.push)(b,h.state,h)},[r,a,c,s,t])}var I3=d.createContext(null);function V3(t){let r=d.useContext(Wn).outlet;return d.useMemo(()=>r&&d.createElement(I3.Provider,{value:t},r),[r,t])}function $s(t,{relative:r}={}){let{matches:a}=d.useContext(Wn),{pathname:o}=Dn(),s=JSON.stringify(pp(a));return d.useMemo(()=>eu(t,JSON.parse(s),o,r==="path"),[t,s,o,r])}function G3(t,r){return Kb(t,r)}function Kb(t,r,a){var j;at(il(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=d.useContext(gn),{matches:s}=d.useContext(Wn),c=s[s.length-1],f=c?c.params:{},m=c?c.pathname:"/",g=c?c.pathnameBase:"/",h=c&&c.route;{let N=h&&h.path||"";Qb(m,!h||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let b=Dn(),v;if(r){let N=typeof r=="string"?ll(r):r;at(g==="/"||((j=N.pathname)==null?void 0:j.startsWith(g)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${g}" but pathname "${N.pathname}" was given in the \`location\` prop.`),v=N}else v=b;let x=v.pathname||"/",C=x;if(g!=="/"){let N=g.replace(/^\//,"").split("/");C="/"+x.replace(/^\//,"").split("/").slice(N.length).join("/")}let E=a&&a.state.matches.length?a.state.matches.map(N=>Object.assign(N,{route:a.manifest[N.route.id]||N.route})):Bb(t,{pathname:C});On(h||E!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),On(E==null||E[E.length-1].route.element!==void 0||E[E.length-1].route.Component!==void 0||E[E.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let w=X3(E&&E.map(N=>Object.assign({},N,{params:Object.assign({},f,N.params),pathname:Gn([g,o.encodeLocation?o.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?g:Gn([g,o.encodeLocation?o.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),s,a);return r&&w?d.createElement(Bs.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},w):w}function Y3(){let t=e4(),r=k3(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:o},c={padding:"2px 4px",backgroundColor:o},f=null;return console.error("Error handled by React Router default ErrorBoundary:",t),f=d.createElement(d.Fragment,null,d.createElement("p",null,"💿 Hey developer 👋"),d.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",d.createElement("code",{style:c},"ErrorBoundary")," or"," ",d.createElement("code",{style:c},"errorElement")," prop on your route.")),d.createElement(d.Fragment,null,d.createElement("h2",null,"Unexpected Application Error!"),d.createElement("h3",{style:{fontStyle:"italic"}},r),a?d.createElement("pre",{style:s},a):null,f)}var F3=d.createElement(Y3,null),Zb=class extends d.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!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){this.props.onError?this.props.onError(t,r):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=$3(t.digest);a&&(t=a)}let r=t!==void 0?d.createElement(Wn.Provider,{value:this.props.routeContext},d.createElement(hp.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?d.createElement(W3,{error:t},r):r}};Zb.contextType=Yb;var im=new WeakMap;function W3({children:t,error:r}){let{basename:a}=d.useContext(gn);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let o=B3(r.digest);if(o){let s=im.get(r);if(s)throw s;let c=Vb(o.location,a);if(Ib&&!im.get(r))if(c.isExternal||o.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const f=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:o.replace}));throw im.set(r,f),f}return d.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return t}function q3({routeContext:t,match:r,children:a}){let o=d.useContext(sl);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),d.createElement(Wn.Provider,{value:t},a)}function X3(t,r=[],a){let o=a==null?void 0:a.state;if(t==null){if(!o)return null;if(o.errors)t=o.matches;else if(r.length===0&&!o.initialized&&o.matches.length>0)t=o.matches;else return null}let s=t,c=o==null?void 0:o.errors;if(c!=null){let b=s.findIndex(v=>v.route.id&&(c==null?void 0:c[v.route.id])!==void 0);at(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),s=s.slice(0,Math.min(s.length,b+1))}let f=!1,m=-1;if(a&&o){f=o.renderFallback;for(let b=0;b=0?s=s.slice(0,m+1):s=[s[0]];break}}}}let g=a==null?void 0:a.onError,h=o&&g?(b,v)=>{var x,C;g(b,{location:o.location,params:((C=(x=o.matches)==null?void 0:x[0])==null?void 0:C.params)??{},pattern:M3(o.matches),errorInfo:v})}:void 0;return s.reduceRight((b,v,x)=>{let C,E=!1,w=null,j=null;o&&(C=c&&v.route.id?c[v.route.id]:void 0,w=v.route.errorElement||F3,f&&(m<0&&x===0?(Qb("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),E=!0,j=null):m===x&&(E=!0,j=v.route.hydrateFallbackElement||null)));let N=r.concat(s.slice(0,x+1)),A=()=>{let k;return C?k=w:E?k=j:v.route.Component?k=d.createElement(v.route.Component,null):v.route.element?k=v.route.element:k=b,d.createElement(q3,{match:v,routeContext:{outlet:b,matches:N,isDataRoute:o!=null},children:k})};return o&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?d.createElement(Zb,{location:o.location,revalidation:o.revalidation,component:w,error:C,children:A(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:h}):A()},null)}function gp(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function K3(t){let r=d.useContext(sl);return at(r,gp(t)),r}function Z3(t){let r=d.useContext(tu);return at(r,gp(t)),r}function Q3(t){let r=d.useContext(Wn);return at(r,gp(t)),r}function vp(t){let r=Q3(t),a=r.matches[r.matches.length-1];return at(a.route.id,`${t} can only be used on routes that contain a unique "id"`),a.route.id}function J3(){return vp("useRouteId")}function e4(){var o;let t=d.useContext(hp),r=Z3("useRouteError"),a=vp("useRouteError");return t!==void 0?t:(o=r.errors)==null?void 0:o[a]}function t4(){let{router:t}=K3("useNavigate"),r=vp("useNavigate"),a=d.useRef(!1);return Xb(()=>{a.current=!0}),d.useCallback(async(s,c={})=>{On(a.current,qb),a.current&&(typeof s=="number"?await t.navigate(s):await t.navigate(s,{fromRouteId:r,...c}))},[t,r])}var A1={};function Qb(t,r,a){!r&&!A1[t]&&(A1[t]=!0,On(!1,a))}d.memo(n4);function n4({routes:t,manifest:r,future:a,state:o,isStatic:s,onError:c}){return Kb(t,void 0,{manifest:r,state:o,isStatic:s,onError:c})}function Ga({to:t,replace:r,state:a,relative:o}){at(il()," may be used only in the context of a component.");let{static:s}=d.useContext(gn);On(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:c}=d.useContext(Wn),{pathname:f}=Dn(),m=cl(),g=eu(t,pp(c),f,o==="path"),h=JSON.stringify(g);return d.useEffect(()=>{m(JSON.parse(h),{replace:r,state:a,relative:o})},[m,h,o,r,a]),null}function r4(t){return V3(t.context)}function In(t){at(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function a4({basename:t="/",children:r=null,location:a,navigationType:o="POP",navigator:s,static:c=!1,useTransitions:f}){at(!il(),"You cannot render a inside another . You should never have more than one in your app.");let m=t.replace(/^\/*/,"/"),g=d.useMemo(()=>({basename:m,navigator:s,static:c,useTransitions:f,future:{}}),[m,s,c,f]);typeof a=="string"&&(a=ll(a));let{pathname:h="/",search:b="",hash:v="",state:x=null,key:C="default",mask:E}=a,w=d.useMemo(()=>{let j=kr(h,m);return j==null?null:{location:{pathname:j,search:b,hash:v,state:x,key:C,mask:E},navigationType:o}},[m,h,b,v,x,C,o,E]);return On(w!=null,` is not able to match the URL "${h}${b}${v}" because it does not start with the basename, so the won't render anything.`),w==null?null:d.createElement(gn.Provider,{value:g},d.createElement(Bs.Provider,{children:r,value:w}))}function o4({children:t,location:r}){return G3(Om(t),r)}function Om(t,r=[]){let a=[];return d.Children.forEach(t,(o,s)=>{if(!d.isValidElement(o))return;let c=[...r,s];if(o.type===d.Fragment){a.push.apply(a,Om(o.props.children,c));return}at(o.type===In,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),at(!o.props.index||!o.props.children,"An index route cannot have child routes.");let f={id:o.props.id||c.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(f.children=Om(o.props.children,c)),a.push(f)}),a}var Ac="get",kc="application/x-www-form-urlencoded";function nu(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function l4(t){return nu(t)&&t.tagName.toLowerCase()==="button"}function s4(t){return nu(t)&&t.tagName.toLowerCase()==="form"}function i4(t){return nu(t)&&t.tagName.toLowerCase()==="input"}function c4(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function u4(t,r){return t.button===0&&(!r||r==="_self")&&!c4(t)}function Dm(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((r,a)=>{let o=t[a];return r.concat(Array.isArray(o)?o.map(s=>[a,s]):[[a,o]])},[]))}function d4(t,r){let a=Dm(t);return r&&r.forEach((o,s)=>{a.has(s)||r.getAll(s).forEach(c=>{a.append(s,c)})}),a}var yc=null;function f4(){if(yc===null)try{new FormData(document.createElement("form"),0),yc=!1}catch{yc=!0}return yc}var m4=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function cm(t){return t!=null&&!m4.has(t)?(On(!1,`"${t}" is not a valid \`encType\` for \`\`/\`\` and will default to "${kc}"`),null):t}function p4(t,r){let a,o,s,c,f;if(s4(t)){let m=t.getAttribute("action");o=m?kr(m,r):null,a=t.getAttribute("method")||Ac,s=cm(t.getAttribute("enctype"))||kc,c=new FormData(t)}else if(l4(t)||i4(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a `,D=>`${R}-${D.id}`)}const N=x`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${S(n.skinTones,(k,T)=>x`
${k}
`,k=>k)}
${S(n.currentEmojisWithCategories,(k,T)=>x`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,E=(k,T)=>{for(const R of e.querySelectorAll(`[${k}]`))T(R,R.getAttribute(k))};if(p){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(T,R)=>{T.addEventListener(k,o[R])});E("data-ref",(k,T)=>{c[T]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,T)=>{let R=m.get(T);R||m.set(T,R=new WeakSet),R.has(k)||(R.add(k),i[T](k))})}const Ou=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function oP(e){let n=!1,a;const o=new Map,i=new Set;let c;const d=()=>{if(n)return;const h=[...i];i.clear();try{for(const y of h)y()}finally{c=!1,i.size&&(c=!0,Ou(d))}},m=new Proxy({},{get(h,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return h[y]},set(h,y,v){if(h[y]!==v){h[y]=v;const x=o.get(y);if(x){for(const S of x)i.add(S);c||(c=!0,Ou(d))}}return!0}}),p=h=>{const y=()=>{const v=a;a=y;try{return h()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function Tp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{i.disconnect()})),i.observe(e)}}const Rp=[],{assign:eu}=Object;function iP(e,n){const a={},o=new AbortController,i=o.signal,{state:c,createEffect:d}=oP(i),m=new Map;eu(c,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),eu(c,n),eu(c,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Nz,isRtl:!1,currentGroupIndex:0,groups:Cp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{c.currentGroup!==c.groups[c.currentGroupIndex]&&(c.currentGroup=c.groups[c.currentGroupIndex])});const p=W=>{e.getElementById(W).focus()},h=W=>e.getElementById(`emo-${W.id}`),y=(W,ie)=>{a.rootElement.dispatchEvent(new CustomEvent(W,{detail:ie,bubbles:!0,composed:!0}))},v=(W,ie)=>W.id===ie.id,x=(W,ie)=>{const{category:ge,emojis:je}=W,{category:Ae,emojis:tt}=ie;return ge!==Ae?!1:Tp(je,tt,v)},S=W=>{Tp(c.currentEmojis,W,v)||(c.currentEmojis=W)},j=W=>{c.searchMode!==W&&(c.searchMode=W)},C=W=>{Tp(c.currentEmojisWithCategories,W,x)||(c.currentEmojisWithCategories=W)},N=(W,ie)=>ie&&W.skins&&W.skins[ie]||W.unicode,T={labelWithSkin:(W,ie)=>Vz([W.name||N(W,ie),W.annotation,...W.shortcodes||Rp].filter(Boolean)).join(", "),titleForEmoji:W=>W.annotation||(W.shortcodes||Rp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:F,onEmojiClick:_,onNavClick:Z,onNavKeydown:J,onSearchKeydown:$,onSkinToneOptionsClick:V,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ae,onSkinToneOptionsKeyup:ne,onSearchInput:pe},D={calculateEmojiGridStyle:B,updateOnIntersection:H};let P=!0;d(()=>{aP(e,c,T,R,D,a,i,m,P),P=!1}),c.emojiVersion||Ep().then(W=>{W||(c.message=c.i18n.emojiUnsupportedMessage)}),d(()=>{async function W(){let ie=!1;const ge=setTimeout(()=>{ie=!0,c.message=c.i18n.loadingMessage},jz);try{await c.database.ready(),c.databaseLoaded=!0}catch(je){console.error(je),c.message=c.i18n.networkErrorMessage}finally{clearTimeout(ge),ie&&(ie=!1,c.message="")}}c.database&&W()}),d(()=>{c.pickerStyle=` + --num-groups: ${c.groups.length}; + --indicator-opacity: ${c.searchMode?0:1}; + --num-skintones: ${Q1};`}),d(()=>{c.customEmoji&&c.database&&z()}),d(()=>{c.customEmoji&&c.customEmoji.length?c.groups!==vh&&(c.groups=vh):c.groups!==Cp&&(c.currentGroupIndex&&c.currentGroupIndex--,c.groups=Cp)}),d(()=>{async function W(){c.databaseLoaded&&(c.currentSkinTone=await c.database.getPreferredSkinTone())}W()}),d(()=>{c.skinTones=Array(Q1).fill().map((W,ie)=>Pz(c.skinToneEmoji,ie))}),d(()=>{c.skinToneButtonText=c.skinTones[c.currentSkinTone]}),d(()=>{c.skinToneButtonLabel=c.i18n.skinToneLabel.replace("{skinTone}",c.i18n.skinTones[c.currentSkinTone])}),d(()=>{async function W(){const{database:ie}=c,ge=(await Promise.all(kz.map(je=>ie.getEmojiByUnicodeOrName(je)))).filter(Boolean);c.defaultFavoriteEmojis=ge}c.databaseLoaded&&W()});function z(){const{customEmoji:W,database:ie}=c,ge=W||Rp;ie.customEmoji!==ge&&(ie.customEmoji=ge)}d(()=>{async function W(){z();const{database:ie,defaultFavoriteEmojis:ge,numColumns:je}=c,Ae=await ie.getTopFavoriteEmoji(je),tt=await he(D5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));c.currentFavorites=tt}c.databaseLoaded&&c.defaultFavoriteEmojis&&W()});function B(W){Bz(W,i,()=>{{const ie=getComputedStyle(a.rootElement),ge=parseInt(ie.getPropertyValue("--num-columns"),10),je=ie.getPropertyValue("direction")==="rtl";c.numColumns=ge,c.isRtl=je}})}function H(W){sP(W,i,ie=>{for(const{target:ge,isIntersecting:je}of ie)ge.classList.toggle("onscreen",je)})}d(()=>{async function W(){const{searchText:ie,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=c;if(!je)c.currentEmojis=[],c.searchMode=!1;else if(ie.length>=wz){const tt=await O(ie);c.searchText===ie&&(S(tt),j(!0))}else{const{id:tt}=ge;if(tt!==-1||Ae&&Ae.length){const ct=await se(tt);c.currentGroup.id===tt&&(S(ct),j(!1))}}}W()});const Y=()=>{du(()=>Gz(a.tabpanelElement))};d(()=>{const{currentEmojis:W,emojiVersion:ie}=c,ge=W.filter(je=>je.unicode).filter(je=>J1(je)&&!bh.has(je.unicode));if(!ie&&ge.length)S(W),du(()=>Q(ge));else{const je=ie?W:W.filter(fe);S(je),Y()}});function Q(W){Hz(W,a.baselineEmoji,h)?Y():c.currentEmojis=[...c.currentEmojis]}function fe(W){return!W.unicode||!J1(W)||bh.get(W.unicode)}async function de(W){const ie=c.emojiVersion||await Ep();return W.filter(({version:ge})=>!ge||ge<=ie)}async function he(W){return Iz(W,c.emojiVersion||await Ep())}async function se(W){const ie=W===-1?c.customEmoji:await c.database.getEmojiByGroup(W);return he(await de(ie))}async function O(W){return he(await de(await c.database.getEmojiBySearchQuery(W)))}d(()=>{}),d(()=>{function W(){const{searchMode:ge,currentEmojis:je}=c;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const tt of je){const ct=tt.category||"";let kt=Ae.get(ct);kt||(kt=[],Ae.set(ct,kt)),kt.push(tt)}return[...Ae.entries()].map(([tt,ct])=>({category:tt,emojis:ct})).sort((tt,ct)=>c.customCategorySorting(tt.category,ct.category))}const ie=W();C(ie)}),d(()=>{c.activeSearchItemId=c.activeSearchItem!==-1&&c.currentEmojis[c.activeSearchItem].id}),d(()=>{const{rawSearchText:W}=c;_5(()=>{c.searchText=(W||"").trim(),c.activeSearchItem=-1})});function $(W){if(!c.searchMode||!c.currentEmojis.length)return;const ie=ge=>{or(W),c.activeSearchItem=Np(ge,c.activeSearchItem,c.currentEmojis)};switch(W.key){case"ArrowDown":return ie(!1);case"ArrowUp":return ie(!0);case"Enter":if(c.activeSearchItem===-1)c.activeSearchItem=0;else return or(W),M(c.currentEmojis[c.activeSearchItem].id)}}function Z(W){const{target:ie}=W,ge=ie.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",c.rawSearchText="",c.searchText="",c.activeSearchItem=-1,c.currentGroupIndex=c.groups.findIndex(Ae=>Ae.id===je)}function J(W){const{target:ie,key:ge}=W,je=Ae=>{Ae&&(or(W),Ae.focus())};switch(ge){case"ArrowLeft":return je(ie.previousElementSibling);case"ArrowRight":return je(ie.nextElementSibling);case"Home":return je(ie.parentElement.firstElementChild);case"End":return je(ie.parentElement.lastElementChild)}}async function te(W){const ie=await c.database.getEmojiByUnicodeOrName(W),ge=[...c.currentEmojis,...c.currentFavorites].find(Ae=>Ae.id===W),je=ge.unicode&&N(ge,c.currentSkinTone);return await c.database.incrementFavoriteEmojiCount(W),{emoji:ie,skinTone:c.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function M(W){const ie=te(W);y("emoji-click-sync",ie),y("emoji-click",await ie)}function _(W){const{target:ie}=W;if(!ie.classList.contains("emoji"))return;or(W);const ge=ie.id.substring(4);M(ge)}function U(W){c.currentSkinTone=W,c.skinTonePickerExpanded=!1,p("skintone-button"),y("skin-tone-change",{skinTone:W}),c.database.setPreferredSkinTone(W)}function V(W){const{target:{id:ie}}=W,ge=ie&&ie.match(/^skintone-(\d)/);if(!ge)return;or(W);const je=parseInt(ge[1],10);U(je)}function F(W){c.skinTonePickerExpanded=!c.skinTonePickerExpanded,c.activeSkinTone=c.currentSkinTone,c.skinTonePickerExpanded&&(or(W),du(()=>p("skintone-list")))}d(()=>{c.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{c.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):c.skinTonePickerExpandedAfterAnimation=!1});function ae(W){if(!c.skinTonePickerExpanded)return;const ie=async ge=>{or(W),c.activeSkinTone=ge};switch(W.key){case"ArrowUp":return ie(Np(!0,c.activeSkinTone,c.skinTones));case"ArrowDown":return ie(Np(!1,c.activeSkinTone,c.skinTones));case"Home":return ie(0);case"End":return ie(c.skinTones.length-1);case"Enter":return or(W),U(c.activeSkinTone);case"Escape":return or(W),c.skinTonePickerExpanded=!1,p("skintone-button")}}function ne(W){if(c.skinTonePickerExpanded)switch(W.key){case" ":return or(W),U(c.activeSkinTone)}}async function me(W){const{relatedTarget:ie}=W;(!ie||ie.id!=="skintone-list")&&(c.skinTonePickerExpanded=!1)}function pe(W){c.rawSearchText=W.target.value}return{$set(W){eu(c,W)},$destroy(){o.abort()}}}const lP="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",cP="en";var uP={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},dP=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const L5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],fP=`:host{--emoji-font-family:${O5}}`;class Lg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=dP+fP,this.shadowRoot.appendChild(a),this._ctx={locale:cP,dataSource:lP,skinToneEmoji:Ez,customCategorySorting:Tz,customEmoji:null,i18n:uP,emojiVersion:null,...n};for(const o of L5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){s0(this),this._cmp||(this._cmp=iP(this.shadowRoot,this._ctx))}disconnectedCallback(){s0(this),Ou(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(i,c)=>c.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new Sz({locale:n,dataSource:a}))}_dbFlush(){Ou(()=>this._dbCreate())}}const z5={};for(const e of L5)z5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(Lg.prototype,z5);function s0(e){e instanceof Lg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Lg);function mP({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const i=c=>{var p;const d=c.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&e(m)};return o.addEventListener("emoji-click",i),a.appendChild(o),()=>{o.removeEventListener("emoji-click",i),o.remove()}},[e]),l.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const pP=/^<(a?):([^:>]+):(\d{17,20})>$/;function fu(e,n,a=!1){return`${a?"`}function P5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(pP);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function I5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function hP(e,n=[]){const a=P5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(i=>i.id===a.id);if(o)return{kind:"custom",value:fu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(i=>i.id===a.id);if(o&&a.value!==fu(o.name,o.id,o.animated))return{kind:"custom",value:fu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function gP({value:e,guildEmojis:n,size:a="md"}){const o=hP(e,n),i=a==="lg"?"size-10":"size-7",c=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?l.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?l.jsxs("span",{className:"inline-flex items-center gap-3",children:[l.jsx("img",{src:I5(o.id,o.animated),alt:o.name??"custom emoji",className:ce(i,"shrink-0 rounded-md"),loading:"lazy"}),l.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[l.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),l.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):l.jsx("span",{className:ce(c,"leading-none"),title:o.value,children:o.value})}function vP({id:e,label:n,description:a,value:o,onChange:i,readOnly:c}){const[d,m]=f.useState(!1),[p,h]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Y=!1)=>{C(!0),S("");try{const Q=await Ne.getGuildResources(Y);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const T=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Y=N.trim().toLowerCase();return Y?T.filter(Q=>Q.name.toLowerCase().includes(Y)):T},[T,N]),D=String(o??""),P=P5(D);function z(Y){i(Y),m(!1)}function B(Y){i(fu(Y.name,Y.id,Y.animated)),m(!1)}function H(){i("")}return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:e,children:n}),a?l.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,l.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("div",{className:"min-w-0 flex-1",children:l.jsx(gP,{value:o,guildEmojis:T,size:"lg"})}),l.jsxs("div",{className:"flex shrink-0 gap-2",children:[l.jsx(ve,{type:"button",variant:"secondary",size:"sm",disabled:c,onClick:()=>m(!0),children:"Choose emoji"}),D?l.jsx(ve,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:H,children:"Clear"}):null]})]}),l.jsx(gg,{open:d,onOpenChange:m,children:l.jsxs(hd,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[l.jsxs(gd,{className:"space-y-1 border-b border-border px-5 py-4",children:[l.jsx(vd,{children:"Choose emoji"}),l.jsxs(bd,{children:["Server emojis save as"," ",l.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),l.jsxs(v5,{value:p,onValueChange:Y=>h(Y),className:"flex min-h-0 flex-1 flex-col",children:[l.jsxs(Rg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[l.jsx(to,{value:"server",children:"Server"}),l.jsx(to,{value:"unicode",children:"All emojis"})]}),l.jsxs(mh,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[l.jsxs("div",{className:"relative mb-3",children:[l.jsx(ye,{icon:Gu,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Search by name…",value:N,onChange:Y=>E(Y.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?l.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,l.jsx(Sd,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?l.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Y,Q)=>l.jsx(Ve,{className:"aspect-square rounded-lg"},Q))}):x?l.jsxs("div",{className:"space-y-3 p-4 text-center",children:[l.jsx("p",{className:"text-sm text-destructive",children:x}),l.jsx(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?l.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):l.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Y=>{const Q=P.kind==="custom"&&P.id===Y.id;return l.jsx("button",{type:"button",title:`:${Y.name}:`,className:ce("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>B(Y),children:l.jsx("img",{src:Y.url??I5(Y.id,Y.animated),alt:Y.name,className:"size-8 object-contain",loading:"lazy"})},Y.id)})})})]}),l.jsx(mh,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:l.jsx(mP,{onPick:z})})]})]})}),l.jsx(Ue,{value:D,disabled:c,onChange:Y=>i(Y.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const i0="BOT_TOKEN",bP="MODEL_API_KEY";function zg({field:e,value:n,onChange:a,readOnly:o}){const i=e.path.replace(/\./g,"-");if(e.type==="googleFont")return l.jsx(SL,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return l.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[l.jsxs("div",{children:[l.jsx(De,{htmlFor:i,className:"font-medium",children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),l.jsx(dn,{id:i,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(bL,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),l.jsxs(Es,{value:String(n??""),disabled:o,onValueChange:a,children:[l.jsx(lo,{id:i,className:"border-border bg-secondary/30",children:l.jsx(Ns,{placeholder:"Select…"})}),l.jsx(co,{children:e.options.map(d=>l.jsx(Zt,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=cr(String(n??"#000000"));return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsxs("div",{className:"flex gap-2",children:[l.jsx(Ng,{value:d,onChange:a}),l.jsx(Ue,{id:i,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(cr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return l.jsx(vP,{id:i,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return l.jsx(wL,{id:i,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===i0||n===bP||!n?"":"••••••••••••";return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(Ue,{id:i,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(e.placeholder??i0))},className:"border-border bg-secondary/30"})]})}const c="border-border bg-secondary/30";return e.type==="textarea"?l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),l.jsx(Cd,{id:i,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${c}`})]}):l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(Ue,{id:i,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:c})]})}const Ge=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));Ge.displayName="Card";const Ze=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("flex flex-col space-y-1.5 p-6",e),...n}));Ze.displayName="CardHeader";const Qe=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("font-semibold leading-none tracking-tight",e),...n}));Qe.displayName="CardTitle";const ht=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("text-sm text-muted-foreground",e),...n}));ht.displayName="CardDescription";const Fe=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("p-6 pt-0",e),...n}));Fe.displayName="CardContent";const Pg=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("flex items-center p-6 pt-0",e),...n}));Pg.displayName="CardFooter";function l0(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function yP(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Ig(e,n=""){const a=[];for(const[o,i]of Object.entries(e)){const c=n?`${n}.${o}`:o;if(Array.isArray(i)){if(i.length>0&&typeof i[0]=="object"&&i[0]!==null&&!Array.isArray(i[0]))continue;a.push({path:c,label:l0(o),type:"stringList"});continue}if(i&&typeof i=="object"&&Object.keys(i).length>0){a.push(...Ig(i,c));continue}a.push({path:c,label:l0(o),type:yP(o,i)})}return a}function xP(e){const n=Ig(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function fo(e,n){const a=n.split(".");let o=e;for(const i of a){if(o==null||typeof o!="object")return;o=o[i]}return o}function il(e,n,a){const o=n.split("."),i=structuredClone(e);let c=i;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const wP=e=>{switch(e){case"success":return EP;case"info":return kP;case"warning":return NP;case"error":return TP;default:return null}},CP=Array(12).fill(0),jP=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},CP.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),EP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),NP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),kP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),TP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),RP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),AP=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let yh=1;class MP{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...i}=n,c=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:yh++,d=this.toasts.find(p=>p.id===c),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),d?this.toasts=this.toasts.map(p=>p.id===c?(this.publish({...p,...n,id:c,title:o}),{...p,...n,id:c,dismissible:m,title:o}):p):this.addToast({title:o,...i,dismissible:m,id:c}),c},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const i=Promise.resolve(n instanceof Function?n():n);let c=o!==void 0,d;const m=i.then(async h=>{if(d=["resolve",h],ue.isValidElement(h))c=!1,this.create({id:o,type:"default",message:h});else if(OP(h)&&!h.ok){c=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${h.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${h.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(h instanceof Error){c=!1;const v=typeof a.error=="function"?await a.error(h):a.error,x=typeof a.description=="function"?await a.description(h):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){c=!1;const v=typeof a.success=="function"?await a.success(h):a.success,x=typeof a.description=="function"?await a.description(h):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async h=>{if(d=["reject",h],a.error!==void 0){c=!1;const y=typeof a.error=="function"?await a.error(h):a.error,v=typeof a.description=="function"?await a.description(h):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{c&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),p=()=>new Promise((h,y)=>m.then(()=>d[0]==="reject"?y(d[1]):h(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:p}:Object.assign(o,{unwrap:p})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||yh++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const un=new MP,_P=(e,n)=>{const a=(n==null?void 0:n.id)||yh++;return un.addToast({title:e,...n,id:a}),a},OP=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",DP=_P,LP=()=>un.toasts,zP=()=>un.getActiveToasts(),Dr=Object.assign(DP,{success:un.success,info:un.info,warning:un.warning,error:un.error,custom:un.custom,message:un.message,promise:un.promise,dismiss:un.dismiss,loading:un.loading},{getHistory:LP,getToasts:zP});SP("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function tu(e){return e.label!==void 0}const PP=3,IP="24px",$P="16px",c0=4e3,BP=356,UP=14,HP=45,VP=200;function sr(...e){return e.filter(Boolean).join(" ")}function GP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const FP=e=>{var n,a,o,i,c,d,m,p,h;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:T,removeToast:R,defaultRichColors:D,closeButton:P,style:z,cancelButtonStyle:B,actionButtonStyle:H,className:Y="",descriptionClassName:Q="",duration:fe,position:de,gap:he,expandByDefault:se,classNames:O,icons:$,closeButtonAriaLabel:Z="Close toast"}=e,[J,te]=ue.useState(null),[M,_]=ue.useState(null),[U,V]=ue.useState(!1),[F,ae]=ue.useState(!1),[ne,me]=ue.useState(!1),[pe,W]=ue.useState(!1),[ie,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[tt,ct]=ue.useState(0),kt=ue.useRef(v.duration||fe||c0),Ra=ue.useRef(null),Tt=ue.useRef(null),Hs=E===0,Vs=E+1<=C,Wt=v.type,Vr=v.dismissible!==!1,qt=v.className||"",_d=v.descriptionClassName||"",Aa=ue.useMemo(()=>N.findIndex(Re=>Re.toastId===v.id)||0,[N,v.id]),Tl=ue.useMemo(()=>{var Re;return(Re=v.closeButton)!=null?Re:P},[v.closeButton,P]),Ma=ue.useMemo(()=>v.duration||fe||c0,[v.duration,fe]),Gs=ue.useRef(0),mr=ue.useRef(0),Rl=ue.useRef(0),Gr=ue.useRef(null),[_a,Kt]=de.split("-"),Un=ue.useMemo(()=>N.reduce((Re,ut,Rt)=>Rt>=Aa?Re:Re+ut.height,0),[N,Aa]),Vt=AP(),Od=v.invert||y,Fs=Wt==="loading";mr.current=ue.useMemo(()=>Aa*he+Un,[Aa,Un]),ue.useEffect(()=>{kt.current=Ma},[Ma]),ue.useEffect(()=>{V(!0)},[]),ue.useEffect(()=>{const Re=Tt.current;if(Re){const ut=Re.getBoundingClientRect().height;return ct(ut),j(Rt=>[{toastId:v.id,height:ut,position:v.position},...Rt]),()=>j(Rt=>Rt.filter(Gt=>Gt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!U)return;const Re=Tt.current,ut=Re.style.height;Re.style.height="auto";const Rt=Re.getBoundingClientRect().height;Re.style.height=ut,ct(Rt),j(Gt=>Gt.find(mt=>mt.toastId===v.id)?Gt.map(mt=>mt.toastId===v.id?{...mt,height:Rt}:mt):[{toastId:v.id,height:Rt,position:v.position},...Gt])},[U,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Qn=ue.useCallback(()=>{ae(!0),Ae(mr.current),j(Re=>Re.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},VP)},[v,R,j,mr]);ue.useEffect(()=>{if(v.promise&&Wt==="loading"||v.duration===1/0||v.type==="loading")return;let Re;return T||S||Vt?(()=>{if(Rl.current{kt.current!==1/0&&(Gs.current=new Date().getTime(),Re=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Qn()},kt.current))})(),()=>clearTimeout(Re)},[T,S,v,Wt,Vt,Qn]),ue.useEffect(()=>{v.delete&&(Qn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Qn,v.delete]);function yo(){var Re;if($!=null&&$.loading){var ut;return ue.createElement("div",{className:sr(O==null?void 0:O.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Wt==="loading"},$.loading)}return ue.createElement(jP,{className:sr(O==null?void 0:O.loader,v==null||(Re=v.classNames)==null?void 0:Re.loader),visible:Wt==="loading"})}const xo=v.icon||($==null?void 0:$[Wt])||wP(Wt);var Oa,Jn;return ue.createElement("li",{tabIndex:0,ref:Tt,className:sr(Y,qt,O==null?void 0:O.toast,v==null||(n=v.classNames)==null?void 0:n.toast,O==null?void 0:O.default,O==null?void 0:O[Wt],v==null||(a=v.classNames)==null?void 0:a[Wt]),"data-sonner-toast":"","data-rich-colors":(Oa=v.richColors)!=null?Oa:D,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":U,"data-promise":!!v.promise,"data-swiped":ie,"data-removed":F,"data-visible":Vs,"data-y-position":_a,"data-x-position":Kt,"data-index":E,"data-front":Hs,"data-swiping":ne,"data-dismissible":Vr,"data-type":Wt,"data-invert":Od,"data-swipe-out":pe,"data-swipe-direction":M,"data-expanded":!!(T||se&&U),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${F?je:mr.current}px`,"--initial-height":se?"auto":`${tt}px`,...z,...v.style},onDragEnd:()=>{me(!1),te(null),Gr.current=null},onPointerDown:Re=>{Re.button!==2&&(Fs||!Vr||(Ra.current=new Date,Ae(mr.current),Re.target.setPointerCapture(Re.pointerId),Re.target.tagName!=="BUTTON"&&(me(!0),Gr.current={x:Re.clientX,y:Re.clientY})))},onPointerUp:()=>{var Re,ut,Rt;if(pe||!Vr)return;Gr.current=null;const Gt=Number(((Re=Tt.current)==null?void 0:Re.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Fr=Number(((ut=Tt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((Rt=Ra.current)==null?void 0:Rt.getTime()),Jt=J==="x"?Gt:Fr,Da=Math.abs(Jt)/mt;if(Math.abs(Jt)>=HP||Da>.11){Ae(mr.current),v.onDismiss==null||v.onDismiss.call(v,v),_(J==="x"?Gt>0?"right":"left":Fr>0?"down":"up"),Qn(),W(!0);return}else{var en,tn;(en=Tt.current)==null||en.style.setProperty("--swipe-amount-x","0px"),(tn=Tt.current)==null||tn.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),te(null)},onPointerMove:Re=>{var ut,Rt,Gt;if(!Gr.current||!Vr||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Re.clientY-Gr.current.y,Jt=Re.clientX-Gr.current.x;var Da;const en=(Da=e.swipeDirections)!=null?Da:GP(de);!J&&(Math.abs(Jt)>1||Math.abs(mt)>1)&&te(Math.abs(Jt)>Math.abs(mt)?"x":"y");let tn={x:0,y:0};const So=Hn=>1/(1.5+Math.abs(Hn)/20);if(J==="y"){if(en.includes("top")||en.includes("bottom"))if(en.includes("top")&&mt<0||en.includes("bottom")&&mt>0)tn.y=mt;else{const Hn=mt*So(mt);tn.y=Math.abs(Hn)0)tn.x=Jt;else{const Hn=Jt*So(Jt);tn.x=Math.abs(Hn)0||Math.abs(tn.y)>0)&&ge(!0),(Rt=Tt.current)==null||Rt.style.setProperty("--swipe-amount-x",`${tn.x}px`),(Gt=Tt.current)==null||Gt.style.setProperty("--swipe-amount-y",`${tn.y}px`)}},Tl&&!v.jsx&&Wt!=="loading"?ue.createElement("button",{"aria-label":Z,"data-disabled":Fs,"data-close-button":!0,onClick:Fs||!Vr?()=>{}:()=>{Qn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:sr(O==null?void 0:O.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Jn=$==null?void 0:$.close)!=null?Jn:RP):null,(Wt||v.icon||v.promise)&&v.icon!==null&&(($==null?void 0:$[Wt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:sr(O==null?void 0:O.icon,v==null||(i=v.classNames)==null?void 0:i.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||yo():null,v.type!=="loading"?xo:null):null,ue.createElement("div",{"data-content":"",className:sr(O==null?void 0:O.content,v==null||(c=v.classNames)==null?void 0:c.content)},ue.createElement("div",{"data-title":"",className:sr(O==null?void 0:O.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:sr(Q,_d,O==null?void 0:O.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&tu(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||B,onClick:Re=>{tu(v.cancel)&&Vr&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Re),Qn())},className:sr(O==null?void 0:O.cancelButton,v==null||(p=v.classNames)==null?void 0:p.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&tu(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||H,onClick:Re=>{tu(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Re),!Re.defaultPrevented&&Qn())},className:sr(O==null?void 0:O.actionButton,v==null||(h=v.classNames)==null?void 0:h.actionButton)},v.action.label):null)};function u0(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function YP(e,n){const a={};return[e,n].forEach((o,i)=>{const c=i===1,d=c?"--mobile-offset":"--offset",m=c?$P:IP;function p(h){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof h=="number"?`${h}px`:h})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(h=>{o[h]===void 0?a[`${d}-${h}`]=m:a[`${d}-${h}`]=typeof o[h]=="number"?`${o[h]}px`:o[h]}):p(m)}),a}const WP=ue.forwardRef(function(n,a){const{id:o,invert:i,position:c="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:h,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=PP,toastOptions:E,dir:k=u0(),gap:T=UP,icons:R,containerAriaLabel:D="Notifications"}=n,[P,z]=ue.useState([]),B=ue.useMemo(()=>o?P.filter(U=>U.toasterId===o):P.filter(U=>!U.toasterId),[P,o]),H=ue.useMemo(()=>Array.from(new Set([c].concat(B.filter(U=>U.position).map(U=>U.position)))),[B,c]),[Y,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[he,se]=ue.useState(!1),[O,$]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),Z=ue.useRef(null),J=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),te=ue.useRef(null),M=ue.useRef(!1),_=ue.useCallback(U=>{z(V=>{var F;return(F=V.find(ae=>ae.id===U.id))!=null&&F.delete||un.dismiss(U.id),V.filter(({id:ae})=>ae!==U.id)})},[]);return ue.useEffect(()=>un.subscribe(U=>{if(U.dismiss){requestAnimationFrame(()=>{z(V=>V.map(F=>F.id===U.id?{...F,delete:!0}:F))});return}setTimeout(()=>{H0.flushSync(()=>{z(V=>{const F=V.findIndex(ae=>ae.id===U.id);return F!==-1?[...V.slice(0,F),{...V[F],...U},...V.slice(F+1)]:[U,...V]})})})}),[P]),ue.useEffect(()=>{if(x!=="system"){$(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?$("dark"):$("light")),typeof window>"u")return;const U=window.matchMedia("(prefers-color-scheme: dark)");try{U.addEventListener("change",({matches:V})=>{$(V?"dark":"light")})}catch{U.addListener(({matches:F})=>{try{$(F?"dark":"light")}catch(ae){console.error(ae)}})}},[x]),ue.useEffect(()=>{P.length<=1&&de(!1)},[P]),ue.useEffect(()=>{const U=V=>{var F;if(d.every(me=>V[me]||V.code===me)){var ne;de(!0),(ne=Z.current)==null||ne.focus()}V.code==="Escape"&&(document.activeElement===Z.current||(F=Z.current)!=null&&F.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[d]),ue.useEffect(()=>{if(Z.current)return()=>{te.current&&(te.current.focus({preventScroll:!0}),te.current=null,M.current=!1)}},[Z.current]),ue.createElement("section",{ref:a,"aria-label":`${D} ${J}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},H.map((U,V)=>{var F;const[ae,ne]=U.split("-");return B.length?ue.createElement("ol",{key:U,dir:k==="auto"?u0():k,tabIndex:-1,ref:Z,className:h,"data-sonner-toaster":!0,"data-sonner-theme":O,"data-y-position":ae,"data-x-position":ne,style:{"--front-toast-height":`${((F=Y[0])==null?void 0:F.height)||0}px`,"--width":`${BP}px`,"--gap":`${T}px`,...C,...YP(y,v)},onBlur:me=>{M.current&&!me.currentTarget.contains(me.relatedTarget)&&(M.current=!1,te.current&&(te.current.focus({preventScroll:!0}),te.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||M.current||(M.current=!0,te.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{he||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||se(!0)},onPointerUp:()=>se(!1)},B.filter(me=>!me.position&&V===0||me.position===U).map((me,pe)=>{var W,ie;return ue.createElement(FP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(W=E==null?void 0:E.duration)!=null?W:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:i,visibleToasts:N,closeButton:(ie=E==null?void 0:E.closeButton)!=null?ie:p,interacting:he,position:U,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:_,toasts:B.filter(ge=>ge.position==me.position),heights:Y.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:T,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function mu(e){const n=Dr.loading("Saving changes…");try{const a=await e();if(Dr.success("Changes saved",{id:n}),a.botRestart){const o=Dr.loading("Restarting bot…");a.botRestart.success?Dr.success("Bot started",{id:o}):Dr.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Dr.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function qP({filename:e}){const{canEditConfig:n}=Lt(),a=!n("supportbot"),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{p(!0),x(""),j("");try{const D=(await Ne.getAddonConfigJson(e)).data??{};i(D),d(structuredClone(D))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?xP(o):null;function E(R,D){i(P=>P&&il(P,R,D))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await mu(()=>Ne.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-24 w-full rounded-xl"}),l.jsx(Ve,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load"})});const T=c&&JSON.stringify(o)!==JSON.stringify(c);return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,l.jsx(ve,{variant:"outline",size:"sm",onClick:C,disabled:m||h,children:"Reload"}),a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:k,disabled:h||!T,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]}),v?l.jsxs(Ye,{variant:"destructive",children:[l.jsx(ye,{icon:_h,size:18}),l.jsx(We,{children:v})]}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,N.map(R=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:R.title}),R.description?l.jsx(ht,{children:R.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(D=>l.jsx("div",{className:D.type==="textarea"||D.type==="stringList"?"sm:col-span-2":"",children:l.jsx(zg,{field:D,value:fo(o,D.path),readOnly:a,onChange:P=>E(D.path,P)})},D.path))})]},R.title))]})}function KP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function XP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=Ig(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const i=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",p=i.get(m)??[];p.push(d),i.set(m,p)}const c=[...i.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:KP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((p,h)=>p.path.localeCompare(h.path))}));return[...e,...c]}function d0(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,o=Array(n);a=e.length?e.apply(this,i):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};nu.initial(e),nu.handler(n);var a={current:e},o=Vi(xI)(a,n),i=Vi(yI)(a),c=Vi(nu.changes)(e),d=Vi(bI)(a);function m(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(y){return y};return nu.selector(h),h(a.current)}function p(h){lI(o,i,c,d)(h)}return[m,p]}function bI(e,n){return ll(n)?n(e.current):n}function yI(e,n){return e.current=h0(h0({},e.current),n),n}function xI(e,n,a){return ll(n)?n(e.current):Object.keys(a).forEach(function(o){var i;return(i=n[o])===null||i===void 0?void 0:i.call(n,e.current[o])}),a}var SI={create:vI},wI={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function CI(e){return function n(){for(var a=this,o=arguments.length,i=new Array(o),c=0;c=e.length?e.apply(this,i):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:e,n)}var xn=KI;function qi(){}function ms(e,n,a,o){return XI(e,o)||ZI(e,n,a,o)}function XI(e,n){return e.editor.getModel(Y5(e,n))}function ZI(e,n,a,o){return e.editor.createModel(n,a,o?Y5(e,o):void 0)}function Y5(e,n){return e.Uri.parse(n)}function QI({original:e,modified:n,language:a,originalLanguage:o,modifiedLanguage:i,originalModelPath:c,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:h="light",loading:y="Loading...",options:v={},height:x="100%",width:S="100%",className:j,wrapperProps:C={},beforeMount:N=qi,onMount:E=qi}){let[k,T]=f.useState(!1),[R,D]=f.useState(!0),P=f.useRef(null),z=f.useRef(null),B=f.useRef(null),H=f.useRef(E),Y=f.useRef(N),Q=f.useRef(!1);F5(()=>{let se=V5.init();return se.then(O=>(z.current=O)&&D(!1)).catch(O=>(O==null?void 0:O.type)!=="cancelation"&&console.error("Monaco initialization: error:",O)),()=>P.current?he():se.cancel()}),xn(()=>{if(P.current&&z.current){let se=P.current.getOriginalEditor(),O=ms(z.current,e||"",o||a||"text",c||"");O!==se.getModel()&&se.setModel(O)}},[c],k),xn(()=>{if(P.current&&z.current){let se=P.current.getModifiedEditor(),O=ms(z.current,n||"",i||a||"text",d||"");O!==se.getModel()&&se.setModel(O)}},[d],k),xn(()=>{let se=P.current.getModifiedEditor();se.getOption(z.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],k),xn(()=>{var se,O;(O=(se=P.current)==null?void 0:se.getModel())==null||O.original.setValue(e||"")},[e],k),xn(()=>{let{original:se,modified:O}=P.current.getModel();z.current.editor.setModelLanguage(se,o||a||"text"),z.current.editor.setModelLanguage(O,i||a||"text")},[a,o,i],k),xn(()=>{var se;(se=z.current)==null||se.editor.setTheme(h)},[h],k),xn(()=>{var se;(se=P.current)==null||se.updateOptions(v)},[v],k);let fe=f.useCallback(()=>{var $;if(!z.current)return;Y.current(z.current);let se=ms(z.current,e||"",o||a||"text",c||""),O=ms(z.current,n||"",i||a||"text",d||"");($=P.current)==null||$.setModel({original:se,modified:O})},[a,n,i,e,o,c,d]),de=f.useCallback(()=>{var se;!Q.current&&B.current&&(P.current=z.current.editor.createDiffEditor(B.current,{automaticLayout:!0,...v}),fe(),(se=z.current)==null||se.editor.setTheme(h),T(!0),Q.current=!0)},[v,h,fe]);f.useEffect(()=>{k&&H.current(P.current,z.current)},[k]),f.useEffect(()=>{!R&&!k&&de()},[R,k,de]);function he(){var O,$,Z,J;let se=(O=P.current)==null?void 0:O.getModel();m||(($=se==null?void 0:se.original)==null||$.dispose()),p||((Z=se==null?void 0:se.modified)==null||Z.dispose()),(J=P.current)==null||J.dispose()}return ue.createElement(G5,{width:S,height:x,isEditorReady:k,loading:y,_ref:B,className:j,wrapperProps:C})}var JI=QI;f.memo(JI);function e$(e){let n=f.useRef();return f.useEffect(()=>{n.current=e},[e]),n.current}var t$=e$,ru=new Map;function n$({defaultValue:e,defaultLanguage:n,defaultPath:a,value:o,language:i,path:c,theme:d="light",line:m,loading:p="Loading...",options:h={},overrideServices:y={},saveViewState:v=!0,keepCurrentModel:x=!1,width:S="100%",height:j="100%",className:C,wrapperProps:N={},beforeMount:E=qi,onMount:k=qi,onChange:T,onValidate:R=qi}){let[D,P]=f.useState(!1),[z,B]=f.useState(!0),H=f.useRef(null),Y=f.useRef(null),Q=f.useRef(null),fe=f.useRef(k),de=f.useRef(E),he=f.useRef(),se=f.useRef(o),O=t$(c),$=f.useRef(!1),Z=f.useRef(!1);F5(()=>{let M=V5.init();return M.then(_=>(H.current=_)&&B(!1)).catch(_=>(_==null?void 0:_.type)!=="cancelation"&&console.error("Monaco initialization: error:",_)),()=>Y.current?te():M.cancel()}),xn(()=>{var _,U,V,F;let M=ms(H.current,e||o||"",n||i||"",c||a||"");M!==((_=Y.current)==null?void 0:_.getModel())&&(v&&ru.set(O,(U=Y.current)==null?void 0:U.saveViewState()),(V=Y.current)==null||V.setModel(M),v&&((F=Y.current)==null||F.restoreViewState(ru.get(c))))},[c],D),xn(()=>{var M;(M=Y.current)==null||M.updateOptions(h)},[h],D),xn(()=>{!Y.current||o===void 0||(Y.current.getOption(H.current.editor.EditorOption.readOnly)?Y.current.setValue(o):o!==Y.current.getValue()&&(Z.current=!0,Y.current.executeEdits("",[{range:Y.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),Y.current.pushUndoStop(),Z.current=!1))},[o],D),xn(()=>{var _,U;let M=(_=Y.current)==null?void 0:_.getModel();M&&i&&((U=H.current)==null||U.editor.setModelLanguage(M,i))},[i],D),xn(()=>{var M;m!==void 0&&((M=Y.current)==null||M.revealLine(m))},[m],D),xn(()=>{var M;(M=H.current)==null||M.editor.setTheme(d)},[d],D);let J=f.useCallback(()=>{var M;if(!(!Q.current||!H.current)&&!$.current){de.current(H.current);let _=c||a,U=ms(H.current,o||e||"",n||i||"",_||"");Y.current=(M=H.current)==null?void 0:M.editor.create(Q.current,{model:U,automaticLayout:!0,...h},y),v&&Y.current.restoreViewState(ru.get(_)),H.current.editor.setTheme(d),m!==void 0&&Y.current.revealLine(m),P(!0),$.current=!0}},[e,n,a,o,i,c,h,y,v,d,m]);f.useEffect(()=>{D&&fe.current(Y.current,H.current)},[D]),f.useEffect(()=>{!z&&!D&&J()},[z,D,J]),se.current=o,f.useEffect(()=>{var M,_;D&&T&&((M=he.current)==null||M.dispose(),he.current=(_=Y.current)==null?void 0:_.onDidChangeModelContent(U=>{Z.current||T(Y.current.getValue(),U)}))},[D,T]),f.useEffect(()=>{if(D){let M=H.current.editor.onDidChangeMarkers(_=>{var V;let U=(V=Y.current.getModel())==null?void 0:V.uri;if(U&&_.find(F=>F.path===U.path)){let F=H.current.editor.getModelMarkers({resource:U});R==null||R(F)}});return()=>{M==null||M.dispose()}}return()=>{}},[D,R]);function te(){var M,_;(M=he.current)==null||M.dispose(),x?v&&ru.set(c,Y.current.saveViewState()):(_=Y.current.getModel())==null||_.dispose(),Y.current.dispose()}return ue.createElement(G5,{width:S,height:j,isEditorReady:D,loading:p,_ref:Q,className:C,wrapperProps:N})}var r$=n$,a$=f.memo(r$),o$=a$;function s$(e){return e!==null&&typeof e=="object"&&"Command"in e}function i$(e){return Object.entries(e).filter(([,n])=>s$(n)).map(([n,a])=>({key:n,...a}))}function l$({data:e,onChange:n}){const a=i$(e);function o(i,c){const d=e[i];n({...e,[i]:{...d,...c}})}return a.length===0?l.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(i=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[l.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:l.jsx(ye,{icon:xa,size:18})}),l.jsx(Qe,{className:"text-base",children:i.key})]}),l.jsxs(Fe,{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx(De,{htmlFor:`${i.key}-enabled`,children:"Enabled"}),l.jsx(dn,{id:`${i.key}-enabled`,checked:i.Enabled!==!1,onCheckedChange:c=>o(i.key,{Enabled:c})})]}),l.jsxs("div",{className:"space-y-1.5",children:[l.jsx(De,{children:"Slash command"}),l.jsx(Ue,{value:i.Command??"",onChange:c=>o(i.key,{Command:c.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),l.jsxs("div",{className:"space-y-1.5",children:[l.jsx(De,{children:"Description"}),l.jsx(Ue,{value:i.Description??"",onChange:c=>o(i.key,{Description:c.target.value}),className:"border-border bg-secondary/30"})]})]})]},i.key))})}function c$(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=fo(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=il(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=fo(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=il(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function u$(e,n,a,o){const i={};for(const c of n)for(const d of c.fields){const m=fo(a,d.path),p=fo(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(i[`${e}:${d.path}`]=m)}return i}function d$({configFile:e}){const{canEditConfig:n}=Lt(),a=!n(e),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[T,R]=f.useState(""),[D]=$u(),[P,z]=f.useState(()=>D.get("tab")||null),B=C_(e),H=f.useMemo(()=>!B||B==="commands"||!o?B:XP(B,o),[B,o]);f.useEffect(()=>{var $;if(H&&H!=="commands"){const Z=D.get("tab");if(Z&&H.find(J=>J.title.toLowerCase()===Z.toLowerCase())){const J=H.find(te=>te.title.toLowerCase()===Z.toLowerCase());J&&J.title!==P&&z(J.title)}else(!P||!H.find(J=>J.title===P))&&z((($=H[0])==null?void 0:$.title)||null)}},[H,P,D]);const Y=f.useCallback(async()=>{p(!0),x(""),j("");try{const Z=(await Ne.getConfigJson(e)).data??{},J=c$(e,Z);i(J),d(J);const M=(await Ne.getConfigRaw(e)).data??"",_=m8(M,e);k(_),R(_)}catch($){x($ instanceof Error?$.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{Y()},[Y]);function Q($,Z){i(J=>J&&il(J,$,Z))}async function fe(){if(!(a||E===T)){y(!0),x(""),j("");try{const $=await mu(()=>Ne.saveConfigRaw(e,E));j($.message||"Config saved."),await Y()}catch($){x($ instanceof Error?$.message:"Save failed")}finally{y(!1)}}}async function de(){if(!(a||!o||!c)){if(C==="yaml"){await fe();return}y(!0),x(""),j("");try{if(B==="commands"){const $={};for(const J of Object.keys(o))JSON.stringify(o[J])!==JSON.stringify(c[J])&&($[`${e}:${J}`]=o[J]);if(Object.keys($).length===0){j("No changes to save.");return}const Z=await mu(()=>Ne.updateConfigFields($));j(Z.message||"")}else if(H&&H!=="commands"){const $=u$(e,H,o,c);if(Object.keys($).length===0){j("No changes to save.");return}const Z=await mu(()=>Ne.updateConfigFields($));j(Z.message||"")}await Y()}catch($){x($ instanceof Error?$.message:"Save failed")}finally{y(!1)}}}if(B===null)return l.jsx(Ye,{children:l.jsx(We,{children:"No visual editor available for this file."})});if(m)return l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-24 w-full rounded-xl"}),l.jsx(Ve,{className:"h-48 w-full rounded-xl"})]});if(!o)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load"})});const he=c&&JSON.stringify(o)!==JSON.stringify(c),O=C==="yaml"?E!==T:he;return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsx(ve,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),l.jsx(ve,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[O?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,l.jsx(ve,{variant:"outline",size:"sm",onClick:Y,disabled:m||h,children:"Reload"}),a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:de,disabled:h||!O,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]})]}),v?l.jsxs(Ye,{variant:"destructive",children:[l.jsx(ye,{icon:_h,size:18}),l.jsx(We,{children:v})]}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,C==="yaml"?l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:"Raw YAML"}),l.jsx(ht,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),l.jsx(Fe,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:l.jsx(o$,{height:"100%",language:"yaml",theme:"vs-dark",value:E,onChange:$=>k($||""),options:{readOnly:a,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):B==="commands"?l.jsx(l$,{data:o,onChange:$=>i($)}):H&&H!=="commands"?l.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[l.jsx("nav",{className:"flex flex-col gap-1",children:H.map($=>l.jsx("button",{onClick:()=>z($.title),className:ce("text-left px-3 py-2 text-sm rounded-md transition-colors",P===$.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:$.title},$.title))}),l.jsx("div",{className:"min-w-0",children:H.filter($=>$.title===P).map($=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:$.title}),$.description?l.jsx(ht,{children:$.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:$.fields.map(Z=>l.jsx("div",{className:Z.type==="textarea"||Z.type==="stringList"?"sm:col-span-2":"",children:l.jsx(zg,{field:Z,value:fo(o,Z.path),readOnly:a,onChange:J=>Q(Z.path,J)})},Z.path))})]},$.title))})]}):null]})}const f$=Ne.listConfigs(),m$={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function p$(){var T,R;const{permissions:e,canViewConfig:n}=Lt(),{files:a}=t2(),[o,i]=$u(),c=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>f$.filter(D=>n(D)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),h=f.useMemo(()=>[...m,...p.map(D=>Gi(D))],[m,p]),y=h[0]??"",[v,x]=f.useState(()=>c&&h.includes(c)?c:y);if(f.useEffect(()=>{c&&h.includes(c)?x(c):h.includes(v)||(x(y),y&&i({file:y}))},[c,h,v,y,i]),h.length===0)return l.jsx(Lr,{to:Bh(e),replace:!0});const S=S8(v),j=(S==null?void 0:S.type)==="addon",C=j?S.file:null,N=j?n2(C):m$[v]??"Configuration",E=j?!!((T=e==null?void 0:e.configs.supportbot)!=null&&T.edit):e?!!((R=e.configs[v])!=null&&R.edit):!1,k=j?C:`${v}.yml`;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:N}),l.jsx("p",{className:"text-muted-foreground",children:E?`Edit ${k} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${k} — you do not have permission to save changes.`})]}),l.jsx("div",{className:"mt-6",children:j&&C?l.jsx(qP,{filename:C},C):l.jsx(d$,{configFile:v},v)})]})}const h$={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function g$(e){return e?h$[e]||"Sign-in failed. Please try again.":""}function v$(){const{branding:e}=Fu(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Lt(),[i]=$u(),c=f.useMemo(()=>g$(i.get("error")),[i]);return!a&&n?l.jsx(Lr,{to:"/",replace:!0}):l.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:l.jsxs(Ge,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[l.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),l.jsxs(Ze,{className:"space-y-6 pt-10 pb-4 text-center",children:[l.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:l.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),l.jsxs("div",{children:[l.jsx(Qe,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:e.title||"SupportBot"}),l.jsx(ht,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),l.jsxs(Fe,{className:"space-y-6 pb-10",children:[l.jsxs("div",{className:"text-center space-y-1",children:[l.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),l.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",l.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),c?l.jsx(Ye,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:l.jsx(We,{className:"font-medium",children:c})}):null,l.jsxs(ve,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[l.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),l.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[l.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:l.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const bs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:Dh},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:u8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:Xx},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:Vu},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:Pp},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:Xx}];function b$(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function y$({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:i}){return l.jsx("div",{className:"min-h-svh bg-background",children:l.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[l.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?l.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):l.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:l.jsx(ye,{icon:Dh,size:24})}),l.jsxs("div",{children:[l.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),l.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),i]})})}function x$({currentIndex:e,validation:n}){const a=(e+1)/bs.length*100;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[l.jsxs("span",{children:["Step ",e+1," of ",bs.length]}),l.jsxs("span",{children:[Math.round(a),"%"]})]}),l.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:l.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),l.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:bs.map((o,i)=>{var h;const c=b$(o.id),d=(h=n[c])==null?void 0:h.ok,m=i===e,p=il.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx(ye,{icon:Bu,size:14}),o.globalName||o.username,l.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?l.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:e.error})}):null}function w$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",l.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",l.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"botToken",children:"Bot token"}),l.jsx(Ue,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:c=>n({...e,botToken:c.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.botToken}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:i,children:o?"Checking with Discord…":"Verify bot token"})})]})}function C$({values:e,setValues:n,validation:a,validating:o,onValidate:i,onGenerate:c}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"secretKey",children:"Session secret"}),l.jsx(Ue,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.secretKey}),l.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[l.jsx(ve,{type:"button",variant:"outline",onClick:c,children:"Generate secure secret"}),l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:i,children:o?"Checking…":"Validate"})]})]})}function j$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",l.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{htmlFor:"clientId",children:"Client ID"}),l.jsx(Ue,{id:"clientId",value:e.clientId,onChange:c=>n({...e,clientId:c.target.value}),className:"h-11 font-mono text-sm"})]}),l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{htmlFor:"clientSecret",children:"Client Secret"}),l.jsx(Ue,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:c=>n({...e,clientSecret:c.target.value}),className:"h-11 font-mono text-sm"})]})]}),l.jsx(Us,{result:a.oauth}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:i,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function E$({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",l.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"redirectUri",children:"Redirect URI"}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(Ue,{id:"redirectUri",value:e.redirectUri,onChange:i=>n({...e,redirectUri:i.target.value}),className:"h-11 flex-1 font-mono text-xs"}),l.jsx(ve,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:l.jsx(ye,{icon:Y0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?l.jsx(Us,{result:a.redirectUri}):l.jsx(Ye,{className:"border-border bg-secondary",children:l.jsx(We,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function N$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",l.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",l.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"owners",children:"Owner user IDs"}),l.jsx(Cd,{id:"owners",value:e.ownerUserIds,onChange:c=>n({...e,ownerUserIds:c.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),l.jsx(Us,{result:a.owners}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:i,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function k$({onContinue:e}){return l.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:l.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[l.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:l.jsx(ye,{icon:Bu,size:40})}),l.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),l.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",l.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),l.jsx(Ye,{className:"mt-6 text-left",children:l.jsx(We,{children:"After restarting, sign in with Discord to open the dashboard."})}),l.jsx(ve,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function T$({currentIndex:e,validating:n,saving:a,onBack:o,onNext:i,onFinish:c}){const d=e===bs.length-1;return l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[l.jsxs(ve,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[l.jsx(ye,{icon:G0,size:18,className:"mr-1"}),"Back"]}),l.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?l.jsx(ve,{type:"button",size:"lg",disabled:a||n,onClick:c,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):l.jsxs(ve,{type:"button",size:"lg",disabled:n||a,onClick:i,children:["Continue",l.jsx(ye,{icon:Oh,size:18,className:"ml-1"})]})})]})}function R$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",l.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),l.jsx(Ue,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:e.emeraldApiKey,onChange:c=>n({...e,emeraldApiKey:c.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.emeraldApi}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o,onClick:i,children:o?"Checking…":e.emeraldApiKey?"Verify key":"Skip step"})})]})}function A$(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function M$(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function v0(e){return e==="oauth"?"oauth":e==="owners"?"owners":e==="emeraldApi"?"emeraldApi":e}function _$(){const e=mo(),{branding:n}=Fu(),{loading:a,error:o,refresh:i,status:c}=GC(),[d,m]=f.useState(0),[p,h]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,T]=f.useState(!1),R=bs[d];f.useEffect(()=>{c!=null&&c.suggestedRedirectUri&&!p.redirectUri&&h(Q=>({...Q,redirectUri:c.suggestedRedirectUri}))},[c==null?void 0:c.suggestedRedirectUri,p.redirectUri]);const D=f.useMemo(()=>({botToken:p.botToken,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:M$(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function P(){S(!0),E("");try{const Q=await Ne.validateSetup(D);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function z(){var de,he;const Q=v0(R.id),fe=await P();return!!((he=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&he.ok)}async function B(){const Q=v0(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await z()||m(de=>Math.min(de+1,bs.length-1))}async function H(){C(!0),E("");try{const Q=await P();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await Ne.completeSetup(D),T(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Y(){const Q={values:p,setValues:h,validation:y,validating:x};switch(R.id){case"botToken":return l.jsx(w$,{...Q,onValidate:()=>void z()});case"secretKey":return l.jsx(C$,{...Q,onGenerate:()=>h(fe=>({...fe,secretKey:A$()})),onValidate:()=>void z()});case"oauth":return l.jsx(j$,{...Q,onValidate:()=>void z()});case"redirectUri":return l.jsx(E$,{values:p,setValues:h,validation:y});case"owners":return l.jsx(N$,{...Q,onValidate:()=>void z()});case"emeraldApi":return l.jsx(R$,{...Q,onValidate:()=>void z()})}}return a?l.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:l.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[l.jsx(Ve,{className:"h-14 w-64"}),l.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[l.jsx(Ve,{className:"hidden h-80 lg:block"}),l.jsx(Ve,{className:"h-[520px] rounded-2xl"})]})]})}):l.jsxs(y$,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?l.jsx(Ye,{variant:"destructive",className:"mb-6",children:l.jsx(We,{children:o})}):null,N?l.jsx(Ye,{variant:"destructive",className:"mb-6",children:l.jsx(We,{children:N})}):null,k?l.jsx(k$,{onContinue:async()=>{await i(),e("/login",{replace:!0})}}):l.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[l.jsx(x$,{currentIndex:d,validation:y}),l.jsx(S$,{step:R,footer:l.jsx(T$,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void B(),onFinish:()=>void H()}),children:Y()})]})]})}const O$={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function D$({title:e,icon:n,href:a,badge:o="Configured",status:i="done"}){return l.jsxs(_t,{to:a,className:ce("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[l.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:l.jsx(ye,{icon:n,size:20})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("p",{className:"truncate font-semibold",children:e}),l.jsx("span",{className:ce("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",O$[i]),children:o})]})]})}function L$({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:i="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),p=d-m/100*d;return l.jsxs("div",{className:ce("relative inline-flex",a),children:[l.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[l.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),l.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:i})]}),l.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[l.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),l.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const z$={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function P$({title:e,subtitle:n,icon:a,href:o,status:i,meta:c="Open in dashboard"}){const d=z$[i];return l.jsxs(_t,{to:o,className:ce("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[l.jsxs("div",{className:"flex items-start justify-between gap-2",children:[l.jsx("span",{className:ce("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),l.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),l.jsxs("div",{children:[l.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),l.jsx("span",{className:ce("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),l.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:l.jsx(ye,{icon:a,size:16})}),l.jsx("span",{className:"text-xs text-muted-foreground",children:c})]}),l.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[l.jsx(ye,{icon:Vu,size:14,className:"opacity-60"}),l.jsx(ye,{icon:no,size:14,className:"opacity-60 group-hover:text-primary"}),l.jsx(ye,{icon:Oh,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function I$({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:Ih(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return l.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[l.jsxs(Qe,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),l.jsx(ve,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:l.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),l.jsxs(Fe,{className:"pt-0",children:[l.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>l.jsxs(Ss,{className:"size-9 border-2 border-card ring-0",children:[l.jsx(ws,{src:e.bot.avatar,alt:""}),l.jsx(Cs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?l.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),l.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),l.jsx(Ge,{className:"overflow-hidden border-border bg-secondary",children:l.jsx(Fe,{className:"p-5",children:l.jsxs("div",{className:"space-y-3",children:[l.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:l.jsx(ye,{icon:c8,size:22})}),l.jsxs("div",{children:[l.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),l.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),l.jsx(ve,{asChild:!0,size:"sm",className:"w-full",children:l.jsxs(_t,{to:"/settings",children:[l.jsx(ye,{icon:Uu,size:16,className:"mr-2"}),"Open settings"]})})]})})}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[l.jsx(Qe,{className:"text-sm font-semibold",children:"System activity"}),l.jsx(ve,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:l.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),l.jsxs(Fe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>l.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[l.jsxs(Ss,{className:"size-9",children:[l.jsx(ws,{src:e.bot.avatar,alt:e.bot.username}),l.jsx(Cs,{className:"bg-secondary text-xs",children:"SB"})]}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),l.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),l.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),l.jsx(ve,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:l.jsxs(_t,{to:"/system",children:["All system details",l.jsx(ye,{icon:Oh,size:14})]})})]})]}),l.jsx(Ge,{className:"border-border bg-card",children:l.jsxs(Fe,{className:"flex items-center gap-3 p-4",children:[l.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:l.jsx(ye,{icon:no,size:18})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),l.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const W5={todo:"Needs setup",progress:"In progress",done:"Active"};function xh(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function $$(){return l.jsxs("div",{className:"flex gap-6",children:[l.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-44 rounded-2xl"}),l.jsx(Ve,{className:"h-44 rounded-2xl"})]}),l.jsx(Ve,{className:"h-8 w-48"}),l.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>l.jsx(Ve,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),l.jsx(Ve,{className:"h-8 w-56"}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>l.jsx(Ve,{className:"h-20 rounded-2xl"},n))})]}),l.jsx(Ve,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function B$(){const{stats:e,loading:n,error:a}=Yu(),[o,i]=f.useState("all"),c=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?fs.filter(y=>y.category==="tickets"):o==="all"?fs:fs.filter(y=>y.category===o),[o]);if(n)return l.jsx($$,{});if(a||!e)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:a||"No stats available"})});const m=e.tickets.open,p=e.tickets.closed,h=e.tickets.total;return l.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[l.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ge,{className:"overflow-hidden border-border bg-card",children:l.jsxs(Fe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[l.jsxs("div",{className:"space-y-3",children:[l.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",l.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),l.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),l.jsx(ve,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:l.jsx(_t,{to:"/transcripts",children:"Review"})})]}),l.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[l.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),l.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),l.jsx(Ge,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:l.jsxs(Fe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[l.jsxs("div",{className:"space-y-3",children:[l.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),l.jsxs("ul",{className:"space-y-1.5 text-sm",children:[l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[h," total"]})]}),l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),l.jsx(L$,{percent:c,size:120})]})})]}),l.jsxs("section",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),l.jsx(v5,{value:o,onValueChange:y=>i(y),children:l.jsxs(Rg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[l.jsx(to,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),l.jsx(to,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),l.jsx(to,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),j_.filter(y=>y.id!=="all").map(y=>l.jsx(to,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),l.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:Qi,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:Bu,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=xh(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>l.jsx(P$,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),l.jsxs("section",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),l.jsx(_t,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:fs.slice(0,4).map(y=>{const v=xh(y.id,e.modules);return l.jsx(D$,{title:y.title,icon:y.icon,href:y.href,badge:W5[v.status],status:v.status},y.id)})})]})]}),l.jsx(I$,{stats:e})]})}function U$(){const{permissions:e}=Lt();return Pn(e,"overview")?l.jsx(B$,{}):l.jsx(Lr,{to:Bh(e),replace:!0})}function va({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:i}=Lt();return a?l.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Pn(i,e)?l.jsx(l.Fragment,{children:n}):l.jsx(Lr,{to:Bh(i),replace:!0}):l.jsx(Lr,{to:"/login",replace:!0})}function H$(){const{hasPermission:e}=Lt(),n=e("settings.update"),a=mo(),[o,i]=f.useState([]),[c,d]=f.useState(""),[m,p]=f.useState(!0),[h,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{p(!0),y("");try{const E=await Ne.getAddonsCatalog();E.data&&(i(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await Ne.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const T=E.configFiles[0];T&&a(`/configs?file=${Gi(T)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),l.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",l.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),l.jsxs(ve,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[l.jsx(ye,{icon:q0,size:16,className:ce("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),h?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:h})}):null,v?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:v})}):null,l.jsxs("section",{className:"space-y-4",children:[l.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[l.jsx(Ve,{className:"h-40 rounded-xl"}),l.jsx(Ve,{className:"h-40 rounded-xl"}),l.jsx(Ve,{className:"h-40 rounded-xl"})]}):l.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-2",children:[l.jsxs("div",{className:"flex items-start justify-between gap-2",children:[l.jsxs(Qe,{className:"flex items-center gap-2 text-lg",children:[l.jsx(ye,{icon:Ph,size:20,className:"text-primary"}),E.name]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(gs,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:E.price===0||!E.price?"Free":`$${E.price}`}),E.installed?l.jsxs(gs,{variant:"secondary",className:"shrink-0 gap-1",children:[l.jsx(ye,{icon:f8,size:14}),"Installed"]}):null]})]}),l.jsx(ht,{children:E.description})]}),l.jsxs(Fe,{className:"space-y-2 text-xs text-muted-foreground",children:[E.is_external?l.jsxs("p",{children:["Available on: ",l.jsx("span",{className:"font-medium text-foreground",children:E.external_store||"External Store"})]}):null,E.configFiles&&E.configFiles.length>0?l.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,T)=>l.jsxs("span",{children:[T>0?", ":null,l.jsx(_t,{to:`/configs?file=${Gi(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),l.jsxs(Pg,{className:"flex flex-wrap gap-2",children:[E.is_external?l.jsx(ve,{variant:"outline",size:"sm",asChild:!0,children:l.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,E.installed&&E.configFiles&&E.configFiles[0]?l.jsx(ve,{size:"sm",variant:"secondary",asChild:!0,children:l.jsx(_t,{to:`/configs?file=${Gi(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?l.jsx(ve,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):E.is_external?null:l.jsxs(ve,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[l.jsx(ye,{icon:Uu,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function V$(){const{permissions:e}=Lt(),[n,a]=f.useState(!1),[o,i]=f.useState(!1),[c,d]=f.useState(""),[m,p]=f.useState(""),[h,y]=f.useState(""),[v,x]=f.useState("Administrator"),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState("General"),T=X0(e,"supportbot"),R=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Dr.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),i(!1);try{const D=await Ne.buildAddon({name:m.toLowerCase(),description:h||"A custom command",permission:v,embed:{title:S,description:C||"Hello from your custom command!",color:E}});i(!0),d(D.message||"Restart required."),Dr.success(`Addon ${m}.js created successfully!`)}catch(D){Dr.error(D instanceof Error?D.message:"Failed to build addon")}finally{a(!1)}};return T?l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),l.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?l.jsxs(Ye,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[l.jsx(D1,{className:"h-4 w-4"}),l.jsxs(We,{className:"ml-2",children:["Successfully built ",l.jsxs("strong",{children:[m,".js"]}),"! ",c]})]}):null,l.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[l.jsxs("div",{className:"space-y-6",children:[l.jsxs(Ge,{children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Command Details"}),l.jsx(ht,{children:"Configure how users trigger the command."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Command Name"}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"text-muted-foreground",children:"/"}),l.jsx(Ue,{placeholder:"ping",value:m,onChange:D=>p(D.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Description"}),l.jsx(Ue,{placeholder:"Replies with a custom embed",value:h,onChange:D=>y(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Required Permission"}),l.jsxs(Es,{value:v,onValueChange:x,children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsxs(co,{children:[l.jsx(Zt,{value:"none",children:"@everyone"}),l.jsx(Zt,{value:"Administrator",children:"Administrator"}),l.jsx(Zt,{value:"ManageMessages",children:"Manage Messages"}),l.jsx(Zt,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),l.jsxs(Ge,{children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Response Embed"}),l.jsx(ht,{children:"What the bot will reply with."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Title (Optional)"}),l.jsx(Ue,{placeholder:"Hello!",value:S,onChange:D=>j(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Description"}),l.jsx(Cd,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:C,onChange:D=>N(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Color"}),l.jsxs(Es,{value:E,onValueChange:k,children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsxs(co,{children:[l.jsx(Zt,{value:"General",children:"Theme General"}),l.jsx(Zt,{value:"Success",children:"Theme Success"}),l.jsx(Zt,{value:"Warning",children:"Theme Warning"}),l.jsx(Zt,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),l.jsx("div",{className:"space-y-6",children:l.jsxs(Ge,{className:"sticky top-6 border-primary/20",children:[l.jsx(Ze,{children:l.jsxs(Qe,{className:"text-sm font-medium flex items-center gap-2",children:[l.jsx(ye,{icon:d8,size:16,className:"text-primary"}),"Live Preview"]})}),l.jsx(Fe,{children:l.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:l.jsxs("div",{className:"flex gap-4",children:[l.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),l.jsxs("div",{className:"flex-1 space-y-1",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),l.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[l.jsx(D1,{size:10})," BOT"]}),l.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),l.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[S&&l.jsx("div",{className:"mb-1 font-semibold text-white",children:S}),l.jsx("div",{className:"whitespace-pre-wrap",children:C||"Hello from your custom command!"})]})]})]})})}),l.jsx(Pg,{children:l.jsxs(ve,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:R,children:[l.jsx(ye,{icon:xa,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):l.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const $g="supportbot-dashboard-accent",Ki="#45b46c",G$=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function F$(e){const n=cr(e,Ki),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,i=parseInt(n.slice(5,7),16)/255,c=Math.max(a,o,i),d=Math.min(a,o,i),m=(c+d)/2;let p=0,h=0;if(c!==d){const y=c-d;switch(h=m>.5?y/(2-c-d):y/(c+d),c){case a:p=((o-i)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function X$({canEdit:e}){const[n,a]=f.useState(!1),[o,i]=f.useState(""),[c,d]=f.useState(!1);async function m(){if(e){a(!0),i("");try{const p=await Ne.resetDashboard();i(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){i(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return e?l.jsxs("div",{className:"space-y-4",children:[l.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),l.jsxs(gg,{open:c,onOpenChange:d,children:[l.jsx(s_,{asChild:!0,children:l.jsx(ve,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),l.jsxs(hd,{children:[l.jsxs(gd,{children:[l.jsx(vd,{children:"Are you absolutely sure?"}),l.jsx(bd,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&l.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),l.jsxs(vg,{children:[l.jsx(ve,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),l.jsx(ve,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function Z$({canEdit:e}){const{branding:n,setBrandingLocal:a}=Fu(),o=f.useRef(null),[i,c]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,h]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{c(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){h(!0),S("");try{const T=await Ne.updateBranding({title:i,pageTitle:d});T.data&&a(T.data),S(T.message||"Branding saved.")}catch(T){S(T instanceof Error?T.message:"Save failed")}finally{h(!1)}}}async function N(T){if(!(!e||!T)){v(!0),S("");try{const R=await K$(T),D=await Ne.uploadBrandingFavicon(R);D.data&&a(D.data),S(D.message||"Favicon uploaded.")}catch(R){S(R instanceof Error?R.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const T=await Ne.removeBrandingFavicon();T.data&&a(T.data),S(T.message||"Favicon removed.")}catch(T){S(T instanceof Error?T.message:"Remove failed")}finally{v(!1)}}}const k=i.trim()!==n.title||d.trim()!==n.pageTitle;return l.jsxs("div",{className:"space-y-8",children:[l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"brand-title",children:"Sidebar title"}),l.jsx(Ue,{id:"brand-title",value:i,disabled:!e,maxLength:64,onChange:T=>c(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"brand-page-title",children:"Browser tab title"}),l.jsx(Ue,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),e?l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(ve,{type:"button",disabled:p||!k,onClick:()=>void C(),children:p?"Saving…":"Save titles"}),x&&k?l.jsx("span",{className:"text-xs text-muted-foreground",children:x}):null]}):null]}),l.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[l.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?l.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-2"}):l.jsx(ye,{icon:r8,size:24,className:"text-muted-foreground/50"})}),l.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:T=>{var R;return void N(((R=T.target.files)==null?void 0:R[0])??null)}}),l.jsxs("div",{className:"flex flex-col gap-2",children:[e?l.jsxs("div",{className:"flex gap-2",children:[l.jsx(ve,{type:"button",variant:"secondary",disabled:y,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:y?"Uploading…":"Upload Favicon"}),n.hasFavicon?l.jsx(ve,{type:"button",variant:"destructive",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!k&&x?l.jsx("span",{className:"text-xs text-muted-foreground",children:x}):null]})]})]})]})}function Q$(){var v,x,S,j,C,N,E,k,T,R,D;const{hasPermission:e}=Lt(),n=e("settings.update"),[a,o]=f.useState(!0),[i,c]=f.useState(!1),[d,m]=f.useState(""),[p,h]=f.useState(null);f.useEffect(()=>{Ne.getConfigJson("api").then(P=>{P.data&&h(P.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function y(){var P,z,B,H,Y,Q,fe,de,he,se,O;if(!(!n||!p)){c(!0),m("");try{const $={"api:API.Port":(P=p.API)==null?void 0:P.Port,"api:API.EmeraldAPIKey":(z=p.API)==null?void 0:z.EmeraldAPIKey,"api:API.TrustProxy":(B=p.API)==null?void 0:B.TrustProxy,"api:API.OAuth.Enabled":(Y=(H=p.API)==null?void 0:H.OAuth)==null?void 0:Y.Enabled,"api:API.OAuth.ClientId":(fe=(Q=p.API)==null?void 0:Q.OAuth)==null?void 0:fe.ClientId,"api:API.OAuth.ClientSecret":(he=(de=p.API)==null?void 0:de.OAuth)==null?void 0:he.ClientSecret,"api:API.OAuth.RedirectUri":(O=(se=p.API)==null?void 0:se.OAuth)==null?void 0:O.RedirectUri};await Ne.updateConfigFields($),m("API settings saved and backend restarted.")}catch($){m($ instanceof Error?$.message:"Save failed")}finally{c(!1)}}}return a?l.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?l.jsxs("div",{className:"space-y-8",children:[l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"API Port"}),l.jsx(Ue,{type:"number",value:((v=p.API)==null?void 0:v.Port)||"",disabled:!n,onChange:P=>h({...p,API:{...p.API,Port:parseInt(P.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Emerald API Key"}),l.jsx(Ue,{type:"password",value:((x=p.API)==null?void 0:x.EmeraldAPIKey)||"",disabled:!n,onChange:P=>h({...p,API:{...p.API,EmeraldAPIKey:P.target.value}}),className:"border-border bg-secondary/30"})]})]}),l.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[l.jsx(dn,{checked:((S=p.API)==null?void 0:S.TrustProxy)||!1,disabled:!n,onCheckedChange:P=>h({...p,API:{...p.API,TrustProxy:P}})}),l.jsx(De,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),l.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),l.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[l.jsx(dn,{checked:((C=(j=p.API)==null?void 0:j.OAuth)==null?void 0:C.Enabled)||!1,disabled:!n,onCheckedChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,Enabled:P}}})}}),l.jsx(De,{className:"text-sm",children:"Enable OAuth"})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Client ID"}),l.jsx(Ue,{value:((E=(N=p.API)==null?void 0:N.OAuth)==null?void 0:E.ClientId)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientId:P.target.value}}})},className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Client Secret"}),l.jsx(Ue,{type:"password",value:((T=(k=p.API)==null?void 0:k.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientSecret:P.target.value}}})},className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{children:"Redirect URI"}),l.jsx(Ue,{value:((D=(R=p.API)==null?void 0:R.OAuth)==null?void 0:D.RedirectUri)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,RedirectUri:P.target.value}}})},className:"border-border bg-secondary/30"}),l.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?l.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[l.jsx(ve,{type:"button",disabled:i,onClick:()=>void y(),children:i?"Saving…":"Save API Config"}),d?l.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function J$(){const{hasPermission:e}=Lt(),n=e("settings.update"),[a,o]=f.useState(null),[i,c]=f.useState(!0),[d,m]=f.useState(!1),[p,h]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>K5()??Ki),[j,C]=f.useState(""),[N,E]=f.useState("appearance"),k=f.useCallback(async()=>{c(!0),h("");try{const R=await Ne.checkForUpdates();R.data&&o(R.data)}catch(R){h(R instanceof Error?R.message:"Could not check for updates")}finally{c(!1)}},[]);f.useEffect(()=>{k()},[k]);async function T(R){if(R.updateAvailable){m(!0),h(""),v("");try{const D=await Ne.runUpdate(R.id,R.latest,R.zipUrl);v(D.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await k()}catch(D){h(D instanceof Error?D.message:"Update failed")}finally{m(!1)}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),l.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),l.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[l.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:l.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[l.jsx(ve,{variant:N==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("appearance"),children:"Appearance"}),l.jsx(ve,{variant:N==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("api"),children:"API Config"}),l.jsx(ve,{variant:N==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("updates"),children:"Update Checker"}),n&&l.jsx(ve,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${N==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>E("danger"),children:"Danger Zone"})]})}),l.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[N==="appearance"&&l.jsx("div",{className:"space-y-6",children:l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Dashboard appearance"}),l.jsx(ht,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsx(Z$,{canEdit:n}),l.jsxs("div",{className:"border-t border-border pt-4",children:[l.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),l.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),l.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(Ng,{value:x,onChange:R=>{S(R),b0(R),C("Accent updated.")}}),l.jsx(Ue,{id:"accent-colour",value:x,onChange:R=>S(R.target.value),onBlur:()=>{const R=cr(x,Ki);S(R),b0(R),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),l.jsx(ve,{type:"button",variant:"outline",onClick:()=>{W$(),S(Ki),C("Reset to default purple.")},children:"Reset to default"})]}),l.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[l.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),l.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),l.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?l.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]})}),N==="danger"&&n&&l.jsxs(Ge,{className:"border-destructive/50 bg-destructive/5",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg text-destructive",children:"Danger Zone"}),l.jsx(ht,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),l.jsx(Fe,{children:l.jsx(X$,{canEdit:n})})]}),N==="api"&&l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"API Configuration"}),l.jsx(ht,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),l.jsx(Fe,{children:l.jsx(Q$,{})})]}),N==="updates"&&l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Software updates"}),l.jsx(ht,{children:"Manage updates for the bot and dashboard."})]}),l.jsxs(Fe,{className:"space-y-4",children:[i?l.jsx(Ve,{className:"h-24 w-full"}):a&&a.length>0?l.jsx("div",{className:"space-y-4",children:a.map(R=>l.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("p",{className:"font-medium text-sm",children:[l.jsx("a",{href:R.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:R.name})," ","(",R.branch," branch)"]}),l.jsxs("div",{className:"flex gap-x-4 text-sm",children:[l.jsxs("p",{children:[l.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),l.jsxs("span",{className:"font-mono font-medium",children:["v",R.current]})]}),l.jsxs("p",{children:[l.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),l.jsxs("span",{className:"font-mono font-medium",children:["v",R.latest]})]})]})]}),l.jsxs("div",{className:"flex items-center justify-between",children:[R.updateAvailable?l.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):l.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),R.updateAvailable&&n?l.jsxs(ve,{type:"button",size:"sm",onClick:()=>void T(R),disabled:d,children:[d?l.jsx(ye,{icon:q0,size:16,className:"mr-2 animate-spin"}):l.jsx(ye,{icon:Uu,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,R.updateAvailable&&!n?l.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},R.id))}):null,p?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:p})}):null,y?l.jsx(Ye,{children:l.jsx(We,{children:y})}):null,l.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:l.jsxs(ve,{type:"button",variant:"outline",onClick:k,disabled:i||d,children:[l.jsx(ye,{icon:_s,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return l.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),l.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const eB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function tB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function nB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Yu(),[i,c]=f.useState(null),[d,m]=f.useState(null),[p,h]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([Ne.getGuildStatus().catch(()=>null),Ne.health().catch(()=>null)]);j!=null&&j.data&&c(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){h(!0);try{await Promise.all([o(),y()])}finally{h(!1)}}if(n&&!e)return l.jsxs("div",{className:"space-y-6",children:[l.jsx(Ve,{className:"h-10 w-64"}),l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-56 rounded-2xl"}),l.jsx(Ve,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(ve,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:l.jsxs(_t,{to:"/",children:[l.jsx(ye,{icon:G0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),l.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),l.jsxs(ve,{type:"button",variant:"outline",disabled:p,onClick:()=>void v(),children:[l.jsx(ye,{icon:_s,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Discord bot"}),l.jsx(ht,{children:"Connection and identity"})]}),l.jsxs(Fe,{children:[l.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[l.jsxs(Ss,{className:"size-12",children:[l.jsx(ws,{src:e.bot.avatar,alt:e.bot.username}),l.jsx(Cs,{children:"SB"})]}),l.jsxs("div",{children:[l.jsx("p",{className:"font-semibold",children:e.bot.username}),l.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),l.jsxs("dl",{children:[l.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),l.jsx(pt,{label:"Gateway latency",value:l.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),l.jsx(pt,{label:"Process uptime",value:Ih(e.bot.uptime)}),l.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),l.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?l.jsx(pt,{label:"Invite link",value:l.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Host machine"}),l.jsx(ht,{children:"Server resources running this instance"})]}),l.jsx(Fe,{children:l.jsxs("dl",{children:[l.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),l.jsx(pt,{label:"Memory usage",value:l.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),l.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),l.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Tickets"}),l.jsx(ht,{children:"Database snapshot"})]}),l.jsx(Fe,{children:l.jsxs("dl",{children:[l.jsx(pt,{label:"Total tickets",value:e.tickets.total}),l.jsx(pt,{label:"Open",value:l.jsx("span",{className:"text-primary",children:e.tickets.open})}),l.jsx(pt,{label:"Closed",value:e.tickets.closed}),l.jsx(pt,{label:"Transcripts",value:l.jsx(_t,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Guild health"}),l.jsx(ht,{children:"Configured server and membership"})]}),l.jsx(Fe,{children:i?l.jsxs("dl",{children:[l.jsx(pt,{label:"Status",value:l.jsx("span",{className:tB(i.status),children:eB[i.status]})}),l.jsx(pt,{label:"Configured guild ID",value:i.configuredGuildId||"Not set",mono:!0}),i.configuredGuild?l.jsx(pt,{label:"Configured server",value:`${i.configuredGuild.name} (${((S=i.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,i.message?l.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:i.message}):null,i.extraGuilds.length>0?l.jsxs("div",{className:"mt-3 space-y-2",children:[l.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),l.jsx("ul",{className:"space-y-1 text-sm",children:i.extraGuilds.map(j=>l.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):l.jsx(Ve,{className:"h-24 w-full"})})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Dashboard services"}),l.jsx(ht,{children:"API and authentication"})]}),l.jsx(Fe,{children:d?l.jsxs("dl",{className:"max-w-xl",children:[l.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),l.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),l.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),l.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),l.jsx(pt,{label:"Software updates",value:l.jsx(_t,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),l.jsx(pt,{label:"Logs",value:l.jsx(_t,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):l.jsx(Ve,{className:"h-32 w-full max-w-xl"})})]}),e.modules?l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Module setup status"}),l.jsx(ht,{children:"Which features are configured and active"})]}),l.jsx(Fe,{children:l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:fs.map(j=>{const C=xh(j.id,e.modules);return l.jsxs(_t,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("p",{className:"text-sm font-medium",children:j.title}),l.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),l.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:W5[C.status]})]},j.id)})})})]}):null]})}function rB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const aB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],oB=["Output","Warn","Error"],sB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},iB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},y0=2e3,lB=2e3;function Sh(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function cB(e,n,a){const o=a?[]:e,i=new Set(o.map((m,p)=>Sh(m,p))),c=[];for(let m=0;my0?d.slice(d.length-y0):d}function uB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[i,c]=f.useState(""),[d,m]=f.useState(!1),[p,h]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),T=f.useRef(null),R=f.useRef(d);R.current=d;const D=f.useMemo(()=>y==="all"?oB:[y],[y]),P=f.useCallback(async H=>{var fe,de;const Y=await Ne.getLogs({types:D,cursor:H?void 0:k.current??void 0,tail:H?500:0}),Q=((fe=Y.data)==null?void 0:fe.entries)??[];return k.current=((de=Y.data)==null?void 0:de.cursor)??{},n(he=>cB(he,Q,H)),Q.length},[D]),z=f.useCallback(async()=>{var H;o(!0),c(""),k.current=null;try{const fe=(((H=(await Ne.getLogsMeta()).data)==null?void 0:H.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await P(!0),C(!0)}catch(Y){c(Y instanceof Error?Y.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[P]);f.useEffect(()=>{z()},[z]),f.useEffect(()=>{if(d||a)return;const H=window.setInterval(async()=>{if(!R.current)try{await P(!1),C(!0),c("")}catch(Y){C(!1),c(Y instanceof Error?Y.message:"Live update failed")}},lB);return()=>window.clearInterval(H)},[d,a,P]),f.useEffect(()=>{if(!p||d)return;const H=T.current;H&&(H.scrollTop=H.scrollHeight)},[e,p,d]);const B=f.useMemo(()=>e.filter(H=>{var Q;if(y!=="all"&&H.type!==y)return!1;if(!x.trim())return!0;const Y=x.toLowerCase();return H.message.toLowerCase().includes(Y)||(((Q=H.timestamp)==null?void 0:Q.toLowerCase().includes(Y))??!1)}),[e,y,x]);return l.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),l.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?l.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:ce("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),l.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),i?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:i})}):null,l.jsxs(Ge,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[l.jsxs(Ze,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[l.jsxs(Qe,{className:"text-base font-medium",children:["Console",a?null:l.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[B.length," line",B.length===1?"":"s"]})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[l.jsx(dn,{id:"auto-scroll",checked:p,onCheckedChange:h}),l.jsx(De,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>m(H=>!H),children:[l.jsx(ye,{icon:d?l8:i8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),z()},disabled:a,children:[l.jsx(ye,{icon:_s,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[l.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:aB.map(H=>l.jsx(ve,{type:"button",variant:y===H.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(H.id),children:H.label},H.id))}),l.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[l.jsx(ye,{icon:Gu,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Filter lines…",value:x,onChange:H=>S(H.target.value),className:"h-9 pl-9"})]})]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-0",children:a?l.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((H,Y)=>l.jsx(Ve,{className:"h-4 w-full"},Y))}):l.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:B.length===0?l.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):l.jsx("ul",{className:"space-y-1",children:B.map((H,Y)=>l.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[l.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:rB(H.timestamp)}),l.jsx("span",{className:ce("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",iB[H.type]),children:H.type}),l.jsx("span",{className:ce("min-w-0 flex-1 whitespace-pre-wrap break-words",sB[H.type]),children:H.message||" "})]},Sh(H,Y)))})})})]})]})}const dB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],fB=450;function mB(e,n){return n&&e!=="viewer"}function pB(){const{user:e,hasPermission:n}=Lt(),a=!mB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),T=f.useRef(null),R=f.useCallback(async()=>{var H;p(!0),x(""),j("");try{const Q=(await Ne.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:r5((H=Q.Typography)==null?void 0:H.FontFamily)}};i(fe),d(structuredClone(fe))}}catch(Y){x(Y instanceof Error?Y.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{R()},[R]);const D=f.useCallback(async H=>{k(!0);try{const Y=await Ne.previewTranscriptTemplate(H);N(Y)}catch{N("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{D(o)},fB),()=>{T.current&&clearTimeout(T.current)}},[o,D]);function P(H,Y){i(Q=>Q&&il(Q,H,Y))}async function z(){if(!(a||!o)){y(!0),x(""),j("");try{const H=await Ne.saveTranscriptTemplate(o);j(H.message||"Saved."),d(structuredClone(o))}catch(H){x(H instanceof Error?H.message:"Save failed")}finally{y(!1)}}}const B=o&&c&&JSON.stringify(o)!==JSON.stringify(c);return m?l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-96 rounded-xl"}),l.jsx(Ve,{className:"h-96 rounded-xl"})]}):o?l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[l.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),l.jsxs("div",{className:"flex items-center gap-2",children:[B?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:z,disabled:h||!B,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save appearance"]})]})]}),v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,l.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[l.jsx(hB,{data:o,readOnly:a,onPatch:P}),l.jsxs(Ge,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[l.jsxs(Ze,{className:"pb-2",children:[l.jsx(Qe,{className:"text-base",children:"Live preview"}),l.jsxs(ht,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-4 pt-0",children:l.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ce("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load template"})})}function hB({data:e,readOnly:n,onPatch:a}){return l.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:dB.map(o=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:o.title}),o.description?l.jsx(ht,{children:o.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(i=>l.jsx("div",{className:i.type==="textarea"?"sm:col-span-2":"",children:l.jsx(zg,{field:i,value:fo(e,i.path),readOnly:n,onChange:c=>a(i.path,c)})},i.path))})]},o.title))})}function gB(e,n){return n&&e!=="viewer"}function vB(){const{user:e,hasPermission:n}=Lt(),a=!gB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState(null),[c,d]=f.useState(!0),[m,p]=f.useState(!1),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,T,R;d(!0),x(""),j("");try{const P=(await Ne.getTranscriptSettings()).data;P&&i({autoDelete:{enabled:!!((k=P.autoDelete)!=null&&k.enabled),afterDays:((T=P.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((R=P.publicAccess)!=null&&R.enabled)}})}catch(D){x(D instanceof Error?D.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){p(!0),x(""),j("");try{const k=await Ne.updateTranscriptSettings(o);k.data&&i({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{p(!1)}}}async function E(){var k,T;if(!a){y(!0),x(""),j("");try{const R=await Ne.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((T=R.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return c?l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-40 w-full rounded-xl"}),l.jsx(Ve,{className:"h-40 w-full rounded-xl"})]}):o?l.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?l.jsx(Ye,{children:l.jsx(We,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,S?l.jsx(Ye,{children:l.jsx(We,{children:S})}):null,l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Auto-delete"}),l.jsx(ht,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[l.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>i(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:k.target.checked}})}),l.jsxs("span",{className:"text-sm",children:[l.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),l.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),l.jsx(Ue,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>i(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",disabled:a||h,onClick:()=>void E(),children:[l.jsx(ye,{icon:_s,size:16,className:ce(h&&"animate-spin")}),"Run cleanup now"]})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Public transcripts"}),l.jsxs(ht,{children:["When enabled, anyone with the link can view a transcript at"," ",l.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),l.jsx(Fe,{children:l.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[l.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>i(T=>T&&{...T,publicAccess:{enabled:k.target.checked}})}),l.jsxs("span",{className:"text-sm",children:[l.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),l.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:l.jsxs(ve,{type:"button",disabled:m,onClick:()=>void N(),children:[l.jsx(ye,{icon:Hu,size:16}),m?"Saving…":"Save settings"]})]}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:"Could not load transcript settings."})})}function bB(e,n){return n&&e!=="viewer"}function x0(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function S0(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function yB(){var U;const{user:e,hasPermission:n}=Lt(),a=bB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState("browse"),[c,d]=f.useState([]),[m,p]=f.useState(null),[h,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[T,R]=f.useState(!1),[D,P]=f.useState(!1),[z,B]=f.useState(!1),[H,Y]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const F=(await Ne.listTranscripts()).data??[];d(F),p(ae=>{var ne;return ae&&F.some(me=>me.id===ae)?ae:((ne=F[0])==null?void 0:ne.id)??null})}catch(V){j(V instanceof Error?V.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&Ne.getTranscriptSettings().then(V=>{var F,ae;B(!!((ae=(F=V.data)==null?void 0:F.publicAccess)!=null&&ae.enabled))}).catch(()=>B(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return c;const V=C.toLowerCase();return c.filter(F=>F.id.includes(V)||F.filename.toLowerCase().includes(V)||F.ticketName&&F.ticketName.toLowerCase().includes(V))},[c,C]),de=f.useMemo(()=>c.find(V=>V.id===m)??null,[c,m]),he=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,O=m&&z?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function $(V){x(""),p(V),k(F=>F+1)}function Z(){he&&window.open(he,"_blank","noopener,noreferrer")}function J(){O&&window.open(O,"_blank","noopener,noreferrer")}async function te(){if(O)try{await navigator.clipboard.writeText(O),Y(!0),window.setTimeout(()=>Y(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function M(){var F;if(!m||!a)return;const V=((F=de==null?void 0:de.ticketName)==null?void 0:F.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${V}? This cannot be undone.`)){P(!0),x("");try{await Ne.deleteTranscript(m),await Q()}catch(ae){x(ae instanceof Error?ae.message:"Failed to delete transcript")}finally{P(!1)}}}async function _(){if(!(!se||!de)){R(!0),x("");try{const V=await fetch(se,{credentials:"include"});if(!V.ok){const me=await V.json().catch(()=>({}));throw new Error(me.error||`Download failed (${V.status})`)}const F=await V.blob(),ae=URL.createObjectURL(F),ne=document.createElement("a");ne.href=ae,ne.download=de.filename,ne.click(),URL.revokeObjectURL(ae)}catch(V){x(V instanceof Error?V.message:"Failed to download transcript")}finally{R(!1)}}}return l.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),l.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsx(ve,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("browse"),children:"Library"}),l.jsx(ve,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("appearance"),children:"Appearance"}),l.jsx(ve,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("settings"),children:"Settings"})]}),o==="browse"?l.jsxs(ve,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:h,children:[l.jsx(ye,{icon:_s,size:16,className:ce(h&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?l.jsx(pB,{}):o==="settings"?l.jsx(vB,{}):l.jsxs(l.Fragment,{children:[S?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:S})}):null,l.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[l.jsxs(Ge,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[l.jsxs(Ze,{className:"space-y-3 pb-3",children:[l.jsxs(Qe,{className:"text-base font-medium",children:["Saved transcripts",!h&&c.length>0?l.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",c.length,")"]}):null]}),l.jsxs("div",{className:"relative",children:[l.jsx(ye,{icon:Gu,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:V=>N(V.target.value),className:"pl-9"})]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-0 pb-4",children:l.jsx(Sd,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:h?l.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((V,F)=>l.jsx(Ve,{className:"h-16 w-full rounded-lg"},F))}):fe.length===0?l.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[l.jsx(ye,{icon:Zi,size:32,className:"opacity-40"}),l.jsx("p",{children:c.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):l.jsx("ul",{className:"space-y-1.5",children:fe.map(V=>{var ne;const F=V.id===m,ae=((ne=V.ticketName)==null?void 0:ne.trim())||`Channel ${V.id}`;return l.jsx("li",{children:l.jsxs("button",{type:"button",onClick:()=>$(V.id),className:ce("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",F?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[l.jsx("p",{className:"truncate text-sm font-medium",children:ae}),l.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[S0(V.createdAt),V.size!=null?` · ${x0(V.size)}`:""]})]})},V.id)})})})})]}),l.jsxs(Ge,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx(Qe,{className:"truncate text-base font-medium",children:de?((U=de.ticketName)==null?void 0:U.trim())||`Channel ${de.id}`:"Preview"}),de?l.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[S0(de.createdAt),de.size!=null?` · ${x0(de.size)}`:""]}):null]}),l.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[O?l.jsxs(l.Fragment,{children:[l.jsxs(ve,{variant:"outline",size:"sm",onClick:()=>void te(),children:[l.jsx(ye,{icon:Y0,size:16}),H?"Copied":"Copy link"]}),l.jsxs(ve,{variant:"outline",size:"sm",onClick:J,children:[l.jsx(ye,{icon:Vu,size:16}),"Public page"]})]}):null,l.jsxs(ve,{variant:"outline",size:"sm",disabled:!he,onClick:Z,children:[l.jsx(ye,{icon:J4,size:16}),"Open tab"]}),l.jsxs(ve,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void _(),children:[l.jsx(ye,{icon:Uu,size:16}),T?"Saving…":"Download"]}),a?l.jsxs(ve,{variant:"outline",size:"sm",disabled:!m||D,className:"text-destructive hover:text-destructive",onClick:()=>void M(),children:[l.jsx(ye,{icon:Lh,size:16}),D?"Deleting…":"Delete"]}):null]})]}),l.jsxs(Fe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,de&&he?l.jsx("iframe",{title:`Transcript ${de.id}`,src:he,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):l.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[l.jsx(ye,{icon:Zi,size:40,className:"opacity-30"}),l.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function xB(){const[e,n]=f.useState([]),[a,o]=f.useState(""),[i,c]=f.useState(!0),[d,m]=f.useState(""),p=f.useCallback(async()=>{c(!0),m("");try{const y=await Ne.listOpenTickets();y.data&&(o(y.data.guildId),n(y.data.tickets.sort((v,x)=>x.created_at-v.created_at)))}catch(y){m(y instanceof Error?y.message:"Failed to load open tickets")}finally{c(!1)}},[]);f.useEffect(()=>{p()},[p]);const h=y=>{const v=Math.floor((Date.now()-y)/1e3);return Ih(v)};return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),l.jsx("p",{className:"text-muted-foreground",children:"View live tickets currently active in Discord."})]}),l.jsxs(ve,{onClick:()=>void p(),disabled:i,variant:"outline",size:"sm",children:[l.jsx(ye,{icon:_s,size:16,className:i?"animate-spin mr-2":"mr-2"}),"Refresh"]})]}),l.jsx(Ge,{className:"border-border bg-card",children:l.jsx(Fe,{className:"p-0",children:i?l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsx(Ve,{className:"h-12 w-full"}),l.jsx(Ve,{className:"h-12 w-full"}),l.jsx(Ve,{className:"h-12 w-full"})]}):d?l.jsx("div",{className:"p-6",children:l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:d})})}):e.length===0?l.jsx("div",{className:"p-12 text-center text-muted-foreground",children:"No open tickets at the moment!"}):l.jsx("div",{className:"divide-y divide-border",children:e.map(y=>l.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[l.jsxs("div",{className:"space-y-1",children:[l.jsxs("p",{className:"font-medium text-primary",children:[y.subject||"Untitled Ticket",l.jsxs("span",{className:"ml-2 text-xs font-mono text-muted-foreground",children:["#",y.ticket_id]})]}),l.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",y.user_id," • Dept: ",y.department," • Priority: ",y.priority]})]}),l.jsxs("div",{className:"flex items-center gap-4",children:[l.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap",children:[l.jsx(ye,{icon:t8,size:14,className:"mr-1.5"}),h(y.created_at)]}),a&&l.jsx(ve,{variant:"secondary",size:"sm",asChild:!0,children:l.jsxs("a",{href:`https://discord.com/channels/${a}/${y.ticket_id}`,target:"_blank",rel:"noreferrer",children:[l.jsx(ye,{icon:Vu,size:16,className:"mr-2"}),"View"]})})]})]},y.ticket_id))})})})]})}const SB=["admin","moderator","editor","viewer","custom"];function wB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Ji("viewer"),yamlOwner:!1}}function CB({permissions:e,onChange:n,disabled:a}){const o=i=>n({...e,...i});return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([i,c])=>l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:i}),l.jsx(dn,{checked:e[c],disabled:a,onCheckedChange:d=>o({[c]:d})})]},c)),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Settings — view"}),l.jsx(dn,{checked:e.settings.view,disabled:a,onCheckedChange:i=>o({settings:{...e.settings,view:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Settings — install updates"}),l.jsx(dn,{checked:e.settings.update,disabled:a,onCheckedChange:i=>o({settings:{...e.settings,update:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Users — view"}),l.jsx(dn,{checked:e.users.view,disabled:a,onCheckedChange:i=>o({users:{...e.users,view:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Users — manage"}),l.jsx(dn,{checked:e.users.manage,disabled:a,onCheckedChange:i=>o({users:{...e.users,manage:i}})})]})]}),l.jsxs("div",{className:"space-y-3",children:[l.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),l.jsx("div",{className:"space-y-2",children:$h.map(i=>l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:h8[i]}),l.jsxs("div",{className:"flex items-center gap-4",children:[l.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",l.jsx(dn,{checked:e.configs[i].view,disabled:a,onCheckedChange:c=>n({...e,configs:{...e.configs,[i]:{...e.configs[i],view:c}}})})]}),l.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",l.jsx(dn,{checked:e.configs[i].edit,disabled:a,onCheckedChange:c=>n({...e,configs:{...e.configs,[i]:{...e.configs[i],edit:c,view:c?!0:e.configs[i].view}}})})]})]})]},i))})]})]})}function jB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function EB(){const{user:e,hasPermission:n}=Lt(),a=n("users.manage"),[o,i]=f.useState([]),[c,d]=f.useState(!0),[m,p]=f.useState(""),[h,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),p("");try{const R=await Ne.listDashboardUsers();R.data&&i(R.data.users)}catch(R){p(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,D)=>R.yamlOwner!==D.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(D.username||D.id)),[o]);function C(){y(wB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Ji(R.role),yamlOwner:R.yamlOwner})}function E(R){h&&y({...h,role:R,permissions:Ji(R,h.permissions)})}async function k(){if(!(!h||!a)){x(!0),p("");try{h.mode==="add"?await Ne.addDashboardUser({id:h.id.trim(),role:h.role,username:h.username||void 0,globalName:h.globalName||void 0,enabled:h.enabled,permissions:h.role==="custom"?h.permissions:void 0}):await Ne.updateDashboardUser(h.id,{role:h.yamlOwner?void 0:h.role,enabled:h.enabled,username:h.username||void 0,globalName:h.globalName||void 0,permissions:h.role==="custom"?h.permissions:void 0}),y(null),await S()}catch(R){p(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function T(R){if(a&&window.confirm("Remove this user from the dashboard?")){p("");try{await Ne.removeDashboardUser(R),await S()}catch(D){p(D instanceof Error?D.message:"Could not remove user")}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),l.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",l.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?l.jsxs(ve,{onClick:C,children:[l.jsx(ye,{icon:Q4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:m})}):null,l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Dashboard access"}),l.jsxs(ht,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),l.jsx(Fe,{children:c?l.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):l.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>l.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[l.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[l.jsxs(Ss,{className:"size-9",children:[l.jsx(ws,{src:R.avatar,alt:R.username}),l.jsx(Cs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),l.jsxs("div",{className:"min-w-0",children:[l.jsxs("p",{className:"truncate font-medium",children:[Z0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),l.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),l.jsx(gs,{variant:"secondary",children:Zx[R.yamlOwner?"owner":R.role]}),l.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:jB(R)}),R.enabled?l.jsx(gs,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):l.jsx(gs,{variant:"outline",children:"Disabled"}),a?l.jsxs("div",{className:"ml-auto flex gap-1",children:[l.jsx(ve,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:l.jsx(ye,{icon:n8,size:16})}),R.yamlOwner?null:l.jsx(ve,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>T(R.id),"aria-label":"Remove user",children:l.jsx(ye,{icon:Lh,size:16})})]}):null]},R.id))})})]}),l.jsx(gg,{open:!!h,onOpenChange:R=>!R&&y(null),children:l.jsxs(hd,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[l.jsxs(gd,{children:[l.jsx(vd,{children:(h==null?void 0:h.mode)==="add"?"Add dashboard user":"Edit user"}),l.jsx(bd,{children:h!=null&&h.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":p8[(h==null?void 0:h.role)??"viewer"]})]}),h?l.jsxs("div",{className:"space-y-4",children:[h.mode==="add"?l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"discord-id",children:"Discord user ID"}),l.jsx(Ue,{id:"discord-id",value:h.id,onChange:R=>y({...h,id:R.target.value}),placeholder:"829112572816130058"})]}):null,l.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Display name (optional)"}),l.jsx(Ue,{value:h.globalName,onChange:R=>y({...h,globalName:R.target.value})})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Username (optional)"}),l.jsx(Ue,{value:h.username,onChange:R=>y({...h,username:R.target.value})})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Role"}),l.jsxs(Es,{value:h.role,disabled:h.yamlOwner,onValueChange:R=>E(R),children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsx(co,{children:h.yamlOwner?l.jsx(Zt,{value:"owner",children:"Owner"}):SB.map(R=>l.jsx(Zt,{value:R,children:Zx[R]},R))})]})]}),l.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Account enabled"}),l.jsx(dn,{checked:h.enabled,disabled:h.yamlOwner,onCheckedChange:R=>y({...h,enabled:R})})]}),h.role==="custom"&&!h.yamlOwner?l.jsx(CB,{permissions:h.permissions,onChange:R=>y({...h,permissions:R})}):null]}):null,l.jsxs(vg,{children:[l.jsx(ve,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),l.jsx(ve,{disabled:v||!a||(h==null?void 0:h.mode)==="add"&&!/^\d{17,20}$/.test(h.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function NB({children:e}){const{isAuthenticated:n,loading:a}=Lt();return a?l.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?l.jsx(l.Fragment,{children:e}):l.jsx(Lr,{to:"/login",replace:!0})}function kB(){const{complete:e,loading:n}=GC(),a=jn();return n?l.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?l.jsx(Lr,{to:"/login",replace:!0}):l.jsxs(qx,{children:[l.jsx(Yt,{path:"/login",element:l.jsx(v$,{})}),l.jsxs(Yt,{element:l.jsx(NB,{children:l.jsx(AO,{})}),children:[l.jsx(Yt,{index:!0,element:l.jsx(U$,{})}),l.jsx(Yt,{path:"system",element:l.jsx(va,{permission:"overview",children:l.jsx(nB,{})})}),l.jsx(Yt,{path:"settings",element:l.jsx(va,{permission:"settings.view",children:l.jsx(J$,{})})}),l.jsx(Yt,{path:"configs",element:l.jsx(p$,{})}),l.jsx(Yt,{path:"logs",element:l.jsx(va,{permission:"logs",children:l.jsx(uB,{})})}),l.jsx(Yt,{path:"tickets",element:l.jsx(va,{permission:"transcripts",children:l.jsx(xB,{})})}),l.jsx(Yt,{path:"transcripts",element:l.jsx(va,{permission:"transcripts",children:l.jsx(yB,{})})}),l.jsx(Yt,{path:"users",element:l.jsx(va,{permission:"users.view",children:l.jsx(EB,{})})}),l.jsx(Yt,{path:"addons",element:l.jsx(va,{permission:"settings.view",children:l.jsx(H$,{})})}),l.jsx(Yt,{path:"addons/builder",element:l.jsx(va,{permission:"settings.update",children:l.jsx(V$,{})})})]}),l.jsx(Yt,{path:"*",element:l.jsx(Lr,{to:"/",replace:!0})})]}):l.jsxs(qx,{children:[l.jsx(Yt,{path:"/setup",element:l.jsx(_$,{})}),l.jsx(Yt,{path:"*",element:l.jsx(Lr,{to:"/setup",replace:!0})})]})}function TB({...e}){return l.jsx(WP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}q$();b3.createRoot(document.getElementById("root")).render(l.jsx(f.StrictMode,{children:l.jsx(V4,{children:l.jsx(Ww,{children:l.jsx(y8,{children:l.jsx(MO,{children:l.jsxs(b8,{children:[l.jsx(kB,{}),l.jsx(TB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-C_d968Vp.css b/public/dashboard/assets/index-C_d968Vp.css deleted file mode 100644 index b69d5a9..0000000 --- a/public/dashboard/assets/index-C_d968Vp.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/70{background-color:#ffffffb3}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-D6vuEh1I.js b/public/dashboard/assets/index-D6vuEh1I.js deleted file mode 100644 index aae1802..0000000 --- a/public/dashboard/assets/index-D6vuEh1I.js +++ /dev/null @@ -1,191 +0,0 @@ -var RN=Object.defineProperty;var AN=(e,n,a)=>n in e?RN(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var m1=(e,n,a)=>AN(e,typeof n!="symbol"?n+"":n,a);function _N(e,n){for(var a=0;ao[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const d of i.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function o(l){if(l.ep)return;l.ep=!0;const i=a(l);fetch(l.href,i)}})();function Xx(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Rm={exports:{}},Nl={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var p1;function MN(){if(p1)return Nl;p1=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,l,i){var d=null;if(i!==void 0&&(d=""+i),l.key!==void 0&&(d=""+l.key),"key"in l){i={};for(var m in l)m!=="key"&&(i[m]=l[m])}else i=l;return l=i.ref,{$$typeof:e,type:o,key:d,ref:l!==void 0?l:null,props:i}}return Nl.Fragment=n,Nl.jsx=a,Nl.jsxs=a,Nl}var h1;function ON(){return h1||(h1=1,Rm.exports=MN()),Rm.exports}var c=ON(),Am={exports:{}},_e={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var g1;function DN(){if(g1)return _e;g1=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),i=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function S(_){return _===null||typeof _!="object"?null:(_=x&&_[x]||_["@@iterator"],typeof _=="function"?_:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,N={};function E(_,O,H){this.props=_,this.context=O,this.refs=N,this.updater=H||j}E.prototype.isReactComponent={},E.prototype.setState=function(_,O){if(typeof _!="object"&&typeof _!="function"&&_!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,_,O,"setState")},E.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function k(){}k.prototype=E.prototype;function A(_,O,H){this.props=_,this.context=O,this.refs=N,this.updater=H||j}var R=A.prototype=new k;R.constructor=A,C(R,E.prototype),R.isPureReactComponent=!0;var L=Array.isArray;function z(){}var B={H:null,A:null,T:null,S:null},U=Object.prototype.hasOwnProperty;function q(_,O,H){var I=H.ref;return{$$typeof:e,type:_,key:O,ref:I!==void 0?I:null,props:H}}function Z(_,O){return q(_.type,O,_.props)}function Q(_){return typeof _=="object"&&_!==null&&_.$$typeof===e}function fe(_){var O={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(H){return O[H]})}var de=/\/+/g;function ce(_,O){return typeof _=="object"&&_!==null&&_.key!=null?fe(""+_.key):O.toString(36)}function he(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(z,z):(_.status="pending",_.then(function(O){_.status==="pending"&&(_.status="fulfilled",_.value=O)},function(O){_.status==="pending"&&(_.status="rejected",_.reason=O)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function M(_,O,H,I,V){var ne=typeof _;(ne==="undefined"||ne==="boolean")&&(_=null);var J=!1;if(_===null)J=!0;else switch(ne){case"bigint":case"string":case"number":J=!0;break;case"object":switch(_.$$typeof){case e:case n:J=!0;break;case y:return J=_._init,M(J(_._payload),O,H,I,V)}}if(J)return V=V(_),J=I===""?"."+ce(_,0):I,L(V)?(H="",J!=null&&(H=J.replace(de,"$&/")+"/"),M(V,O,H,"",function(G){return G})):V!=null&&(Q(V)&&(V=Z(V,H+(V.key==null||_&&_.key===V.key?"":(""+V.key).replace(de,"$&/")+"/")+J)),O.push(V)),1;J=0;var me=I===""?".":I+":";if(L(_))for(var pe=0;pe<_.length;pe++)I=_[pe],ne=me+ce(I,pe),J+=M(I,O,H,ne,V);else if(pe=S(_),typeof pe=="function")for(_=pe.call(_),pe=0;!(I=_.next()).done;)I=I.value,ne=me+ce(I,pe++),J+=M(I,O,H,ne,V);else if(ne==="object"){if(typeof _.then=="function")return M(he(_),O,H,I,V);throw O=String(_),Error("Objects are not valid as a React child (found: "+(O==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":O)+"). If you meant to render a collection of children, use an array instead.")}return J}function K(_,O,H){if(_==null)return _;var I=[],V=0;return M(_,I,"","",function(ne){return O.call(H,ne,V++)}),I}function re(_){if(_._status===-1){var O=_._result;O=O(),O.then(function(H){(_._status===0||_._status===-1)&&(_._status=1,_._result=H)},function(H){(_._status===0||_._status===-1)&&(_._status=2,_._result=H)}),_._status===-1&&(_._status=0,_._result=O)}if(_._status===1)return _._result.default;throw _._result}var oe=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var O=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(O))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},ee={map:K,forEach:function(_,O,H){K(_,function(){O.apply(this,arguments)},H)},count:function(_){var O=0;return K(_,function(){O++}),O},toArray:function(_){return K(_,function(O){return O})||[]},only:function(_){if(!Q(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return _e.Activity=v,_e.Children=ee,_e.Component=E,_e.Fragment=a,_e.Profiler=l,_e.PureComponent=A,_e.StrictMode=o,_e.Suspense=h,_e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=B,_e.__COMPILER_RUNTIME={__proto__:null,c:function(_){return B.H.useMemoCache(_)}},_e.cache=function(_){return function(){return _.apply(null,arguments)}},_e.cacheSignal=function(){return null},_e.cloneElement=function(_,O,H){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var I=C({},_.props),V=_.key;if(O!=null)for(ne in O.key!==void 0&&(V=""+O.key),O)!U.call(O,ne)||ne==="key"||ne==="__self"||ne==="__source"||ne==="ref"&&O.ref===void 0||(I[ne]=O[ne]);var ne=arguments.length-2;if(ne===1)I.children=H;else if(1>>1,ee=M[oe];if(0>>1;oe<_;){var O=2*(oe+1)-1,H=M[O],I=O+1,V=M[I];if(0>l(H,re))Il(V,H)?(M[oe]=V,M[I]=re,oe=I):(M[oe]=H,M[O]=re,oe=O);else if(Il(V,re))M[oe]=V,M[I]=re,oe=I;else break e}}return K}function l(M,K){var re=M.sortIndex-K.sortIndex;return re!==0?re:M.id-K.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var d=Date,m=d.now();e.unstable_now=function(){return d.now()-m}}var h=[],p=[],y=1,v=null,x=3,S=!1,j=!1,C=!1,N=!1,E=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function R(M){for(var K=a(p);K!==null;){if(K.callback===null)o(p);else if(K.startTime<=M)o(p),K.sortIndex=K.expirationTime,n(h,K);else break;K=a(p)}}function L(M){if(C=!1,R(M),!j)if(a(h)!==null)j=!0,z||(z=!0,fe());else{var K=a(p);K!==null&&he(L,K.startTime-M)}}var z=!1,B=-1,U=5,q=-1;function Z(){return N?!0:!(e.unstable_now()-qM&&Z());){var oe=v.callback;if(typeof oe=="function"){v.callback=null,x=v.priorityLevel;var ee=oe(v.expirationTime<=M);if(M=e.unstable_now(),typeof ee=="function"){v.callback=ee,R(M),K=!0;break t}v===a(h)&&o(h),R(M)}else o(h);v=a(h)}if(v!==null)K=!0;else{var _=a(p);_!==null&&he(L,_.startTime-M),K=!1}}break e}finally{v=null,x=re,S=!1}K=void 0}}finally{K?fe():z=!1}}}var fe;if(typeof A=="function")fe=function(){A(Q)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,ce=de.port2;de.port1.onmessage=Q,fe=function(){ce.postMessage(null)}}else fe=function(){E(Q,0)};function he(M,K){B=E(function(){M(e.unstable_now())},K)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(M){M.callback=null},e.unstable_forceFrameRate=function(M){0>M||125oe?(M.sortIndex=re,n(p,M),a(h)===null&&M===a(p)&&(C?(k(B),B=-1):C=!0,he(L,re-oe))):(M.sortIndex=ee,n(h,M),j||S||(j=!0,z||(z=!0,fe()))),M},e.unstable_shouldYield=Z,e.unstable_wrapCallback=function(M){var K=x;return function(){var re=x;x=K;try{return M.apply(this,arguments)}finally{x=re}}}})(Om)),Om}var y1;function zN(){return y1||(y1=1,Mm.exports=LN()),Mm.exports}var Dm={exports:{}},Gt={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var x1;function PN(){if(x1)return Gt;x1=1;var e=Cu();function n(h){var p="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Dm.exports=PN(),Dm.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var w1;function BN(){if(w1)return kl;w1=1;var e=zN(),n=Cu(),a=Zx();function o(t){var r="https://react.dev/errors/"+t;if(1ee||(t.current=oe[ee],oe[ee]=null,ee--)}function H(t,r){ee++,oe[ee]=t.current,t.current=r}var I=_(null),V=_(null),ne=_(null),J=_(null);function me(t,r){switch(H(ne,r),H(V,t),H(I,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?zy(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=zy(r),t=Py(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}O(I),H(I,t)}function pe(){O(I),O(V),O(ne)}function G(t){t.memoizedState!==null&&H(J,t);var r=I.current,s=Py(r,t.type);r!==s&&(H(V,t),H(I,s))}function se(t){V.current===t&&(O(I),O(V)),J.current===t&&(O(J),wl._currentValue=re)}var ge,je;function Ae(t){if(ge===void 0)try{throw Error()}catch(s){var r=s.stack.trim().match(/\n( *(at )?)/);ge=r&&r[1]||"",je=-1)":-1g||D[u]!==Y[g]){var te=` -`+D[u].replace(" at new "," at ");return t.displayName&&te.includes("")&&(te=te.replace("",t.displayName)),te}while(1<=u&&0<=g);break}}}finally{Qe=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?Ae(s):""}function Tt(t,r){switch(t.tag){case 26:case 27:case 5:return Ae(t.type);case 16:return Ae("Lazy");case 13:return t.child!==r&&r!==null?Ae("Suspense Fallback"):Ae("Suspense");case 19:return Ae("SuspenseList");case 0:case 15:return ct(t.type,!1);case 11:return ct(t.type.render,!1);case 1:return ct(t.type,!0);case 31:return Ae("Activity");default:return""}}function Ca(t){try{var r="",s=null;do r+=Tt(t,s),s=t,t=t.return;while(t);return r}catch(u){return` -Error generating stack: `+u.message+` -`+u.stack}}var Rt=Object.prototype.hasOwnProperty,Os=e.unstable_scheduleCallback,Ds=e.unstable_cancelCallback,Yt=e.unstable_shouldYield,$r=e.unstable_requestPaint,Wt=e.unstable_now,gd=e.unstable_getCurrentPriorityLevel,ja=e.unstable_ImmediatePriority,xi=e.unstable_UserBlockingPriority,Ea=e.unstable_NormalPriority,Ls=e.unstable_LowPriority,dr=e.unstable_IdlePriority,Si=e.log,Ir=e.unstable_setDisableYieldValue,Na=null,qt=null;function $n(t){if(typeof Si=="function"&&Ir(t),qt&&typeof qt.setStrictMode=="function")try{qt.setStrictMode(Na,t)}catch{}}var Ht=Math.clz32?Math.clz32:Xn,vd=Math.log,zs=Math.LN2;function Xn(t){return t>>>=0,t===0?32:31-(vd(t)/zs|0)|0}var fo=256,mo=262144,ka=4194304;function Zn(t){var r=t&42;if(r!==0)return r;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Te(t,r,s){var u=t.pendingLanes;if(u===0)return 0;var g=0,b=t.suspendedLanes,w=t.pingedLanes;t=t.warmLanes;var T=u&134217727;return T!==0?(u=T&~b,u!==0?g=Zn(u):(w&=T,w!==0?g=Zn(w):s||(s=T&~t,s!==0&&(g=Zn(s))))):(T=u&~b,T!==0?g=Zn(T):w!==0?g=Zn(w):s||(s=u&~t,s!==0&&(g=Zn(s)))),g===0?0:r!==0&&r!==g&&(r&b)===0&&(b=g&-g,s=r&-r,b>=s||b===32&&(s&4194048)!==0)?r:g}function ut(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function At(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Vt(){var t=ka;return ka<<=1,(ka&62914560)===0&&(ka=4194304),t}function Ur(t){for(var r=[],s=0;31>s;s++)r.push(t);return r}function mt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Zt(t,r,s,u,g,b){var w=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var T=t.entanglements,D=t.expirationTimes,Y=t.hiddenUpdates;for(s=w&~s;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var C5=/[\n"\\]/g;function En(t){return t.replace(C5,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function wd(t,r,s,u,g,b,w,T){t.name="",w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"?t.type=w:t.removeAttribute("type"),r!=null?w==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+jn(r)):t.value!==""+jn(r)&&(t.value=""+jn(r)):w!=="submit"&&w!=="reset"||t.removeAttribute("value"),r!=null?Cd(t,w,jn(r)):s!=null?Cd(t,w,jn(s)):u!=null&&t.removeAttribute("value"),g==null&&b!=null&&(t.defaultChecked=!!b),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"?t.name=""+jn(T):t.removeAttribute("name")}function Ag(t,r,s,u,g,b,w,T){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(t.type=b),r!=null||s!=null){if(!(b!=="submit"&&b!=="reset"||r!=null)){Sd(t);return}s=s!=null?""+jn(s):"",r=r!=null?""+jn(r):s,T||r===t.value||(t.value=r),t.defaultValue=r}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=T?t.checked:!!u,t.defaultChecked=!!u,w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"&&(t.name=w),Sd(t)}function Cd(t,r,s){r==="number"&&ji(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function xo(t,r,s,u){if(t=t.options,r){r={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Td=!1;if(pr)try{var Is={};Object.defineProperty(Is,"passive",{get:function(){Td=!0}}),window.addEventListener("test",Is,Is),window.removeEventListener("test",Is,Is)}catch{Td=!1}var Vr=null,Rd=null,Ni=null;function Pg(){if(Ni)return Ni;var t,r=Rd,s=r.length,u,g="value"in Vr?Vr.value:Vr.textContent,b=g.length;for(t=0;t=Vs),Vg=" ",Gg=!1;function Fg(t,r){switch(t){case"keyup":return Z5.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yg(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var jo=!1;function J5(t,r){switch(t){case"compositionend":return Yg(r);case"keypress":return r.which!==32?null:(Gg=!0,Vg);case"textInput":return t=r.data,t===Vg&&Gg?null:t;default:return null}}function eE(t,r){if(jo)return t==="compositionend"||!Dd&&Fg(t,r)?(t=Pg(),Ni=Rd=Vr=null,jo=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:s,offset:r-t};t=u}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=ev(s)}}function nv(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?nv(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function rv(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=ji(t.document);r instanceof t.HTMLIFrameElement;){try{var s=typeof r.contentWindow.location.href=="string"}catch{s=!1}if(s)t=r.contentWindow;else break;r=ji(t.document)}return r}function Pd(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var iE=pr&&"documentMode"in document&&11>=document.documentMode,Eo=null,Bd=null,Ws=null,$d=!1;function av(t,r,s){var u=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;$d||Eo==null||Eo!==ji(u)||(u=Eo,"selectionStart"in u&&Pd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Ws&&Ys(Ws,u)||(Ws=u,u=yc(Bd,"onSelect"),0>=w,g-=w,Qn=1<<32-Ht(r)+g|s<Oe?($e=Ce,Ce=null):$e=Ce.sibling;var Ge=W($,Ce,F[Oe],ae);if(Ge===null){Ce===null&&(Ce=$e);break}t&&Ce&&Ge.alternate===null&&r($,Ce),P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge,Ce=$e}if(Oe===F.length)return s($,Ce),Ie&&gr($,Oe),Ee;if(Ce===null){for(;OeOe?($e=Ce,Ce=null):$e=Ce.sibling;var da=W($,Ce,Ge.value,ae);if(da===null){Ce===null&&(Ce=$e);break}t&&Ce&&da.alternate===null&&r($,Ce),P=b(da,P,Oe),Ve===null?Ee=da:Ve.sibling=da,Ve=da,Ce=$e}if(Ge.done)return s($,Ce),Ie&&gr($,Oe),Ee;if(Ce===null){for(;!Ge.done;Oe++,Ge=F.next())Ge=le($,Ge.value,ae),Ge!==null&&(P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge);return Ie&&gr($,Oe),Ee}for(Ce=u(Ce);!Ge.done;Oe++,Ge=F.next())Ge=X(Ce,$,Oe,Ge.value,ae),Ge!==null&&(t&&Ge.alternate!==null&&Ce.delete(Ge.key===null?Oe:Ge.key),P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge);return t&&Ce.forEach(function(TN){return r($,TN)}),Ie&&gr($,Oe),Ee}function tt($,P,F,ae){if(typeof F=="object"&&F!==null&&F.type===C&&F.key===null&&(F=F.props.children),typeof F=="object"&&F!==null){switch(F.$$typeof){case S:e:{for(var Ee=F.key;P!==null;){if(P.key===Ee){if(Ee=F.type,Ee===C){if(P.tag===7){s($,P.sibling),ae=g(P,F.props.children),ae.return=$,$=ae;break e}}else if(P.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===U&&$a(Ee)===P.type){s($,P.sibling),ae=g(P,F.props),Js(ae,F),ae.return=$,$=ae;break e}s($,P);break}else r($,P);P=P.sibling}F.type===C?(ae=Da(F.props.children,$.mode,ae,F.key),ae.return=$,$=ae):(ae=zi(F.type,F.key,F.props,null,$.mode,ae),Js(ae,F),ae.return=$,$=ae)}return w($);case j:e:{for(Ee=F.key;P!==null;){if(P.key===Ee)if(P.tag===4&&P.stateNode.containerInfo===F.containerInfo&&P.stateNode.implementation===F.implementation){s($,P.sibling),ae=g(P,F.children||[]),ae.return=$,$=ae;break e}else{s($,P);break}else r($,P);P=P.sibling}ae=Yd(F,$.mode,ae),ae.return=$,$=ae}return w($);case U:return F=$a(F),tt($,P,F,ae)}if(he(F))return we($,P,F,ae);if(fe(F)){if(Ee=fe(F),typeof Ee!="function")throw Error(o(150));return F=Ee.call(F),Ne($,P,F,ae)}if(typeof F.then=="function")return tt($,P,Vi(F),ae);if(F.$$typeof===A)return tt($,P,$i($,F),ae);Gi($,F)}return typeof F=="string"&&F!==""||typeof F=="number"||typeof F=="bigint"?(F=""+F,P!==null&&P.tag===6?(s($,P.sibling),ae=g(P,F),ae.return=$,$=ae):(s($,P),ae=Fd(F,$.mode,ae),ae.return=$,$=ae),w($)):s($,P)}return function($,P,F,ae){try{Qs=0;var Ee=tt($,P,F,ae);return zo=null,Ee}catch(Ce){if(Ce===Lo||Ce===Ui)throw Ce;var Ve=fn(29,Ce,null,$.mode);return Ve.lanes=ae,Ve.return=$,Ve}finally{}}}var Ua=kv(!0),Tv=kv(!1),qr=!1;function af(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function of(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Kr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Xr(t,r,s){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(Ye&2)!==0){var g=u.pending;return g===null?r.next=r:(r.next=g.next,g.next=r),u.pending=r,r=Li(t),dv(t,null,s),r}return Di(t,u,r,s),Li(t)}function el(t,r,s){if(r=r.updateQueue,r!==null&&(r=r.shared,(s&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,Qt(t,s)}}function sf(t,r){var s=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,s===u)){var g=null,b=null;if(s=s.firstBaseUpdate,s!==null){do{var w={lane:s.lane,tag:s.tag,payload:s.payload,callback:null,next:null};b===null?g=b=w:b=b.next=w,s=s.next}while(s!==null);b===null?g=b=r:b=b.next=r}else g=b=r;s={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:b,shared:u.shared,callbacks:u.callbacks},t.updateQueue=s;return}t=s.lastBaseUpdate,t===null?s.firstBaseUpdate=r:t.next=r,s.lastBaseUpdate=r}var lf=!1;function tl(){if(lf){var t=Do;if(t!==null)throw t}}function nl(t,r,s,u){lf=!1;var g=t.updateQueue;qr=!1;var b=g.firstBaseUpdate,w=g.lastBaseUpdate,T=g.shared.pending;if(T!==null){g.shared.pending=null;var D=T,Y=D.next;D.next=null,w===null?b=Y:w.next=Y,w=D;var te=t.alternate;te!==null&&(te=te.updateQueue,T=te.lastBaseUpdate,T!==w&&(T===null?te.firstBaseUpdate=Y:T.next=Y,te.lastBaseUpdate=D))}if(b!==null){var le=g.baseState;w=0,te=Y=D=null,T=b;do{var W=T.lane&-536870913,X=W!==T.lane;if(X?(Be&W)===W:(u&W)===W){W!==0&&W===Oo&&(lf=!0),te!==null&&(te=te.next={lane:0,tag:T.tag,payload:T.payload,callback:null,next:null});e:{var we=t,Ne=T;W=r;var tt=s;switch(Ne.tag){case 1:if(we=Ne.payload,typeof we=="function"){le=we.call(tt,le,W);break e}le=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=Ne.payload,W=typeof we=="function"?we.call(tt,le,W):we,W==null)break e;le=v({},le,W);break e;case 2:qr=!0}}W=T.callback,W!==null&&(t.flags|=64,X&&(t.flags|=8192),X=g.callbacks,X===null?g.callbacks=[W]:X.push(W))}else X={lane:W,tag:T.tag,payload:T.payload,callback:T.callback,next:null},te===null?(Y=te=X,D=le):te=te.next=X,w|=W;if(T=T.next,T===null){if(T=g.shared.pending,T===null)break;X=T,T=X.next,X.next=null,g.lastBaseUpdate=X,g.shared.pending=null}}while(!0);te===null&&(D=le),g.baseState=D,g.firstBaseUpdate=Y,g.lastBaseUpdate=te,b===null&&(g.shared.lanes=0),ta|=w,t.lanes=w,t.memoizedState=le}}function Rv(t,r){if(typeof t!="function")throw Error(o(191,t));t.call(r)}function Av(t,r){var s=t.callbacks;if(s!==null)for(t.callbacks=null,t=0;tb?b:8;var w=M.T,T={};M.T=T,kf(t,!1,r,s);try{var D=g(),Y=M.S;if(Y!==null&&Y(T,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var te=vE(D,u);ol(t,r,te,vn(t))}else ol(t,r,u,vn(t))}catch(le){ol(t,r,{then:function(){},status:"rejected",reason:le},vn())}finally{K.p=b,w!==null&&T.types!==null&&(w.types=T.types),M.T=w}}function CE(){}function Ef(t,r,s,u){if(t.tag!==5)throw Error(o(476));var g=ib(t).queue;lb(t,g,r,re,s===null?CE:function(){return cb(t),s(u)})}function ib(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xr,lastRenderedState:re},next:null};var s={};return r.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xr,lastRenderedState:s},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function cb(t){var r=ib(t);r.next===null&&(r=t.alternate.memoizedState),ol(t,r.next.queue,{},vn())}function Nf(){return Pt(wl)}function ub(){return bt().memoizedState}function db(){return bt().memoizedState}function jE(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var s=vn();t=Kr(s);var u=Xr(r,t,s);u!==null&&(sn(u,r,s),el(u,r,s)),r={cache:ef()},t.payload=r;return}r=r.return}}function EE(t,r,s){var u=vn();s={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},ec(t)?mb(r,s):(s=Vd(t,r,s,u),s!==null&&(sn(s,t,u),pb(s,r,u)))}function fb(t,r,s){var u=vn();ol(t,r,s,u)}function ol(t,r,s,u){var g={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null};if(ec(t))mb(r,g);else{var b=t.alternate;if(t.lanes===0&&(b===null||b.lanes===0)&&(b=r.lastRenderedReducer,b!==null))try{var w=r.lastRenderedState,T=b(w,s);if(g.hasEagerState=!0,g.eagerState=T,dn(T,w))return Di(t,r,g,0),nt===null&&Oi(),!1}catch{}finally{}if(s=Vd(t,r,g,u),s!==null)return sn(s,t,u),pb(s,r,u),!0}return!1}function kf(t,r,s,u){if(u={lane:2,revertLane:om(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},ec(t)){if(r)throw Error(o(479))}else r=Vd(t,s,u,2),r!==null&&sn(r,t,2)}function ec(t){var r=t.alternate;return t===Me||r!==null&&r===Me}function mb(t,r){Bo=Wi=!0;var s=t.pending;s===null?r.next=r:(r.next=s.next,s.next=r),t.pending=r}function pb(t,r,s){if((s&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,Qt(t,s)}}var sl={readContext:Pt,use:Xi,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useLayoutEffect:ht,useInsertionEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useSyncExternalStore:ht,useId:ht,useHostTransitionStatus:ht,useFormState:ht,useActionState:ht,useOptimistic:ht,useMemoCache:ht,useCacheRefresh:ht};sl.useEffectEvent=ht;var hb={readContext:Pt,use:Xi,useCallback:function(t,r){return Kt().memoizedState=[t,r===void 0?null:r],t},useContext:Pt,useEffect:Qv,useImperativeHandle:function(t,r,s){s=s!=null?s.concat([t]):null,Qi(4194308,4,nb.bind(null,r,t),s)},useLayoutEffect:function(t,r){return Qi(4194308,4,t,r)},useInsertionEffect:function(t,r){Qi(4,2,t,r)},useMemo:function(t,r){var s=Kt();r=r===void 0?null:r;var u=t();if(Ha){$n(!0);try{t()}finally{$n(!1)}}return s.memoizedState=[u,r],u},useReducer:function(t,r,s){var u=Kt();if(s!==void 0){var g=s(r);if(Ha){$n(!0);try{s(r)}finally{$n(!1)}}}else g=r;return u.memoizedState=u.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},u.queue=t,t=t.dispatch=EE.bind(null,Me,t),[u.memoizedState,t]},useRef:function(t){var r=Kt();return t={current:t},r.memoizedState=t},useState:function(t){t=xf(t);var r=t.queue,s=fb.bind(null,Me,r);return r.dispatch=s,[t.memoizedState,s]},useDebugValue:Cf,useDeferredValue:function(t,r){var s=Kt();return jf(s,t,r)},useTransition:function(){var t=xf(!1);return t=lb.bind(null,Me,t.queue,!0,!1),Kt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,s){var u=Me,g=Kt();if(Ie){if(s===void 0)throw Error(o(407));s=s()}else{if(s=r(),nt===null)throw Error(o(349));(Be&127)!==0||zv(u,r,s)}g.memoizedState=s;var b={value:s,getSnapshot:r};return g.queue=b,Qv(Bv.bind(null,u,b,t),[t]),u.flags|=2048,Io(9,{destroy:void 0},Pv.bind(null,u,b,s,r),null),s},useId:function(){var t=Kt(),r=nt.identifierPrefix;if(Ie){var s=Jn,u=Qn;s=(u&~(1<<32-Ht(u)-1)).toString(32)+s,r="_"+r+"R_"+s,s=qi++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof u.is=="string"?w.createElement("select",{is:u.is}):w.createElement("select"),u.multiple?b.multiple=!0:u.size&&(b.size=u.size);break;default:b=typeof u.is=="string"?w.createElement(g,{is:u.is}):w.createElement(g)}}b[Lt]=r,b[en]=u;e:for(w=r.child;w!==null;){if(w.tag===5||w.tag===6)b.appendChild(w.stateNode);else if(w.tag!==4&&w.tag!==27&&w.child!==null){w.child.return=w,w=w.child;continue}if(w===r)break e;for(;w.sibling===null;){if(w.return===null||w.return===r)break e;w=w.return}w.sibling.return=w.return,w=w.sibling}r.stateNode=b;e:switch($t(b,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&wr(r)}}return it(r),Uf(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,s),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&wr(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(t=ne.current,_o(r)){if(t=r.stateNode,s=r.memoizedProps,u=null,g=zt,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}t[Lt]=r,t=!!(t.nodeValue===s||u!==null&&u.suppressHydrationWarning===!0||Dy(t.nodeValue,s)),t||Yr(r,!0)}else t=xc(t).createTextNode(u),t[Lt]=r,r.stateNode=t}return it(r),null;case 31:if(s=r.memoizedState,t===null||t.memoizedState!==null){if(u=_o(r),s!==null){if(t===null){if(!u)throw Error(o(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(o(557));t[Lt]=r}else La(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;it(r),t=!1}else s=Xd(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=s),t=!0;if(!t)return r.flags&256?(pn(r),r):(pn(r),null);if((r.flags&128)!==0)throw Error(o(558))}return it(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=_o(r),u!==null&&u.dehydrated!==null){if(t===null){if(!g)throw Error(o(318));if(g=r.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(o(317));g[Lt]=r}else La(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;it(r),g=!1}else g=Xd(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return r.flags&256?(pn(r),r):(pn(r),null)}return pn(r),(r.flags&128)!==0?(r.lanes=s,r):(s=u!==null,t=t!==null&&t.memoizedState!==null,s&&(u=r.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),b=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(b=u.memoizedState.cachePool.pool),b!==g&&(u.flags|=2048)),s!==t&&s&&(r.child.flags|=8192),oc(r,r.updateQueue),it(r),null);case 4:return pe(),t===null&&cm(r.stateNode.containerInfo),it(r),null;case 10:return br(r.type),it(r),null;case 19:if(O(vt),u=r.memoizedState,u===null)return it(r),null;if(g=(r.flags&128)!==0,b=u.rendering,b===null)if(g)il(u,!1);else{if(gt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(b=Yi(t),b!==null){for(r.flags|=128,il(u,!1),t=b.updateQueue,r.updateQueue=t,oc(r,t),r.subtreeFlags=0,t=s,s=r.child;s!==null;)fv(s,t),s=s.sibling;return H(vt,vt.current&1|2),Ie&&gr(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&Wt()>uc&&(r.flags|=128,g=!0,il(u,!1),r.lanes=4194304)}else{if(!g)if(t=Yi(b),t!==null){if(r.flags|=128,g=!0,t=t.updateQueue,r.updateQueue=t,oc(r,t),il(u,!0),u.tail===null&&u.tailMode==="hidden"&&!b.alternate&&!Ie)return it(r),null}else 2*Wt()-u.renderingStartTime>uc&&s!==536870912&&(r.flags|=128,g=!0,il(u,!1),r.lanes=4194304);u.isBackwards?(b.sibling=r.child,r.child=b):(t=u.last,t!==null?t.sibling=b:r.child=b,u.last=b)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=Wt(),t.sibling=null,s=vt.current,H(vt,g?s&1|2:s&1),Ie&&gr(r,u.treeForkCount),t):(it(r),null);case 22:case 23:return pn(r),uf(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(s&536870912)!==0&&(r.flags&128)===0&&(it(r),r.subtreeFlags&6&&(r.flags|=8192)):it(r),s=r.updateQueue,s!==null&&oc(r,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==s&&(r.flags|=2048),t!==null&&O(Ba),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),r.memoizedState.cache!==s&&(r.flags|=2048),br(yt),it(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function AE(t,r){switch(qd(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return br(yt),pe(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return se(r),null;case 31:if(r.memoizedState!==null){if(pn(r),r.alternate===null)throw Error(o(340));La()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(pn(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(o(340));La()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return O(vt),null;case 4:return pe(),null;case 10:return br(r.type),null;case 22:case 23:return pn(r),uf(),t!==null&&O(Ba),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return br(yt),null;case 25:return null;default:return null}}function $b(t,r){switch(qd(r),r.tag){case 3:br(yt),pe();break;case 26:case 27:case 5:se(r);break;case 4:pe();break;case 31:r.memoizedState!==null&&pn(r);break;case 13:pn(r);break;case 19:O(vt);break;case 10:br(r.type);break;case 22:case 23:pn(r),uf(),t!==null&&O(Ba);break;case 24:br(yt)}}function cl(t,r){try{var s=r.updateQueue,u=s!==null?s.lastEffect:null;if(u!==null){var g=u.next;s=g;do{if((s.tag&t)===t){u=void 0;var b=s.create,w=s.inst;u=b(),w.destroy=u}s=s.next}while(s!==g)}}catch(T){Xe(r,r.return,T)}}function Jr(t,r,s){try{var u=r.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var b=g.next;u=b;do{if((u.tag&t)===t){var w=u.inst,T=w.destroy;if(T!==void 0){w.destroy=void 0,g=r;var D=s,Y=T;try{Y()}catch(te){Xe(g,D,te)}}}u=u.next}while(u!==b)}}catch(te){Xe(r,r.return,te)}}function Ib(t){var r=t.updateQueue;if(r!==null){var s=t.stateNode;try{Av(r,s)}catch(u){Xe(t,t.return,u)}}}function Ub(t,r,s){s.props=Va(t.type,t.memoizedProps),s.state=t.memoizedState;try{s.componentWillUnmount()}catch(u){Xe(t,r,u)}}function ul(t,r){try{var s=t.ref;if(s!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof s=="function"?t.refCleanup=s(u):s.current=u}}catch(g){Xe(t,r,g)}}function er(t,r){var s=t.ref,u=t.refCleanup;if(s!==null)if(typeof u=="function")try{u()}catch(g){Xe(t,r,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof s=="function")try{s(null)}catch(g){Xe(t,r,g)}else s.current=null}function Hb(t){var r=t.type,s=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":s.autoFocus&&u.focus();break e;case"img":s.src?u.src=s.src:s.srcSet&&(u.srcset=s.srcSet)}}catch(g){Xe(t,t.return,g)}}function Hf(t,r,s){try{var u=t.stateNode;QE(u,t.type,s,r),u[en]=r}catch(g){Xe(t,t.return,g)}}function Vb(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&sa(t.type)||t.tag===4}function Vf(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Vb(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&sa(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Gf(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s).insertBefore(t,r):(r=s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,r.appendChild(t),s=s._reactRootContainer,s!=null||r.onclick!==null||(r.onclick=mr));else if(u!==4&&(u===27&&sa(t.type)&&(s=t.stateNode,r=null),t=t.child,t!==null))for(Gf(t,r,s),t=t.sibling;t!==null;)Gf(t,r,s),t=t.sibling}function sc(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?s.insertBefore(t,r):s.appendChild(t);else if(u!==4&&(u===27&&sa(t.type)&&(s=t.stateNode),t=t.child,t!==null))for(sc(t,r,s),t=t.sibling;t!==null;)sc(t,r,s),t=t.sibling}function Gb(t){var r=t.stateNode,s=t.memoizedProps;try{for(var u=t.type,g=r.attributes;g.length;)r.removeAttributeNode(g[0]);$t(r,u,s),r[Lt]=t,r[en]=s}catch(b){Xe(t,t.return,b)}}var Cr=!1,wt=!1,Ff=!1,Fb=typeof WeakSet=="function"?WeakSet:Set,Mt=null;function _E(t,r){if(t=t.containerInfo,fm=kc,t=rv(t),Pd(t)){if("selectionStart"in t)var s={start:t.selectionStart,end:t.selectionEnd};else e:{s=(s=t.ownerDocument)&&s.defaultView||window;var u=s.getSelection&&s.getSelection();if(u&&u.rangeCount!==0){s=u.anchorNode;var g=u.anchorOffset,b=u.focusNode;u=u.focusOffset;try{s.nodeType,b.nodeType}catch{s=null;break e}var w=0,T=-1,D=-1,Y=0,te=0,le=t,W=null;t:for(;;){for(var X;le!==s||g!==0&&le.nodeType!==3||(T=w+g),le!==b||u!==0&&le.nodeType!==3||(D=w+u),le.nodeType===3&&(w+=le.nodeValue.length),(X=le.firstChild)!==null;)W=le,le=X;for(;;){if(le===t)break t;if(W===s&&++Y===g&&(T=w),W===b&&++te===u&&(D=w),(X=le.nextSibling)!==null)break;le=W,W=le.parentNode}le=X}s=T===-1||D===-1?null:{start:T,end:D}}else s=null}s=s||{start:0,end:0}}else s=null;for(mm={focusedElem:t,selectionRange:s},kc=!1,Mt=r;Mt!==null;)if(r=Mt,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Mt=t;else for(;Mt!==null;){switch(r=Mt,b=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(s=0;s title"))),$t(b,u,s),b[Lt]=t,_t(b),u=b;break e;case"link":var w=Zy("link","href",g).get(u+(s.href||""));if(w){for(var T=0;Ttt&&(w=tt,tt=Ne,Ne=w);var $=tv(T,Ne),P=tv(T,tt);if($&&P&&(X.rangeCount!==1||X.anchorNode!==$.node||X.anchorOffset!==$.offset||X.focusNode!==P.node||X.focusOffset!==P.offset)){var F=le.createRange();F.setStart($.node,$.offset),X.removeAllRanges(),Ne>tt?(X.addRange(F),X.extend(P.node,P.offset)):(F.setEnd(P.node,P.offset),X.addRange(F))}}}}for(le=[],X=T;X=X.parentNode;)X.nodeType===1&&le.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof T.focus=="function"&&T.focus(),T=0;Ts?32:s,M.T=null,s=Qf,Qf=null;var b=ra,w=Tr;if(jt=0,Fo=ra=null,Tr=0,(Ye&6)!==0)throw Error(o(331));var T=Ye;if(Ye|=4,ny(b.current),Jb(b,b.current,w,s),Ye=T,gl(0,!1),qt&&typeof qt.onPostCommitFiberRoot=="function")try{qt.onPostCommitFiberRoot(Na,b)}catch{}return!0}finally{K.p=g,M.T=u,xy(t,r)}}function wy(t,r,s){r=kn(s,r),r=_f(t.stateNode,r,2),t=Xr(t,r,2),t!==null&&(mt(t,2),tr(t))}function Xe(t,r,s){if(t.tag===3)wy(t,t,s);else for(;r!==null;){if(r.tag===3){wy(r,t,s);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(na===null||!na.has(u))){t=kn(s,t),s=Cb(2),u=Xr(r,s,2),u!==null&&(jb(s,u,r,t),mt(u,2),tr(u));break}}r=r.return}}function nm(t,r,s){var u=t.pingCache;if(u===null){u=t.pingCache=new DE;var g=new Set;u.set(r,g)}else g=u.get(r),g===void 0&&(g=new Set,u.set(r,g));g.has(s)||(qf=!0,g.add(s),t=$E.bind(null,t,r,s),r.then(t,t))}function $E(t,r,s){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,nt===t&&(Be&s)===s&&(gt===4||gt===3&&(Be&62914560)===Be&&300>Wt()-cc?(Ye&2)===0&&Yo(t,0):Kf|=s,Go===Be&&(Go=0)),tr(t)}function Cy(t,r){r===0&&(r=Vt()),t=Oa(t,r),t!==null&&(mt(t,r),tr(t))}function IE(t){var r=t.memoizedState,s=0;r!==null&&(s=r.retryLane),Cy(t,s)}function UE(t,r){var s=0;switch(t.tag){case 31:case 13:var u=t.stateNode,g=t.memoizedState;g!==null&&(s=g.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),Cy(t,s)}function HE(t,r){return Os(t,r)}var gc=null,qo=null,rm=!1,vc=!1,am=!1,oa=0;function tr(t){t!==qo&&t.next===null&&(qo===null?gc=qo=t:qo=qo.next=t),vc=!0,rm||(rm=!0,GE())}function gl(t,r){if(!am&&vc){am=!0;do for(var s=!1,u=gc;u!==null;){if(t!==0){var g=u.pendingLanes;if(g===0)var b=0;else{var w=u.suspendedLanes,T=u.pingedLanes;b=(1<<31-Ht(42|t)+1)-1,b&=g&~(w&~T),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(s=!0,ky(u,b))}else b=Be,b=Te(u,u===nt?b:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(b&3)===0||ut(u,b)||(s=!0,ky(u,b));u=u.next}while(s);am=!1}}function VE(){jy()}function jy(){vc=rm=!1;var t=0;oa!==0&&eN()&&(t=oa);for(var r=Wt(),s=null,u=gc;u!==null;){var g=u.next,b=Ey(u,r);b===0?(u.next=null,s===null?gc=g:s.next=g,g===null&&(qo=s)):(s=u,(t!==0||(b&3)!==0)&&(vc=!0)),u=g}jt!==0&&jt!==5||gl(t),oa!==0&&(oa=0)}function Ey(t,r){for(var s=t.suspendedLanes,u=t.pingedLanes,g=t.expirationTimes,b=t.pendingLanes&-62914561;0T)break;var te=D.transferSize,le=D.initiatorType;te&&Ly(le)&&(D=D.responseEnd,w+=te*(D"u"?null:document;function Wy(t,r,s){var u=Ko;if(u&&typeof r=="string"&&r){var g=En(r);g='link[rel="'+t+'"][href="'+g+'"]',typeof s=="string"&&(g+='[crossorigin="'+s+'"]'),Yy.has(g)||(Yy.add(g),t={rel:t,crossOrigin:s,href:r},u.querySelector(g)===null&&(r=u.createElement("link"),$t(r,"link",t),_t(r),u.head.appendChild(r)))}}function cN(t){Rr.D(t),Wy("dns-prefetch",t,null)}function uN(t,r){Rr.C(t,r),Wy("preconnect",t,r)}function dN(t,r,s){Rr.L(t,r,s);var u=Ko;if(u&&t&&r){var g='link[rel="preload"][as="'+En(r)+'"]';r==="image"&&s&&s.imageSrcSet?(g+='[imagesrcset="'+En(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(g+='[imagesizes="'+En(s.imageSizes)+'"]')):g+='[href="'+En(t)+'"]';var b=g;switch(r){case"style":b=Xo(t);break;case"script":b=Zo(t)}On.has(b)||(t=v({rel:"preload",href:r==="image"&&s&&s.imageSrcSet?void 0:t,as:r},s),On.set(b,t),u.querySelector(g)!==null||r==="style"&&u.querySelector(xl(b))||r==="script"&&u.querySelector(Sl(b))||(r=u.createElement("link"),$t(r,"link",t),_t(r),u.head.appendChild(r)))}}function fN(t,r){Rr.m(t,r);var s=Ko;if(s&&t){var u=r&&typeof r.as=="string"?r.as:"script",g='link[rel="modulepreload"][as="'+En(u)+'"][href="'+En(t)+'"]',b=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=Zo(t)}if(!On.has(b)&&(t=v({rel:"modulepreload",href:t},r),On.set(b,t),s.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(Sl(b)))return}u=s.createElement("link"),$t(u,"link",t),_t(u),s.head.appendChild(u)}}}function mN(t,r,s){Rr.S(t,r,s);var u=Ko;if(u&&t){var g=bo(u).hoistableStyles,b=Xo(t);r=r||"default";var w=g.get(b);if(!w){var T={loading:0,preload:null};if(w=u.querySelector(xl(b)))T.loading=5;else{t=v({rel:"stylesheet",href:t,"data-precedence":r},s),(s=On.get(b))&&xm(t,s);var D=w=u.createElement("link");_t(D),$t(D,"link",t),D._p=new Promise(function(Y,te){D.onload=Y,D.onerror=te}),D.addEventListener("load",function(){T.loading|=1}),D.addEventListener("error",function(){T.loading|=2}),T.loading|=4,wc(w,r,u)}w={type:"stylesheet",instance:w,count:1,state:T},g.set(b,w)}}}function pN(t,r){Rr.X(t,r);var s=Ko;if(s&&t){var u=bo(s).hoistableScripts,g=Zo(t),b=u.get(g);b||(b=s.querySelector(Sl(g)),b||(t=v({src:t,async:!0},r),(r=On.get(g))&&Sm(t,r),b=s.createElement("script"),_t(b),$t(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function hN(t,r){Rr.M(t,r);var s=Ko;if(s&&t){var u=bo(s).hoistableScripts,g=Zo(t),b=u.get(g);b||(b=s.querySelector(Sl(g)),b||(t=v({src:t,async:!0,type:"module"},r),(r=On.get(g))&&Sm(t,r),b=s.createElement("script"),_t(b),$t(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function qy(t,r,s,u){var g=(g=ne.current)?Sc(g):null;if(!g)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(r=Xo(s.href),s=bo(g).hoistableStyles,u=s.get(r),u||(u={type:"style",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=Xo(s.href);var b=bo(g).hoistableStyles,w=b.get(t);if(w||(g=g.ownerDocument||g,w={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(t,w),(b=g.querySelector(xl(t)))&&!b._p&&(w.instance=b,w.state.loading=5),On.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},On.set(t,s),b||gN(g,t,s,w.state))),r&&u===null)throw Error(o(528,""));return w}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=s.async,s=s.src,typeof s=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Zo(s),s=bo(g).hoistableScripts,u=s.get(r),u||(u={type:"script",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function Xo(t){return'href="'+En(t)+'"'}function xl(t){return'link[rel="stylesheet"]['+t+"]"}function Ky(t){return v({},t,{"data-precedence":t.precedence,precedence:null})}function gN(t,r,s,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),$t(r,"link",s),_t(r),t.head.appendChild(r))}function Zo(t){return'[src="'+En(t)+'"]'}function Sl(t){return"script[async]"+t}function Xy(t,r,s){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+En(s.href)+'"]');if(u)return r.instance=u,_t(u),u;var g=v({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),_t(u),$t(u,"style",g),wc(u,s.precedence,t),r.instance=u;case"stylesheet":g=Xo(s.href);var b=t.querySelector(xl(g));if(b)return r.state.loading|=4,r.instance=b,_t(b),b;u=Ky(s),(g=On.get(g))&&xm(u,g),b=(t.ownerDocument||t).createElement("link"),_t(b);var w=b;return w._p=new Promise(function(T,D){w.onload=T,w.onerror=D}),$t(b,"link",u),r.state.loading|=4,wc(b,s.precedence,t),r.instance=b;case"script":return b=Zo(s.src),(g=t.querySelector(Sl(b)))?(r.instance=g,_t(g),g):(u=s,(g=On.get(b))&&(u=v({},s),Sm(u,g)),t=t.ownerDocument||t,g=t.createElement("script"),_t(g),$t(g,"link",u),t.head.appendChild(g),r.instance=g);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,wc(u,s.precedence,t));return r.instance}function wc(t,r,s){for(var u=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,b=g,w=0;w title"):null)}function vN(t,r,s){if(s===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function Jy(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function bN(t,r,s,u){if(s.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(s.state.loading&4)===0){if(s.instance===null){var g=Xo(u.href),b=r.querySelector(xl(g));if(b){r=b._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=jc.bind(t),r.then(t,t)),s.state.loading|=4,s.instance=b,_t(b);return}b=r.ownerDocument||r,u=Ky(u),(g=On.get(g))&&xm(u,g),b=b.createElement("link"),_t(b);var w=b;w._p=new Promise(function(T,D){w.onload=T,w.onerror=D}),$t(b,"link",u),s.instance=b}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(s,r),(r=s.state.preload)&&(s.state.loading&3)===0&&(t.count++,s=jc.bind(t),r.addEventListener("load",s),r.addEventListener("error",s))}}var wm=0;function yN(t,r){return t.stylesheets&&t.count===0&&Nc(t,t.stylesheets),0wm?50:800)+r);return t.unsuspend=s,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function jc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Nc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Ec=null;function Nc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Ec=new Map,r.forEach(xN,t),Ec=null,jc.call(t))}function xN(t,r){if(!(r.state.loading&4)){var s=Ec.get(t);if(s)var u=s.get(null);else{s=new Map,Ec.set(t,s);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),_m.exports=BN(),_m.exports}var IN=$N();/** - * react-router v7.15.1 - * - * 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 - */var j1="popstate";function E1(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function UN(e={}){function n(o,l){var p;let i=(p=l.state)==null?void 0:p.masked,{pathname:d,search:m,hash:h}=i||o.location;return pp("",{pathname:d,search:m,hash:h},l.state&&l.state.usr||null,l.state&&l.state.key||"default",i?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,l){return typeof l=="string"?l:Il(l)}return VN(n,a,null,e)}function ft(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function Pn(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function HN(){return Math.random().toString(36).substring(2,10)}function N1(e,n){return{usr:e.state,key:e.key,idx:n,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function pp(e,n,a=null,o,l){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof n=="string"?ws(n):n,state:a,key:n&&n.key||o||HN(),mask:l}}function Il({pathname:e="/",search:n="",hash:a=""}){return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function ws(e){let n={};if(e){let a=e.indexOf("#");a>=0&&(n.hash=e.substring(a),e=e.substring(0,a));let o=e.indexOf("?");o>=0&&(n.search=e.substring(o),e=e.substring(0,o)),e&&(n.pathname=e)}return n}function VN(e,n,a,o={}){let{window:l=document.defaultView,v5Compat:i=!1}=o,d=l.history,m="POP",h=null,p=y();p==null&&(p=0,d.replaceState({...d.state,idx:p},""));function y(){return(d.state||{idx:null}).idx}function v(){m="POP";let N=y(),E=N==null?null:N-p;p=N,h&&h({action:m,location:C.location,delta:E})}function x(N,E){m="PUSH";let k=E1(N)?N:pp(C.location,N,E);p=y()+1;let A=N1(k,p),R=C.createHref(k.mask||k);try{d.pushState(A,"",R)}catch(L){if(L instanceof DOMException&&L.name==="DataCloneError")throw L;l.location.assign(R)}i&&h&&h({action:m,location:C.location,delta:1})}function S(N,E){m="REPLACE";let k=E1(N)?N:pp(C.location,N,E);p=y();let A=N1(k,p),R=C.createHref(k.mask||k);d.replaceState(A,"",R),i&&h&&h({action:m,location:C.location,delta:0})}function j(N){return GN(N)}let C={get action(){return m},get location(){return e(l,d)},listen(N){if(h)throw new Error("A history only accepts one active listener");return l.addEventListener(j1,v),h=N,()=>{l.removeEventListener(j1,v),h=null}},createHref(N){return n(l,N)},createURL:j,encodeLocation(N){let E=j(N);return{pathname:E.pathname,search:E.search,hash:E.hash}},push:x,replace:S,go(N){return d.go(N)}};return C}function GN(e,n=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),ft(a,"No window.location.(origin|href) available to create URL");let o=typeof e=="string"?e:Il(e);return o=o.replace(/ $/,"%20"),!n&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function Qx(e,n,a="/"){return FN(e,n,a,!1)}function FN(e,n,a,o,l){let i=typeof n=="string"?ws(n):n,d=Or(i.pathname||"/",a);if(d==null)return null;let m=YN(e),h=null,p=a3(d);for(let y=0;h==null&&y{let y={relativePath:p===void 0?d.path||"":p,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(y.relativePath.startsWith("/")){if(!y.relativePath.startsWith(o)&&h)return;ft(y.relativePath.startsWith(o),`Absolute route path "${y.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),y.relativePath=y.relativePath.slice(o.length)}let v=Fn([o,y.relativePath]),x=a.concat(y);d.children&&d.children.length>0&&(ft(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),Jx(d.children,n,x,v,h)),!(d.path==null&&!d.index)&&n.push({path:v,score:e3(v,d.index),routesMeta:x})};return e.forEach((d,m)=>{var h;if(d.path===""||!((h=d.path)!=null&&h.includes("?")))i(d,m);else for(let p of e0(d.path))i(d,m,!0,p)}),n}function e0(e){let n=e.split("/");if(n.length===0)return[];let[a,...o]=n,l=a.endsWith("?"),i=a.replace(/\?$/,"");if(o.length===0)return l?[i,""]:[i];let d=e0(o.join("/")),m=[];return m.push(...d.map(h=>h===""?i:[i,h].join("/"))),l&&m.push(...d),m.map(h=>e.startsWith("/")&&h===""?"/":h)}function WN(e){e.sort((n,a)=>n.score!==a.score?a.score-n.score:t3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var qN=/^:[\w-]+$/,KN=3,XN=2,ZN=1,QN=10,JN=-2,k1=e=>e==="*";function e3(e,n){let a=e.split("/"),o=a.length;return a.some(k1)&&(o+=JN),n&&(o+=XN),a.filter(l=>!k1(l)).reduce((l,i)=>l+(qN.test(i)?KN:i===""?ZN:QN),o)}function t3(e,n){return e.length===n.length&&e.slice(0,-1).every((o,l)=>o===n[l])?e[e.length-1]-n[n.length-1]:0}function n3(e,n,a=!1){let{routesMeta:o}=e,l={},i="/",d=[];for(let m=0;m{if(y==="*"){let j=m[x]||"";d=i.slice(0,i.length-j.length).replace(/(.)\/+$/,"$1")}const S=m[x];return v&&!S?p[y]=void 0:p[y]=(S||"").replace(/%2F/g,"/"),p},{}),pathname:i,pathnameBase:d,pattern:e}}function r3(e,n=!1,a=!0){Pn(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 o=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,h,p,y)=>{if(o.push({paramName:m,isOptional:h!=null}),h){let v=y.charAt(p+d.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(o.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,n?void 0:"i"),o]}function a3(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return Pn(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),e}}function Or(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=e.charAt(a);return o&&o!=="/"?null:e.slice(a)||"/"}var o3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function s3(e,n="/"){let{pathname:a,search:o="",hash:l=""}=typeof e=="string"?ws(e):e,i;return a?(a=t0(a),a.startsWith("/")?i=T1(a.substring(1),"/"):i=T1(a,n)):i=n,{pathname:i,search:c3(o),hash:u3(l)}}function T1(e,n){let a=ou(n).split("/");return e.split("/").forEach(l=>{l===".."?a.length>1&&a.pop():l!=="."&&a.push(l)}),a.length>1?a.join("/"):"/"}function Lm(e,n,a,o){return`Cannot include a '${e}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function l3(e){return e.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function rh(e){let n=l3(e);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function ju(e,n,a,o=!1){let l;typeof e=="string"?l=ws(e):(l={...e},ft(!l.pathname||!l.pathname.includes("?"),Lm("?","pathname","search",l)),ft(!l.pathname||!l.pathname.includes("#"),Lm("#","pathname","hash",l)),ft(!l.search||!l.search.includes("#"),Lm("#","search","hash",l)));let i=e===""||l.pathname==="",d=i?"/":l.pathname,m;if(d==null)m=a;else{let v=n.length-1;if(!o&&d.startsWith("..")){let x=d.split("/");for(;x[0]==="..";)x.shift(),v-=1;l.pathname=x.join("/")}m=v>=0?n[v]:"/"}let h=s3(l,m),p=d&&d!=="/"&&d.endsWith("/"),y=(i||d===".")&&a.endsWith("/");return!h.pathname.endsWith("/")&&(p||y)&&(h.pathname+="/"),h}var t0=e=>e.replace(/\/\/+/g,"/"),Fn=e=>t0(e.join("/")),ou=e=>e.replace(/\/+$/,""),i3=e=>ou(e).replace(/^\/*/,"/"),c3=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,u3=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,d3=class{constructor(e,n,a,o=!1){this.status=e,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function f3(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function m3(e){let n=e.map(a=>a.route.path).filter(Boolean);return Fn(n)||"/"}var n0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function r0(e,n){let a=e;if(typeof a!="string"||!o3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,l=!1;if(n0)try{let i=new URL(window.location.href),d=a.startsWith("//")?new URL(i.protocol+a):new URL(a),m=Or(d.pathname,n);d.origin===i.origin&&m!=null?a=m+d.search+d.hash:l=!0}catch{Pn(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:l,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var a0=["POST","PUT","PATCH","DELETE"];new Set(a0);var p3=["GET",...a0];new Set(p3);var Cs=f.createContext(null);Cs.displayName="DataRouter";var Eu=f.createContext(null);Eu.displayName="DataRouterState";var o0=f.createContext(!1);function h3(){return f.useContext(o0)}var s0=f.createContext({isTransitioning:!1});s0.displayName="ViewTransition";var g3=f.createContext(new Map);g3.displayName="Fetchers";var v3=f.createContext(null);v3.displayName="Await";var xn=f.createContext(null);xn.displayName="Navigation";var Zl=f.createContext(null);Zl.displayName="Location";var qn=f.createContext({outlet:null,matches:[],isDataRoute:!1});qn.displayName="Route";var ah=f.createContext(null);ah.displayName="RouteError";var l0="REACT_ROUTER_ERROR",b3="REDIRECT",y3="ROUTE_ERROR_RESPONSE";function x3(e){if(e.startsWith(`${l0}:${b3}:{`))try{let n=JSON.parse(e.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function S3(e){if(e.startsWith(`${l0}:${y3}:{`))try{let n=JSON.parse(e.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new d3(n.status,n.statusText,n.data)}catch{}}function w3(e,{relative:n}={}){ft(js(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(xn),{hash:l,pathname:i,search:d}=Ql(e,{relative:n}),m=i;return a!=="/"&&(m=i==="/"?a:Fn([a,i])),o.createHref({pathname:m,search:d,hash:l})}function js(){return f.useContext(Zl)!=null}function Sn(){return ft(js(),"useLocation() may be used only in the context of a component."),f.useContext(Zl).location}var i0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function c0(e){f.useContext(xn).static||f.useLayoutEffect(e)}function oo(){let{isDataRoute:e}=f.useContext(qn);return e?P3():C3()}function C3(){ft(js(),"useNavigate() may be used only in the context of a component.");let e=f.useContext(Cs),{basename:n,navigator:a}=f.useContext(xn),{matches:o}=f.useContext(qn),{pathname:l}=Sn(),i=JSON.stringify(rh(o)),d=f.useRef(!1);return c0(()=>{d.current=!0}),f.useCallback((h,p={})=>{if(Pn(d.current,i0),!d.current)return;if(typeof h=="number"){a.go(h);return}let y=ju(h,JSON.parse(i),l,p.relative==="path");e==null&&n!=="/"&&(y.pathname=y.pathname==="/"?n:Fn([n,y.pathname])),(p.replace?a.replace:a.push)(y,p.state,p)},[n,a,i,l,e])}var j3=f.createContext(null);function E3(e){let n=f.useContext(qn).outlet;return f.useMemo(()=>n&&f.createElement(j3.Provider,{value:e},n),[n,e])}function Ql(e,{relative:n}={}){let{matches:a}=f.useContext(qn),{pathname:o}=Sn(),l=JSON.stringify(rh(a));return f.useMemo(()=>ju(e,JSON.parse(l),o,n==="path"),[e,l,o,n])}function N3(e,n){return u0(e,n)}function u0(e,n,a){var N;ft(js(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(xn),{matches:l}=f.useContext(qn),i=l[l.length-1],d=i?i.params:{},m=i?i.pathname:"/",h=i?i.pathnameBase:"/",p=i&&i.route;{let E=p&&p.path||"";f0(m,!p||E.endsWith("*")||E.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let y=Sn(),v;if(n){let E=typeof n=="string"?ws(n):n;ft(h==="/"||((N=E.pathname)==null?void 0:N.startsWith(h)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${h}" but pathname "${E.pathname}" was given in the \`location\` prop.`),v=E}else v=y;let x=v.pathname||"/",S=x;if(h!=="/"){let E=h.replace(/^\//,"").split("/");S="/"+x.replace(/^\//,"").split("/").slice(E.length).join("/")}let j=a&&a.state.matches.length?a.state.matches.map(E=>Object.assign(E,{route:a.manifest[E.route.id]||E.route})):Qx(e,{pathname:S});Pn(p||j!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),Pn(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let C=_3(j&&j.map(E=>Object.assign({},E,{params:Object.assign({},d,E.params),pathname:Fn([h,o.encodeLocation?o.encodeLocation(E.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathname]),pathnameBase:E.pathnameBase==="/"?h:Fn([h,o.encodeLocation?o.encodeLocation(E.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathnameBase])})),l,a);return n&&C?f.createElement(Zl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},C):C}function k3(){let e=z3(),n=f3(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",l={padding:"0.5rem",backgroundColor:o},i={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",e),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:i},"ErrorBoundary")," or"," ",f.createElement("code",{style:i},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:l},a):null,d)}var T3=f.createElement(k3,null),d0=class extends f.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){this.props.onError?this.props.onError(e,n):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=S3(e.digest);a&&(e=a)}let n=e!==void 0?f.createElement(qn.Provider,{value:this.props.routeContext},f.createElement(ah.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?f.createElement(R3,{error:e},n):n}};d0.contextType=o0;var zm=new WeakMap;function R3({children:e,error:n}){let{basename:a}=f.useContext(xn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=x3(n.digest);if(o){let l=zm.get(n);if(l)throw l;let i=r0(o.location,a);if(n0&&!zm.get(n))if(i.isExternal||o.reloadDocument)window.location.href=i.absoluteURL||i.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:o.replace}));throw zm.set(n,d),d}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${i.absoluteURL||i.to}`})}}return e}function A3({routeContext:e,match:n,children:a}){let o=f.useContext(Cs);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(qn.Provider,{value:e},a)}function _3(e,n=[],a){let o=a==null?void 0:a.state;if(e==null){if(!o)return null;if(o.errors)e=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)e=o.matches;else return null}let l=e,i=o==null?void 0:o.errors;if(i!=null){let y=l.findIndex(v=>v.route.id&&(i==null?void 0:i[v.route.id])!==void 0);ft(y>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(i).join(",")}`),l=l.slice(0,Math.min(l.length,y+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let y=0;y=0?l=l.slice(0,m+1):l=[l[0]];break}}}}let h=a==null?void 0:a.onError,p=o&&h?(y,v)=>{var x,S;h(y,{location:o.location,params:((S=(x=o.matches)==null?void 0:x[0])==null?void 0:S.params)??{},pattern:m3(o.matches),errorInfo:v})}:void 0;return l.reduceRight((y,v,x)=>{let S,j=!1,C=null,N=null;o&&(S=i&&v.route.id?i[v.route.id]:void 0,C=v.route.errorElement||T3,d&&(m<0&&x===0?(f0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,N=null):m===x&&(j=!0,N=v.route.hydrateFallbackElement||null)));let E=n.concat(l.slice(0,x+1)),k=()=>{let A;return S?A=C:j?A=N:v.route.Component?A=f.createElement(v.route.Component,null):v.route.element?A=v.route.element:A=y,f.createElement(A3,{match:v,routeContext:{outlet:y,matches:E,isDataRoute:o!=null},children:A})};return o&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?f.createElement(d0,{location:o.location,revalidation:o.revalidation,component:C,error:S,children:k(),routeContext:{outlet:null,matches:E,isDataRoute:!0},onError:p}):k()},null)}function oh(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function M3(e){let n=f.useContext(Cs);return ft(n,oh(e)),n}function O3(e){let n=f.useContext(Eu);return ft(n,oh(e)),n}function D3(e){let n=f.useContext(qn);return ft(n,oh(e)),n}function sh(e){let n=D3(e),a=n.matches[n.matches.length-1];return ft(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function L3(){return sh("useRouteId")}function z3(){var o;let e=f.useContext(ah),n=O3("useRouteError"),a=sh("useRouteError");return e!==void 0?e:(o=n.errors)==null?void 0:o[a]}function P3(){let{router:e}=M3("useNavigate"),n=sh("useNavigate"),a=f.useRef(!1);return c0(()=>{a.current=!0}),f.useCallback(async(l,i={})=>{Pn(a.current,i0),a.current&&(typeof l=="number"?await e.navigate(l):await e.navigate(l,{fromRouteId:n,...i}))},[e,n])}var R1={};function f0(e,n,a){!n&&!R1[e]&&(R1[e]=!0,Pn(!1,a))}f.memo(B3);function B3({routes:e,manifest:n,future:a,state:o,isStatic:l,onError:i}){return u0(e,void 0,{manifest:n,state:o,isStatic:l,onError:i})}function Mr({to:e,replace:n,state:a,relative:o}){ft(js()," may be used only in the context of a component.");let{static:l}=f.useContext(xn);Pn(!l," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:i}=f.useContext(qn),{pathname:d}=Sn(),m=oo(),h=ju(e,rh(i),d,o==="path"),p=JSON.stringify(h);return f.useEffect(()=>{m(JSON.parse(p),{replace:n,state:a,relative:o})},[m,p,o,n,a]),null}function $3(e){return E3(e.context)}function ln(e){ft(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function I3({basename:e="/",children:n=null,location:a,navigationType:o="POP",navigator:l,static:i=!1,useTransitions:d}){ft(!js(),"You cannot render a inside another . You should never have more than one in your app.");let m=e.replace(/^\/*/,"/"),h=f.useMemo(()=>({basename:m,navigator:l,static:i,useTransitions:d,future:{}}),[m,l,i,d]);typeof a=="string"&&(a=ws(a));let{pathname:p="/",search:y="",hash:v="",state:x=null,key:S="default",mask:j}=a,C=f.useMemo(()=>{let N=Or(p,m);return N==null?null:{location:{pathname:N,search:y,hash:v,state:x,key:S,mask:j},navigationType:o}},[m,p,y,v,x,S,o,j]);return Pn(C!=null,` is not able to match the URL "${p}${y}${v}" because it does not start with the basename, so the won't render anything.`),C==null?null:f.createElement(xn.Provider,{value:h},f.createElement(Zl.Provider,{children:n,value:C}))}function A1({children:e,location:n}){return N3(hp(e),n)}function hp(e,n=[]){let a=[];return f.Children.forEach(e,(o,l)=>{if(!f.isValidElement(o))return;let i=[...n,l];if(o.type===f.Fragment){a.push.apply(a,hp(o.props.children,i));return}ft(o.type===ln,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),ft(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||i.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=hp(o.props.children,i)),a.push(d)}),a}var qc="get",Kc="application/x-www-form-urlencoded";function Nu(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function U3(e){return Nu(e)&&e.tagName.toLowerCase()==="button"}function H3(e){return Nu(e)&&e.tagName.toLowerCase()==="form"}function V3(e){return Nu(e)&&e.tagName.toLowerCase()==="input"}function G3(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function F3(e,n){return e.button===0&&(!n||n==="_self")&&!G3(e)}function gp(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,a)=>{let o=e[a];return n.concat(Array.isArray(o)?o.map(l=>[a,l]):[[a,o]])},[]))}function Y3(e,n){let a=gp(e);return n&&n.forEach((o,l)=>{a.has(l)||n.getAll(l).forEach(i=>{a.append(l,i)})}),a}var Dc=null;function W3(){if(Dc===null)try{new FormData(document.createElement("form"),0),Dc=!1}catch{Dc=!0}return Dc}var q3=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Pm(e){return e!=null&&!q3.has(e)?(Pn(!1,`"${e}" is not a valid \`encType\` for \`\`/\`\` and will default to "${Kc}"`),null):e}function K3(e,n){let a,o,l,i,d;if(H3(e)){let m=e.getAttribute("action");o=m?Or(m,n):null,a=e.getAttribute("method")||qc,l=Pm(e.getAttribute("enctype"))||Kc,i=new FormData(e)}else if(U3(e)||V3(e)&&(e.type==="submit"||e.type==="image")){let m=e.form;if(m==null)throw new Error('Cannot submit a `,L=>`${R}-${L.id}`)}const N=x`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${S(n.skinTones,(k,A)=>x`
${k}
`,k=>k)}
${S(n.currentEmojisWithCategories,(k,A)=>x`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,E=(k,A)=>{for(const R of e.querySelectorAll(`[${k}]`))A(R,R.getAttribute(k))};if(h){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(A,R)=>{A.addEventListener(k,o[R])});E("data-ref",(k,A)=>{i[A]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,A)=>{let R=m.get(A);R||m.set(A,R=new WeakSet),R.has(k)||(R.add(k),l[A](k))})}const wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function Ez(e){let n=!1,a;const o=new Map,l=new Set;let i;const d=()=>{if(n)return;const p=[...l];l.clear();try{for(const y of p)y()}finally{i=!1,l.size&&(i=!0,wu(d))}},m=new Proxy({},{get(p,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return p[y]},set(p,y,v){if(p[y]!==v){p[y]=v;const x=o.get(y);if(x){for(const S of x)l.add(S);i||(i=!0,wu(d))}}return!0}}),h=p=>{const y=()=>{const v=a;a=y;try{return p()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:h}}function fp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const mp=[],{assign:Yc}=Object;function kz(e,n){const a={},o=new AbortController,l=o.signal,{state:i,createEffect:d}=Ez(l),m=new Map;Yc(i,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Yc(i,n),Yc(i,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:YL,isRtl:!1,currentGroupIndex:0,groups:lp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{i.currentGroup!==i.groups[i.currentGroupIndex]&&(i.currentGroup=i.groups[i.currentGroupIndex])});const h=G=>{e.getElementById(G).focus()},p=G=>e.getElementById(`emo-${G.id}`),y=(G,se)=>{a.rootElement.dispatchEvent(new CustomEvent(G,{detail:se,bubbles:!0,composed:!0}))},v=(G,se)=>G.id===se.id,x=(G,se)=>{const{category:ge,emojis:je}=G,{category:Ae,emojis:Qe}=se;return ge!==Ae?!1:fp(je,Qe,v)},S=G=>{fp(i.currentEmojis,G,v)||(i.currentEmojis=G)},j=G=>{i.searchMode!==G&&(i.searchMode=G)},C=G=>{fp(i.currentEmojisWithCategories,G,x)||(i.currentEmojisWithCategories=G)},N=(G,se)=>se&&G.skins&&G.skins[se]||G.unicode,A={labelWithSkin:(G,se)=>cz([G.name||N(G,se),G.annotation,...G.shortcodes||mp].filter(Boolean)).join(", "),titleForEmoji:G=>G.annotation||(G.shortcodes||mp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:V,onEmojiClick:O,onNavClick:re,onNavKeydown:oe,onSearchKeydown:K,onSkinToneOptionsClick:I,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ne,onSkinToneOptionsKeyup:J,onSearchInput:pe},L={calculateEmojiGridStyle:U,updateOnIntersection:q};let z=!0;d(()=>{jz(e,i,A,R,L,a,l,m,z),z=!1}),i.emojiVersion||cp().then(G=>{G||(i.message=i.i18n.emojiUnsupportedMessage)}),d(()=>{async function G(){let se=!1;const ge=setTimeout(()=>{se=!0,i.message=i.i18n.loadingMessage},GL);try{await i.database.ready(),i.databaseLoaded=!0}catch(je){console.error(je),i.message=i.i18n.networkErrorMessage}finally{clearTimeout(ge),se&&(se=!1,i.message="")}}i.database&&G()}),d(()=>{i.pickerStyle=` - --num-groups: ${i.groups.length}; - --indicator-opacity: ${i.searchMode?0:1}; - --num-skintones: ${Mx};`}),d(()=>{i.customEmoji&&i.database&&B()}),d(()=>{i.customEmoji&&i.customEmoji.length?i.groups!==Zp&&(i.groups=Zp):i.groups!==lp&&(i.currentGroupIndex&&i.currentGroupIndex--,i.groups=lp)}),d(()=>{async function G(){i.databaseLoaded&&(i.currentSkinTone=await i.database.getPreferredSkinTone())}G()}),d(()=>{i.skinTones=Array(Mx).fill().map((G,se)=>rz(i.skinToneEmoji,se))}),d(()=>{i.skinToneButtonText=i.skinTones[i.currentSkinTone]}),d(()=>{i.skinToneButtonLabel=i.i18n.skinToneLabel.replace("{skinTone}",i.i18n.skinTones[i.currentSkinTone])}),d(()=>{async function G(){const{database:se}=i,ge=(await Promise.all(WL.map(je=>se.getEmojiByUnicodeOrName(je)))).filter(Boolean);i.defaultFavoriteEmojis=ge}i.databaseLoaded&&G()});function B(){const{customEmoji:G,database:se}=i,ge=G||mp;se.customEmoji!==ge&&(se.customEmoji=ge)}d(()=>{async function G(){B();const{database:se,defaultFavoriteEmojis:ge,numColumns:je}=i,Ae=await se.getTopFavoriteEmoji(je),Qe=await ce(c5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));i.currentFavorites=Qe}i.databaseLoaded&&i.defaultFavoriteEmojis&&G()});function U(G){sz(G,l,()=>{{const se=getComputedStyle(a.rootElement),ge=parseInt(se.getPropertyValue("--num-columns"),10),je=se.getPropertyValue("direction")==="rtl";i.numColumns=ge,i.isRtl=je}})}function q(G){Nz(G,l,se=>{for(const{target:ge,isIntersecting:je}of se)ge.classList.toggle("onscreen",je)})}d(()=>{async function G(){const{searchText:se,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=i;if(!je)i.currentEmojis=[],i.searchMode=!1;else if(se.length>=HL){const Qe=await M(se);i.searchText===se&&(S(Qe),j(!0))}else{const{id:Qe}=ge;if(Qe!==-1||Ae&&Ae.length){const ct=await he(Qe);i.currentGroup.id===Qe&&(S(ct),j(!1))}}}G()});const Z=()=>{tu(()=>uz(a.tabpanelElement))};d(()=>{const{currentEmojis:G,emojiVersion:se}=i,ge=G.filter(je=>je.unicode).filter(je=>Ox(je)&&!Qp.has(je.unicode));if(!se&&ge.length)S(G),tu(()=>Q(ge));else{const je=se?G:G.filter(fe);S(je),Z()}});function Q(G){iz(G,a.baselineEmoji,p)?Z():i.currentEmojis=[...i.currentEmojis]}function fe(G){return!G.unicode||!Ox(G)||Qp.get(G.unicode)}async function de(G){const se=i.emojiVersion||await cp();return G.filter(({version:ge})=>!ge||ge<=se)}async function ce(G){return az(G,i.emojiVersion||await cp())}async function he(G){const se=G===-1?i.customEmoji:await i.database.getEmojiByGroup(G);return ce(await de(se))}async function M(G){return ce(await de(await i.database.getEmojiBySearchQuery(G)))}d(()=>{}),d(()=>{function G(){const{searchMode:ge,currentEmojis:je}=i;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const Qe of je){const ct=Qe.category||"";let Tt=Ae.get(ct);Tt||(Tt=[],Ae.set(ct,Tt)),Tt.push(Qe)}return[...Ae.entries()].map(([Qe,ct])=>({category:Qe,emojis:ct})).sort((Qe,ct)=>i.customCategorySorting(Qe.category,ct.category))}const se=G();C(se)}),d(()=>{i.activeSearchItemId=i.activeSearchItem!==-1&&i.currentEmojis[i.activeSearchItem].id}),d(()=>{const{rawSearchText:G}=i;l5(()=>{i.searchText=(G||"").trim(),i.activeSearchItem=-1})});function K(G){if(!i.searchMode||!i.currentEmojis.length)return;const se=ge=>{rr(G),i.activeSearchItem=up(ge,i.activeSearchItem,i.currentEmojis)};switch(G.key){case"ArrowDown":return se(!1);case"ArrowUp":return se(!0);case"Enter":if(i.activeSearchItem===-1)i.activeSearchItem=0;else return rr(G),_(i.currentEmojis[i.activeSearchItem].id)}}function re(G){const{target:se}=G,ge=se.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",i.rawSearchText="",i.searchText="",i.activeSearchItem=-1,i.currentGroupIndex=i.groups.findIndex(Ae=>Ae.id===je)}function oe(G){const{target:se,key:ge}=G,je=Ae=>{Ae&&(rr(G),Ae.focus())};switch(ge){case"ArrowLeft":return je(se.previousElementSibling);case"ArrowRight":return je(se.nextElementSibling);case"Home":return je(se.parentElement.firstElementChild);case"End":return je(se.parentElement.lastElementChild)}}async function ee(G){const se=await i.database.getEmojiByUnicodeOrName(G),ge=[...i.currentEmojis,...i.currentFavorites].find(Ae=>Ae.id===G),je=ge.unicode&&N(ge,i.currentSkinTone);return await i.database.incrementFavoriteEmojiCount(G),{emoji:se,skinTone:i.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function _(G){const se=ee(G);y("emoji-click-sync",se),y("emoji-click",await se)}function O(G){const{target:se}=G;if(!se.classList.contains("emoji"))return;rr(G);const ge=se.id.substring(4);_(ge)}function H(G){i.currentSkinTone=G,i.skinTonePickerExpanded=!1,h("skintone-button"),y("skin-tone-change",{skinTone:G}),i.database.setPreferredSkinTone(G)}function I(G){const{target:{id:se}}=G,ge=se&&se.match(/^skintone-(\d)/);if(!ge)return;rr(G);const je=parseInt(ge[1],10);H(je)}function V(G){i.skinTonePickerExpanded=!i.skinTonePickerExpanded,i.activeSkinTone=i.currentSkinTone,i.skinTonePickerExpanded&&(rr(G),tu(()=>h("skintone-list")))}d(()=>{i.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{i.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):i.skinTonePickerExpandedAfterAnimation=!1});function ne(G){if(!i.skinTonePickerExpanded)return;const se=async ge=>{rr(G),i.activeSkinTone=ge};switch(G.key){case"ArrowUp":return se(up(!0,i.activeSkinTone,i.skinTones));case"ArrowDown":return se(up(!1,i.activeSkinTone,i.skinTones));case"Home":return se(0);case"End":return se(i.skinTones.length-1);case"Enter":return rr(G),H(i.activeSkinTone);case"Escape":return rr(G),i.skinTonePickerExpanded=!1,h("skintone-button")}}function J(G){if(i.skinTonePickerExpanded)switch(G.key){case" ":return rr(G),H(i.activeSkinTone)}}async function me(G){const{relatedTarget:se}=G;(!se||se.id!=="skintone-list")&&(i.skinTonePickerExpanded=!1)}function pe(G){i.rawSearchText=G.target.value}return{$set(G){Yc(i,G)},$destroy(){o.abort()}}}const Tz="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Rz="en";var Az={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},_z=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const u5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],Mz=`:host{--emoji-font-family:${i5}}`;class bg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=_z+Mz,this.shadowRoot.appendChild(a),this._ctx={locale:Rz,dataSource:Tz,skinToneEmoji:FL,customCategorySorting:qL,customEmoji:null,i18n:Az,emojiVersion:null,...n};for(const o of u5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){Ix(this),this._cmp||(this._cmp=kz(this.shadowRoot,this._ctx))}disconnectedCallback(){Ix(this),wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,i)=>i.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new UL({locale:n,dataSource:a}))}_dbFlush(){wu(()=>this._dbCreate())}}const d5={};for(const e of u5)d5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(bg.prototype,d5);function Ix(e){e instanceof bg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",bg);function Oz({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=i=>{var h;const d=i.detail,m=(d==null?void 0:d.unicode)??((h=d==null?void 0:d.emoji)==null?void 0:h.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),c.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const Dz=/^<(a?):([^:>]+):(\d{17,20})>$/;function nu(e,n,a=!1){return`${a?"`}function f5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(Dz);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function m5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function Lz(e,n=[]){const a=f5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==nu(o.name,o.id,o.animated))return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function zz({value:e,guildEmojis:n,size:a="md"}){const o=Lz(e,n),l=a==="lg"?"size-10":"size-7",i=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?c.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?c.jsxs("span",{className:"inline-flex items-center gap-3",children:[c.jsx("img",{src:m5(o.id,o.animated),alt:o.name??"custom emoji",className:ie(l,"shrink-0 rounded-md"),loading:"lazy"}),c.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[c.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),c.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):c.jsx("span",{className:ie(i,"leading-none"),title:o.value,children:o.value})}function Pz({id:e,label:n,description:a,value:o,onChange:l,readOnly:i}){const[d,m]=f.useState(!1),[h,p]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Z=!1)=>{C(!0),S("");try{const Q=await ke.getGuildResources(Z);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const A=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Z=N.trim().toLowerCase();return Z?A.filter(Q=>Q.name.toLowerCase().includes(Z)):A},[A,N]),L=String(o??""),z=f5(L);function B(Z){l(Z),m(!1)}function U(Z){l(nu(Z.name,Z.id,Z.animated)),m(!1)}function q(){l("")}return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:e,children:n}),a?c.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,c.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("div",{className:"min-w-0 flex-1",children:c.jsx(zz,{value:o,guildEmojis:A,size:"lg"})}),c.jsxs("div",{className:"flex shrink-0 gap-2",children:[c.jsx(be,{type:"button",variant:"secondary",size:"sm",disabled:i,onClick:()=>m(!0),children:"Choose emoji"}),L?c.jsx(be,{type:"button",variant:"ghost",size:"sm",disabled:i,onClick:q,children:"Clear"}):null]})]}),c.jsx($w,{open:d,onOpenChange:m,children:c.jsxs(Zh,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[c.jsxs(Qh,{className:"space-y-1 border-b border-border px-5 py-4",children:[c.jsx(Jh,{children:"Choose emoji"}),c.jsxs(eg,{children:["Server emojis save as"," ",c.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),c.jsxs(Yj,{value:h,onValueChange:Z=>p(Z),className:"flex min-h-0 flex-1 flex-col",children:[c.jsxs(fg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[c.jsx(Ka,{value:"server",children:"Server"}),c.jsx(Ka,{value:"unicode",children:"All emojis"})]}),c.jsxs(Wp,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[c.jsxs("div",{className:"relative mb-3",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by name…",value:N,onChange:Z=>E(Z.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?c.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",A.length," custom emoji",A.length===1?"":"s"]}):null,c.jsx(hi,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?c.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Z,Q)=>c.jsx(Fe,{className:"aspect-square rounded-lg"},Q))}):x?c.jsxs("div",{className:"space-y-3 p-4 text-center",children:[c.jsx("p",{className:"text-sm text-destructive",children:x}),c.jsx(be,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?c.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:A.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):c.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Z=>{const Q=z.kind==="custom"&&z.id===Z.id;return c.jsx("button",{type:"button",title:`:${Z.name}:`,className:ie("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>U(Z),children:c.jsx("img",{src:Z.url??m5(Z.id,Z.animated),alt:Z.name,className:"size-8 object-contain",loading:"lazy"})},Z.id)})})})]}),c.jsx(Wp,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:c.jsx(Oz,{onPick:B})})]})]})}),c.jsx(rt,{value:L,disabled:i,onChange:Z=>l(Z.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const Ux="BOT_TOKEN",Bz="MODEL_API_KEY";function yg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return c.jsx(UD,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return c.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[c.jsxs("div",{children:[c.jsx(Ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),c.jsx(Dn,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(BD,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsxs(ud,{value:String(n??""),disabled:o,onValueChange:a,children:[c.jsx(gi,{id:l,className:"border-border bg-secondary/30",children:c.jsx(dd,{placeholder:"Select…"})}),c.jsx(vi,{children:e.options.map(d=>c.jsx(no,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=lr(String(n??"#000000"));return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsxs("div",{className:"flex gap-2",children:[c.jsx(cg,{value:d,onChange:a}),c.jsx(rt,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(lr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return c.jsx(Pz,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return c.jsx(HD,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===Ux||n===Bz||!n?"":"••••••••••••";return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const h=m.target.value;a(h||(e.placeholder??Ux))},className:"border-border bg-secondary/30"})]})}const i="border-border bg-secondary/30";return e.type==="textarea"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsx(sd,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${i}`})]}):c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:i})]})}const We=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));We.displayName="Card";const at=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex flex-col space-y-1.5 p-6",e),...n}));at.displayName="CardHeader";const ot=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("font-semibold leading-none tracking-tight",e),...n}));ot.displayName="CardTitle";const Nt=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("text-sm text-muted-foreground",e),...n}));Nt.displayName="CardDescription";const qe=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("p-6 pt-0",e),...n}));qe.displayName="CardContent";const p5=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex items-center p-6 pt-0",e),...n}));p5.displayName="CardFooter";function Hx(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function $z(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function xg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const i=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:i,label:Hx(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...xg(l,i));continue}a.push({path:i,label:Hx(o),type:$z(o,l)})}return a}function Iz(e){const n=xg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function ao(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function Xl(e,n,a){const o=n.split("."),l=structuredClone(e);let i=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const Hz=e=>{switch(e){case"success":return Fz;case"info":return Wz;case"warning":return Yz;case"error":return qz;default:return null}},Vz=Array(12).fill(0),Gz=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},Vz.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),Fz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Yz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Wz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),qz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Kz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Xz=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let Jp=1;class Zz{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,i=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:Jp++,d=this.toasts.find(h=>h.id===i),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(i)&&this.dismissedToasts.delete(i),d?this.toasts=this.toasts.map(h=>h.id===i?(this.publish({...h,...n,id:i,title:o}),{...h,...n,id:i,dismissible:m,title:o}):h):this.addToast({title:o,...l,dismissible:m,id:i}),i},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let i=o!==void 0,d;const m=l.then(async p=>{if(d=["resolve",p],ue.isValidElement(p))i=!1,this.create({id:o,type:"default",message:p});else if(Jz(p)&&!p.ok){i=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${p.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${p.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(p instanceof Error){i=!1;const v=typeof a.error=="function"?await a.error(p):a.error,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){i=!1;const v=typeof a.success=="function"?await a.success(p):a.success,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async p=>{if(d=["reject",p],a.error!==void 0){i=!1;const y=typeof a.error=="function"?await a.error(p):a.error,v=typeof a.description=="function"?await a.description(p):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{i&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),h=()=>new Promise((p,y)=>m.then(()=>d[0]==="reject"?y(d[1]):p(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:h}:Object.assign(o,{unwrap:h})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||Jp++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const cn=new Zz,Qz=(e,n)=>{const a=(n==null?void 0:n.id)||Jp++;return cn.addToast({title:e,...n,id:a}),a},Jz=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",eP=Qz,tP=()=>cn.toasts,nP=()=>cn.getActiveToasts(),rs=Object.assign(eP,{success:cn.success,info:cn.info,warning:cn.warning,error:cn.error,custom:cn.custom,message:cn.message,promise:cn.promise,dismiss:cn.dismiss,loading:cn.loading},{getHistory:tP,getToasts:nP});Uz("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Wc(e){return e.label!==void 0}const rP=3,aP="24px",oP="16px",Vx=4e3,sP=356,lP=14,iP=45,cP=200;function ar(...e){return e.filter(Boolean).join(" ")}function uP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const dP=e=>{var n,a,o,l,i,d,m,h,p;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:A,removeToast:R,defaultRichColors:L,closeButton:z,style:B,cancelButtonStyle:U,actionButtonStyle:q,className:Z="",descriptionClassName:Q="",duration:fe,position:de,gap:ce,expandByDefault:he,classNames:M,icons:K,closeButtonAriaLabel:re="Close toast"}=e,[oe,ee]=ue.useState(null),[_,O]=ue.useState(null),[H,I]=ue.useState(!1),[V,ne]=ue.useState(!1),[J,me]=ue.useState(!1),[pe,G]=ue.useState(!1),[se,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[Qe,ct]=ue.useState(0),Tt=ue.useRef(v.duration||fe||Vx),Ca=ue.useRef(null),Rt=ue.useRef(null),Os=E===0,Ds=E+1<=C,Yt=v.type,$r=v.dismissible!==!1,Wt=v.className||"",gd=v.descriptionClassName||"",ja=ue.useMemo(()=>N.findIndex(Te=>Te.toastId===v.id)||0,[N,v.id]),xi=ue.useMemo(()=>{var Te;return(Te=v.closeButton)!=null?Te:z},[v.closeButton,z]),Ea=ue.useMemo(()=>v.duration||fe||Vx,[v.duration,fe]),Ls=ue.useRef(0),dr=ue.useRef(0),Si=ue.useRef(0),Ir=ue.useRef(null),[Na,qt]=de.split("-"),$n=ue.useMemo(()=>N.reduce((Te,ut,At)=>At>=ja?Te:Te+ut.height,0),[N,ja]),Ht=Xz(),vd=v.invert||y,zs=Yt==="loading";dr.current=ue.useMemo(()=>ja*ce+$n,[ja,$n]),ue.useEffect(()=>{Tt.current=Ea},[Ea]),ue.useEffect(()=>{I(!0)},[]),ue.useEffect(()=>{const Te=Rt.current;if(Te){const ut=Te.getBoundingClientRect().height;return ct(ut),j(At=>[{toastId:v.id,height:ut,position:v.position},...At]),()=>j(At=>At.filter(Vt=>Vt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!H)return;const Te=Rt.current,ut=Te.style.height;Te.style.height="auto";const At=Te.getBoundingClientRect().height;Te.style.height=ut,ct(At),j(Vt=>Vt.find(mt=>mt.toastId===v.id)?Vt.map(mt=>mt.toastId===v.id?{...mt,height:At}:mt):[{toastId:v.id,height:At,position:v.position},...Vt])},[H,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Xn=ue.useCallback(()=>{ne(!0),Ae(dr.current),j(Te=>Te.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},cP)},[v,R,j,dr]);ue.useEffect(()=>{if(v.promise&&Yt==="loading"||v.duration===1/0||v.type==="loading")return;let Te;return A||S||Ht?(()=>{if(Si.current{Tt.current!==1/0&&(Ls.current=new Date().getTime(),Te=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Xn()},Tt.current))})(),()=>clearTimeout(Te)},[A,S,v,Yt,Ht,Xn]),ue.useEffect(()=>{v.delete&&(Xn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Xn,v.delete]);function fo(){var Te;if(K!=null&&K.loading){var ut;return ue.createElement("div",{className:ar(M==null?void 0:M.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Yt==="loading"},K.loading)}return ue.createElement(Gz,{className:ar(M==null?void 0:M.loader,v==null||(Te=v.classNames)==null?void 0:Te.loader),visible:Yt==="loading"})}const mo=v.icon||(K==null?void 0:K[Yt])||Hz(Yt);var ka,Zn;return ue.createElement("li",{tabIndex:0,ref:Rt,className:ar(Z,Wt,M==null?void 0:M.toast,v==null||(n=v.classNames)==null?void 0:n.toast,M==null?void 0:M.default,M==null?void 0:M[Yt],v==null||(a=v.classNames)==null?void 0:a[Yt]),"data-sonner-toast":"","data-rich-colors":(ka=v.richColors)!=null?ka:L,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":H,"data-promise":!!v.promise,"data-swiped":se,"data-removed":V,"data-visible":Ds,"data-y-position":Na,"data-x-position":qt,"data-index":E,"data-front":Os,"data-swiping":J,"data-dismissible":$r,"data-type":Yt,"data-invert":vd,"data-swipe-out":pe,"data-swipe-direction":_,"data-expanded":!!(A||he&&H),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${V?je:dr.current}px`,"--initial-height":he?"auto":`${Qe}px`,...B,...v.style},onDragEnd:()=>{me(!1),ee(null),Ir.current=null},onPointerDown:Te=>{Te.button!==2&&(zs||!$r||(Ca.current=new Date,Ae(dr.current),Te.target.setPointerCapture(Te.pointerId),Te.target.tagName!=="BUTTON"&&(me(!0),Ir.current={x:Te.clientX,y:Te.clientY})))},onPointerUp:()=>{var Te,ut,At;if(pe||!$r)return;Ir.current=null;const Vt=Number(((Te=Rt.current)==null?void 0:Te.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ur=Number(((ut=Rt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((At=Ca.current)==null?void 0:At.getTime()),Zt=oe==="x"?Vt:Ur,Ta=Math.abs(Zt)/mt;if(Math.abs(Zt)>=iP||Ta>.11){Ae(dr.current),v.onDismiss==null||v.onDismiss.call(v,v),O(oe==="x"?Vt>0?"right":"left":Ur>0?"down":"up"),Xn(),G(!0);return}else{var Qt,Jt;(Qt=Rt.current)==null||Qt.style.setProperty("--swipe-amount-x","0px"),(Jt=Rt.current)==null||Jt.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),ee(null)},onPointerMove:Te=>{var ut,At,Vt;if(!Ir.current||!$r||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Te.clientY-Ir.current.y,Zt=Te.clientX-Ir.current.x;var Ta;const Qt=(Ta=e.swipeDirections)!=null?Ta:uP(de);!oe&&(Math.abs(Zt)>1||Math.abs(mt)>1)&&ee(Math.abs(Zt)>Math.abs(mt)?"x":"y");let Jt={x:0,y:0};const po=In=>1/(1.5+Math.abs(In)/20);if(oe==="y"){if(Qt.includes("top")||Qt.includes("bottom"))if(Qt.includes("top")&&mt<0||Qt.includes("bottom")&&mt>0)Jt.y=mt;else{const In=mt*po(mt);Jt.y=Math.abs(In)0)Jt.x=Zt;else{const In=Zt*po(Zt);Jt.x=Math.abs(In)0||Math.abs(Jt.y)>0)&&ge(!0),(At=Rt.current)==null||At.style.setProperty("--swipe-amount-x",`${Jt.x}px`),(Vt=Rt.current)==null||Vt.style.setProperty("--swipe-amount-y",`${Jt.y}px`)}},xi&&!v.jsx&&Yt!=="loading"?ue.createElement("button",{"aria-label":re,"data-disabled":zs,"data-close-button":!0,onClick:zs||!$r?()=>{}:()=>{Xn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:ar(M==null?void 0:M.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Zn=K==null?void 0:K.close)!=null?Zn:Kz):null,(Yt||v.icon||v.promise)&&v.icon!==null&&((K==null?void 0:K[Yt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:ar(M==null?void 0:M.icon,v==null||(l=v.classNames)==null?void 0:l.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||fo():null,v.type!=="loading"?mo:null):null,ue.createElement("div",{"data-content":"",className:ar(M==null?void 0:M.content,v==null||(i=v.classNames)==null?void 0:i.content)},ue.createElement("div",{"data-title":"",className:ar(M==null?void 0:M.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:ar(Q,gd,M==null?void 0:M.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&Wc(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||U,onClick:Te=>{Wc(v.cancel)&&$r&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Te),Xn())},className:ar(M==null?void 0:M.cancelButton,v==null||(h=v.classNames)==null?void 0:h.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&Wc(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||q,onClick:Te=>{Wc(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Te),!Te.defaultPrevented&&Xn())},className:ar(M==null?void 0:M.actionButton,v==null||(p=v.classNames)==null?void 0:p.actionButton)},v.action.label):null)};function Gx(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function fP(e,n){const a={};return[e,n].forEach((o,l)=>{const i=l===1,d=i?"--mobile-offset":"--offset",m=i?oP:aP;function h(p){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof p=="number"?`${p}px`:p})}typeof o=="number"||typeof o=="string"?h(o):typeof o=="object"?["top","right","bottom","left"].forEach(p=>{o[p]===void 0?a[`${d}-${p}`]=m:a[`${d}-${p}`]=typeof o[p]=="number"?`${o[p]}px`:o[p]}):h(m)}),a}const mP=ue.forwardRef(function(n,a){const{id:o,invert:l,position:i="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:h,className:p,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=rP,toastOptions:E,dir:k=Gx(),gap:A=lP,icons:R,containerAriaLabel:L="Notifications"}=n,[z,B]=ue.useState([]),U=ue.useMemo(()=>o?z.filter(H=>H.toasterId===o):z.filter(H=>!H.toasterId),[z,o]),q=ue.useMemo(()=>Array.from(new Set([i].concat(U.filter(H=>H.position).map(H=>H.position)))),[U,i]),[Z,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[ce,he]=ue.useState(!1),[M,K]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),re=ue.useRef(null),oe=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),ee=ue.useRef(null),_=ue.useRef(!1),O=ue.useCallback(H=>{B(I=>{var V;return(V=I.find(ne=>ne.id===H.id))!=null&&V.delete||cn.dismiss(H.id),I.filter(({id:ne})=>ne!==H.id)})},[]);return ue.useEffect(()=>cn.subscribe(H=>{if(H.dismiss){requestAnimationFrame(()=>{B(I=>I.map(V=>V.id===H.id?{...V,delete:!0}:V))});return}setTimeout(()=>{g0.flushSync(()=>{B(I=>{const V=I.findIndex(ne=>ne.id===H.id);return V!==-1?[...I.slice(0,V),{...I[V],...H},...I.slice(V+1)]:[H,...I]})})})}),[z]),ue.useEffect(()=>{if(x!=="system"){K(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light")),typeof window>"u")return;const H=window.matchMedia("(prefers-color-scheme: dark)");try{H.addEventListener("change",({matches:I})=>{K(I?"dark":"light")})}catch{H.addListener(({matches:V})=>{try{K(V?"dark":"light")}catch(ne){console.error(ne)}})}},[x]),ue.useEffect(()=>{z.length<=1&&de(!1)},[z]),ue.useEffect(()=>{const H=I=>{var V;if(d.every(me=>I[me]||I.code===me)){var J;de(!0),(J=re.current)==null||J.focus()}I.code==="Escape"&&(document.activeElement===re.current||(V=re.current)!=null&&V.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",H),()=>document.removeEventListener("keydown",H)},[d]),ue.useEffect(()=>{if(re.current)return()=>{ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null,_.current=!1)}},[re.current]),ue.createElement("section",{ref:a,"aria-label":`${L} ${oe}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},q.map((H,I)=>{var V;const[ne,J]=H.split("-");return U.length?ue.createElement("ol",{key:H,dir:k==="auto"?Gx():k,tabIndex:-1,ref:re,className:p,"data-sonner-toaster":!0,"data-sonner-theme":M,"data-y-position":ne,"data-x-position":J,style:{"--front-toast-height":`${((V=Z[0])==null?void 0:V.height)||0}px`,"--width":`${sP}px`,"--gap":`${A}px`,...C,...fP(y,v)},onBlur:me=>{_.current&&!me.currentTarget.contains(me.relatedTarget)&&(_.current=!1,ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||_.current||(_.current=!0,ee.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{ce||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||he(!0)},onPointerUp:()=>he(!1)},U.filter(me=>!me.position&&I===0||me.position===H).map((me,pe)=>{var G,se;return ue.createElement(dP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(G=E==null?void 0:E.duration)!=null?G:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:l,visibleToasts:N,closeButton:(se=E==null?void 0:E.closeButton)!=null?se:h,interacting:ce,position:H,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:O,toasts:U.filter(ge=>ge.position==me.position),heights:Z.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:A,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function ru(e){const n=rs.loading("Saving changes…");try{const a=await e();if(rs.success("Changes saved",{id:n}),a.botRestart){const o=rs.loading("Restarting bot…");a.botRestart.success?rs.success("Bot started",{id:o}):rs.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw rs.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function pP({filename:e}){const{canEditConfig:n}=Ft(),a=!n("supportbot"),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{h(!0),x(""),j("");try{const L=(await ke.getAddonConfigJson(e)).data??{};l(L),d(structuredClone(L))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?Iz(o):null;function E(R,L){l(z=>z&&Xl(z,R,L))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await ru(()=>ke.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const A=i&&JSON.stringify(o)!==JSON.stringify(i);return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[A?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:C,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:k,disabled:p||!A,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,N.map(R=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:R.title}),R.description?c.jsx(Nt,{children:R.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(L=>c.jsx("div",{className:L.type==="textarea"||L.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:L,value:ao(o,L.path),readOnly:a,onChange:z=>E(L.path,z)})},L.path))})]},R.title))]})}function hP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function gP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=xg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",h=l.get(m)??[];h.push(d),l.set(m,h)}const i=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:hP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((h,p)=>h.path.localeCompare(p.path))}));return[...e,...i]}function vP(e){return e!==null&&typeof e=="object"&&"Command"in e}function bP(e){return Object.entries(e).filter(([,n])=>vP(n)).map(([n,a])=>({key:n,...a}))}function yP({data:e,onChange:n}){const a=bP(e);function o(l,i){const d=e[l];n({...e,[l]:{...d,...i}})}return a.length===0?c.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:c.jsx(ye,{icon:ms,size:18})}),c.jsx(ot,{className:"text-base",children:l.key})]}),c.jsxs(qe,{className:"space-y-3",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx(Ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),c.jsx(Dn,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:i=>o(l.key,{Enabled:i})})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Slash command"}),c.jsx(rt,{value:l.Command??"",onChange:i=>o(l.key,{Command:i.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Description"}),c.jsx(rt,{value:l.Description??"",onChange:i=>o(l.key,{Description:i.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function xP(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=ao(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=ao(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function SP(e,n,a,o){const l={};for(const i of n)for(const d of i.fields){const m=ao(a,d.path),h=ao(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(h)&&(l[`${e}:${d.path}`]=m)}return l}function wP({configFile:e}){const{canEditConfig:n}=Ft(),a=!n(e),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[A,R]=f.useState(""),L=V7(e),z=f.useMemo(()=>!L||L==="commands"||!o?L:gP(L,o),[L,o]),B=f.useCallback(async()=>{h(!0),x(""),j("");try{const he=(await ke.getConfigJson(e)).data??{},M=xP(e,he);l(M),d(M);const re=(await ke.getConfigRaw(e)).data??"",oe=D4(re,e);k(oe),R(oe)}catch(ce){x(ce instanceof Error?ce.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{B()},[B]);function U(ce,he){l(M=>M&&Xl(M,ce,he))}async function q(){if(!(a||E===A)){y(!0),x(""),j("");try{const ce=await ru(()=>ke.saveConfigRaw(e,E));j(ce.message||"Config saved."),await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}async function Z(){if(!(a||!o||!i)){if(C==="yaml"){await q();return}y(!0),x(""),j("");try{if(L==="commands"){const ce={};for(const M of Object.keys(o))JSON.stringify(o[M])!==JSON.stringify(i[M])&&(ce[`${e}:${M}`]=o[M]);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}else if(z&&z!=="commands"){const ce=SP(e,z,o,i);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}if(L===null)return c.jsx(Ue,{children:c.jsx(He,{children:"No visual editor available for this file."})});if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const Q=i&&JSON.stringify(o)!==JSON.stringify(i),de=C==="yaml"?E!==A:Q;return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),c.jsx(be,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[de?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:B,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:Z,disabled:p||!de,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,C==="yaml"?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:"Raw YAML"}),c.jsx(Nt,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),c.jsx(qe,{children:c.jsx(sd,{value:E,disabled:a,onChange:ce=>k(ce.target.value),className:"min-h-[min(520px,60vh)] font-mono text-xs leading-relaxed",spellCheck:!1})})]}):L==="commands"?c.jsx(yP,{data:o,onChange:ce=>l(ce)}):z&&z!=="commands"?z.map(ce=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:ce.title}),ce.description?c.jsx(Nt,{children:ce.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:ce.fields.map(he=>c.jsx("div",{className:he.type==="textarea"||he.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:he,value:ao(o,he.path),readOnly:a,onChange:M=>U(he.path,M)})},he.path))})]},ce.title)):null]})}const CP=ke.listConfigs(),jP={supportbot:"Bot config","ticket-panel":"Ticket system",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function EP(){var R,L;const{permissions:e,canViewConfig:n}=Ft(),{files:a}=R0(),[o,l]=dh(),i=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>CP.filter(z=>n(z)),[n]),h=f.useMemo(()=>d?a:[],[d,a]),p=f.useMemo(()=>[...m,...h.map(z=>is(z))],[m,h]),y=p[0]??"",[v,x]=f.useState(()=>i&&p.includes(i)?i:y);if(f.useEffect(()=>{i&&p.includes(i)?x(i):p.includes(v)||(x(y),y&&l({file:y}))},[i,p,v,y,l]),p.length===0)return c.jsx(Mr,{to:Sh(e),replace:!0});function S(z){x(z),l({file:z})}const j=V4(v),C=(j==null?void 0:j.type)==="addon",N=C?j.file:null,E=C?A0(N):jP[v]??"Configuration",k=C?!!((R=e==null?void 0:e.configs.supportbot)!=null&&R.edit):e?!!((L=e.configs[v])!=null&&L.edit):!1,A=C?N:`${v}.yml`;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),c.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${A} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${A} — you do not have permission to save changes.`})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-[220px_1fr]",children:[c.jsxs(We,{className:"h-fit border-border bg-card",children:[c.jsx(at,{className:"pb-2",children:c.jsx(ot,{className:"text-sm font-medium text-muted-foreground",children:"Configuration files"})}),c.jsx(qe,{className:"p-0",children:c.jsx(hi,{className:"h-[min(400px,50vh)]",children:c.jsxs("ul",{className:"space-y-3 p-2",children:[m.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Core"}),c.jsx("ul",{className:"space-y-0.5",children:m.map(z=>c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>S(z),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",z===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[z,".yml"]})},z))})]}):null,h.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Addons"}),c.jsx("ul",{className:"space-y-0.5",children:h.map(z=>{const B=is(z);return c.jsx("li",{children:c.jsx("button",{type:"button",onClick:()=>S(B),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",B===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:z})},z)})})]}):null]})})})]}),c.jsx("div",{className:"min-w-0",children:C&&N?c.jsx(pP,{filename:N},N):c.jsx(wP,{configFile:v},v)})]})]})}const NP={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function kP(e){return e?NP[e]||"Sign-in failed. Please try again.":""}function TP(){const{branding:e}=Ou(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ft(),[l]=dh(),i=f.useMemo(()=>kP(l.get("error")),[l]);return!a&&n?c.jsx(Mr,{to:"/",replace:!0}):c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background p-4",children:c.jsxs(We,{className:"w-full max-w-md border-border bg-card",children:[c.jsx(at,{className:"space-y-4",children:c.jsxs("div",{className:"flex items-center gap-3",children:[e.hasFavicon&&e.faviconUrl?c.jsx("img",{src:`${e.faviconUrl}${e.updatedAt?`?v=${e.updatedAt}`:""}`,alt:"",className:"size-11 rounded-xl object-contain"}):c.jsx("div",{className:"flex size-11 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:22})}),c.jsxs("div",{children:[c.jsx(ot,{className:"text-xl",children:e.title}),c.jsx(Nt,{children:"Sign in to your dashboard"})]})]})}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("p",{className:"text-sm text-muted-foreground",children:["Sign in with Discord. Your application credentials and allowed user IDs are configured in"," ",c.jsx("code",{className:"rounded-md bg-secondary px-1.5 py-0.5 text-xs text-foreground",children:"Configs/api.yml"}),"."]}),i?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:i})}):null,c.jsx(be,{type:"button",className:"w-full",disabled:a,onClick:o,children:a?"Checking session…":"Continue with Discord"})]})]})})}const fs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:ku},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M4},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:N4},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:gh},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:yh}];function RP(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function AP({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return c.jsx("div",{className:"min-h-svh bg-background",children:c.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[c.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?c.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):c.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:24})}),c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),c.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function _P({currentIndex:e,validation:n}){const a=(e+1)/fs.length*100;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[c.jsxs("span",{children:["Step ",e+1," of ",fs.length]}),c.jsxs("span",{children:[Math.round(a),"%"]})]}),c.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:c.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),c.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:fs.map((o,l)=>{var p;const i=RP(o.id),d=(p=n[i])==null?void 0:p.ok,m=l===e,h=lc.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx(ye,{icon:Tu,size:14}),o.globalName||o.username,c.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?c.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:e.error})}):null}function OP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",c.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",c.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"botToken",children:"Bot token"}),c.jsx(rt,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:i=>n({...e,botToken:i.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.botToken}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function DP({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:i}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"secretKey",children:"Session secret"}),c.jsx(rt,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.secretKey}),c.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",variant:"outline",onClick:i,children:"Generate secure secret"}),c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function LP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",c.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientId",children:"Client ID"}),c.jsx(rt,{id:"clientId",value:e.clientId,onChange:i=>n({...e,clientId:i.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientSecret",children:"Client Secret"}),c.jsx(rt,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:i=>n({...e,clientSecret:i.target.value}),className:"h-11 font-mono text-sm"})]})]}),c.jsx(yi,{result:a.oauth}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function zP({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",c.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"redirectUri",children:"Redirect URI"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(rt,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),c.jsx(be,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:c.jsx(ye,{icon:x0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?c.jsx(yi,{result:a.redirectUri}):c.jsx(Ue,{className:"border-border bg-secondary",children:c.jsx(He,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function PP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",c.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",c.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"owners",children:"Owner user IDs"}),c.jsx(sd,{id:"owners",value:e.ownerUserIds,onChange:i=>n({...e,ownerUserIds:i.target.value}),placeholder:`829112572816130058 -987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),c.jsx(yi,{result:a.owners}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function BP({onContinue:e}){return c.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:c.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[c.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:c.jsx(ye,{icon:Tu,size:40})}),c.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),c.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",c.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),c.jsx(Ue,{className:"mt-6 text-left",children:c.jsx(He,{children:"After restarting, sign in with Discord to open the dashboard."})}),c.jsx(be,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $P({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:i}){const d=e===fs.length-1;return c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(be,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[c.jsx(ye,{icon:b0,size:18,className:"mr-1"}),"Back"]}),c.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?c.jsx(be,{type:"button",size:"lg",disabled:a||n,onClick:i,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):c.jsxs(be,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",c.jsx(ye,{icon:ph,size:18,className:"ml-1"})]})})]})}function IP(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function UP(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function Fx(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function HP(){const e=oo(),{branding:n}=Ou(),{loading:a,error:o,refresh:l,status:i}=yC(),[d,m]=f.useState(0),[h,p]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,A]=f.useState(!1),R=fs[d];f.useEffect(()=>{i!=null&&i.suggestedRedirectUri&&!h.redirectUri&&p(Q=>({...Q,redirectUri:i.suggestedRedirectUri}))},[i==null?void 0:i.suggestedRedirectUri,h.redirectUri]);const L=f.useMemo(()=>({botToken:h.botToken,secretKey:h.secretKey,clientId:h.clientId,clientSecret:h.clientSecret,redirectUri:h.redirectUri,ownerUserIds:UP(h.ownerUserIds)}),[h]);async function z(){S(!0),E("");try{const Q=await ke.validateSetup(L);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function B(){var de,ce;const Q=Fx(R.id),fe=await z();return!!((ce=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&ce.ok)}async function U(){const Q=Fx(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await B()||m(de=>Math.min(de+1,fs.length-1))}async function q(){C(!0),E("");try{const Q=await z();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await ke.completeSetup(L),A(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Z(){const Q={values:h,setValues:p,validation:y,validating:x};switch(R.id){case"botToken":return c.jsx(OP,{...Q,onValidate:()=>void B()});case"secretKey":return c.jsx(DP,{...Q,onGenerate:()=>p(fe=>({...fe,secretKey:IP()})),onValidate:()=>void B()});case"oauth":return c.jsx(LP,{...Q,onValidate:()=>void B()});case"redirectUri":return c.jsx(zP,{values:h,setValues:p,validation:y});case"owners":return c.jsx(PP,{...Q,onValidate:()=>void B()})}}return a?c.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:c.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[c.jsx(Fe,{className:"h-14 w-64"}),c.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[c.jsx(Fe,{className:"hidden h-80 lg:block"}),c.jsx(Fe,{className:"h-[520px] rounded-2xl"})]})]})}):c.jsxs(AP,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt,hasFavicon:n.hasFavicon,children:[o?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:o})}):null,N?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:N})}):null,k?c.jsx(BP,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):c.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[c.jsx(_P,{currentIndex:d,validation:y}),c.jsx(MP,{step:R,footer:c.jsx($P,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void U(),onFinish:()=>void q()}),children:Z()})]})]})}const VP={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function GP({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return c.jsxs(kt,{to:a,className:ie("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[c.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:c.jsx(ye,{icon:n,size:20})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate font-semibold",children:e}),c.jsx("span",{className:ie("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",VP[l]),children:o})]})]})}function FP({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),h=d-m/100*d;return c.jsxs("div",{className:ie("relative inline-flex",a),children:[c.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:h,className:l})]}),c.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[c.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),c.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const YP={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function WP({title:e,subtitle:n,icon:a,href:o,status:l,meta:i="Open in dashboard"}){const d=YP[l];return c.jsxs(kt,{to:o,className:ie("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsx("span",{className:ie("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),c.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),c.jsxs("div",{children:[c.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),c.jsx("span",{className:ie("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),c.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:a,size:16})}),c.jsx("span",{className:"text-xs text-muted-foreground",children:i})]}),c.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[c.jsx(ye,{icon:gh,size:14,className:"opacity-60"}),c.jsx(ye,{icon:Xa,size:14,className:"opacity-60 group-hover:text-primary"}),c.jsx(ye,{icon:ph,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function qP({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:j0(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return c.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[c.jsxs(ot,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),c.jsxs(qe,{className:"pt-0",children:[c.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>c.jsxs(gs,{className:"size-9 border-2 border-card ring-0",children:[c.jsx(vs,{src:e.bot.avatar,alt:""}),c.jsx(bs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?c.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),c.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),c.jsx(We,{className:"overflow-hidden border-border bg-secondary",children:c.jsx(qe,{className:"p-5",children:c.jsxs("div",{className:"space-y-3",children:[c.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:_4,size:22})}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),c.jsx(be,{asChild:!0,size:"sm",className:"w-full",children:c.jsxs(kt,{to:"/settings",children:[c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),"Open settings"]})})]})})}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[c.jsx(ot,{className:"text-sm font-semibold",children:"System activity"}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),c.jsxs(qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>c.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{className:"bg-secondary text-xs",children:"SB"})]}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),c.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),c.jsx(be,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:c.jsxs(kt,{to:"/system",children:["All system details",c.jsx(ye,{icon:ph,size:14})]})})]})]}),c.jsx(We,{className:"border-border bg-card",children:c.jsxs(qe,{className:"flex items-center gap-3 p-4",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:Xa,size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),c.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const h5={todo:"Needs setup",progress:"In progress",done:"Active"};function eh(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function KP(){return c.jsxs("div",{className:"flex gap-6",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-44 rounded-2xl"}),c.jsx(Fe,{className:"h-44 rounded-2xl"})]}),c.jsx(Fe,{className:"h-8 w-48"}),c.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>c.jsx(Fe,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),c.jsx(Fe,{className:"h-8 w-56"}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>c.jsx(Fe,{className:"h-20 rounded-2xl"},n))})]}),c.jsx(Fe,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function XP(){const{stats:e,loading:n,error:a}=Du(),[o,l]=f.useState("all"),i=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?ls.filter(y=>y.category==="tickets"):o==="all"?ls:ls.filter(y=>y.category===o),[o]);if(n)return c.jsx(KP,{});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"No stats available"})});const m=e.tickets.open,h=e.tickets.closed,p=e.tickets.total;return c.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(We,{className:"overflow-hidden border-border bg-card",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",c.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),c.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),c.jsx(be,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:c.jsx(kt,{to:"/transcripts",children:"Review"})})]}),c.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[c.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),c.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),c.jsx(We,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),c.jsxs("ul",{className:"space-y-1.5 text-sm",children:[c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[p," total"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[h," closed"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),c.jsx(FP,{percent:i,size:120})]})})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),c.jsx(Yj,{value:o,onValueChange:y=>l(y),children:c.jsxs(fg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[c.jsx(Ka,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),c.jsx(Ka,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),c.jsx(Ka,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),G7.filter(y=>y.id!=="all").map(y=>c.jsx(Ka,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),c.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:Mu,href:"/transcripts",status:"todo",meta:"View transcripts"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${h} resolved`,icon:Tu,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=eh(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>c.jsx(WP,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),c.jsx(kt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.slice(0,4).map(y=>{const v=eh(y.id,e.modules);return c.jsx(GP,{title:y.title,icon:y.icon,href:y.href,badge:h5[v.status],status:v.status},y.id)})})]})]}),c.jsx(qP,{stats:e})]})}function ZP(){const{permissions:e}=Ft();return Ln(e,"overview")?c.jsx(XP,{}):c.jsx(Mr,{to:Sh(e),replace:!0})}function as({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ft();return a?c.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Ln(l,e)?c.jsx(c.Fragment,{children:n}):c.jsx(Mr,{to:Sh(l),replace:!0}):c.jsx(Mr,{to:"/login",replace:!0})}const Sg="supportbot-dashboard-accent",$l="#45b46c",QP=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function JP(e){const n=lr(e,$l),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,i=Math.max(a,o,l),d=Math.min(a,o,l),m=(i+d)/2;let h=0,p=0;if(i!==d){const y=i-d;switch(p=m>.5?y/(2-i-d):y/(i+d),i){case a:h=((o-l)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function aB({canEdit:e}){const{branding:n,setBrandingLocal:a}=Ou(),o=f.useRef(null),[l,i]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[h,p]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{i(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){p(!0),S("");try{const R=await ke.updateBranding({title:l,pageTitle:d});R.data&&a(R.data),S(R.message||"Branding saved.")}catch(R){S(R instanceof Error?R.message:"Save failed")}finally{p(!1)}}}async function N(R){if(!(!e||!R)){v(!0),S("");try{const L=await rB(R),z=await ke.uploadBrandingFavicon(L);z.data&&a(z.data),S(z.message||"Favicon uploaded.")}catch(L){S(L instanceof Error?L.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const R=await ke.removeBrandingFavicon();R.data&&a(R.data),S(R.message||"Favicon removed.")}catch(R){S(R instanceof Error?R.message:"Remove failed")}finally{v(!1)}}}async function k(){if(e){p(!0),S("");try{const R=await ke.resetBranding();R.data&&a(R.data),S(R.message||"Reset to defaults.")}catch(R){S(R instanceof Error?R.message:"Reset failed")}finally{p(!1)}}}const A=l.trim()!==n.title||d.trim()!==n.pageTitle;return c.jsxs("div",{className:"space-y-4 border-t border-border pt-4",children:[c.jsxs("div",{children:[c.jsx("p",{className:"text-sm font-medium",children:"Branding"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title, browser tab title, and favicon — saved on the server for everyone using this dashboard."})]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-title",children:"Sidebar title"}),c.jsx(rt,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:R=>i(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),c.jsx(rt,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:R=>m(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Favicon"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."}),c.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[c.jsx("div",{className:"flex size-14 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?c.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-1"}):c.jsx(ye,{icon:j4,size:22,className:"text-muted-foreground"})}),c.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:R=>{var L;return void N(((L=R.target.files)==null?void 0:L[0])??null)}}),e?c.jsxs(c.Fragment,{children:[c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>{var R;return(R=o.current)==null?void 0:R.click()},children:y?"Uploading…":"Upload favicon"}),n.hasFavicon?c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"})]})]}),e?c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",size:"sm",disabled:h||!A,onClick:()=>void C(),children:h?"Saving…":"Save titles"}),c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:h||y,onClick:()=>void k(),children:"Reset branding"})]}):null,x?c.jsx("p",{className:"text-xs text-muted-foreground",children:x}):null]})}function oB(){const{hasPermission:e}=Ft(),n=e("settings.update"),[a,o]=f.useState(null),[l,i]=f.useState(!0),[d,m]=f.useState(!1),[h,p]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>v5()??$l),[j,C]=f.useState(""),N=f.useCallback(async()=>{i(!0),p("");try{const k=await ke.checkForUpdates();k.data&&o(k.data)}catch(k){p(k instanceof Error?k.message:"Could not check for updates")}finally{i(!1)}},[]);f.useEffect(()=>{N()},[N]);async function E(){if(a!=null&&a.updateAvailable){m(!0),p(""),v("");try{const k=await ke.runUpdate(a.latest);v(k.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(k){p(k instanceof Error?k.message:"Update failed")}finally{m(!1)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),c.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard appearance"}),c.jsx(Nt,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsx(aB,{canEdit:n}),c.jsxs("div",{className:"border-t border-border pt-4",children:[c.jsx("p",{className:"mb-3 text-sm font-medium",children:"Accent colour"}),c.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),c.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"accent-colour",children:"Accent colour"}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx(cg,{value:x,onChange:k=>{S(k),Yx(k),C("Accent updated.")}}),c.jsx(rt,{id:"accent-colour",value:x,onChange:k=>S(k.target.value),onBlur:()=>{const k=lr(x,$l);S(k),Yx(k),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]})]}),c.jsx(be,{type:"button",variant:"outline",onClick:()=>{tB(),S($l),C("Reset to default purple.")},children:"Reset to default"})]}),c.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[c.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),c.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),c.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?c.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Software updates"}),c.jsxs(Nt,{children:["Checks"," ",c.jsx("a",{href:"https://github.com/C-h-a-r/SupportBot-Dashboard",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"SupportBot-Dashboard"})," ","on the release branch."]})]}),c.jsxs(qe,{className:"space-y-4",children:[l?c.jsx(Fe,{className:"h-24 w-full"}):a?c.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[c.jsxs("div",{className:"flex flex-wrap gap-x-6 gap-y-2 text-sm",children:[c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.current]})]}),c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.latest]})]})]}),a.updateAvailable?c.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads bot files while keeping your Configs and Data."}):c.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."})]}):null,h?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:h})}):null,y?c.jsx(Ue,{children:c.jsx(He,{children:y})}):null,c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsxs(be,{type:"button",variant:"outline",onClick:N,disabled:l||d,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),"Check again"]}),a!=null&&a.updateAvailable&&n?c.jsxs(be,{type:"button",onClick:E,disabled:d,children:[d?c.jsx(ye,{icon:w0,size:16,className:"mr-2 animate-spin"}):c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,a!=null&&a.updateAvailable&&!n?c.jsx("p",{className:"text-xs text-muted-foreground",children:"You can check for updates but cannot install them with your role."}):null]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return c.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),c.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const sB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function lB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function iB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Du(),[l,i]=f.useState(null),[d,m]=f.useState(null),[h,p]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([ke.getGuildStatus().catch(()=>null),ke.health().catch(()=>null)]);j!=null&&j.data&&i(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){p(!0);try{await Promise.all([o(),y()])}finally{p(!1)}}if(n&&!e)return c.jsxs("div",{className:"space-y-6",children:[c.jsx(Fe,{className:"h-10 w-64"}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-56 rounded-2xl"}),c.jsx(Fe,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(be,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:c.jsxs(kt,{to:"/",children:[c.jsx(ye,{icon:b0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),c.jsxs(be,{type:"button",variant:"outline",disabled:h,onClick:()=>void v(),children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),h?"Refreshing…":"Refresh now"]})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Discord bot"}),c.jsx(Nt,{children:"Connection and identity"})]}),c.jsxs(qe,{children:[c.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[c.jsxs(gs,{className:"size-12",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{children:"SB"})]}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:e.bot.username}),c.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),c.jsxs("dl",{children:[c.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),c.jsx(pt,{label:"Gateway latency",value:c.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),c.jsx(pt,{label:"Process uptime",value:j0(e.bot.uptime)}),c.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),c.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?c.jsx(pt,{label:"Invite link",value:c.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Host machine"}),c.jsx(Nt,{children:"Server resources running this instance"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),c.jsx(pt,{label:"Memory usage",value:c.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),c.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),c.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Tickets"}),c.jsx(Nt,{children:"Database snapshot"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Total tickets",value:e.tickets.total}),c.jsx(pt,{label:"Open",value:c.jsx("span",{className:"text-primary",children:e.tickets.open})}),c.jsx(pt,{label:"Closed",value:e.tickets.closed}),c.jsx(pt,{label:"Transcripts",value:c.jsx(kt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Guild health"}),c.jsx(Nt,{children:"Configured server and membership"})]}),c.jsx(qe,{children:l?c.jsxs("dl",{children:[c.jsx(pt,{label:"Status",value:c.jsx("span",{className:lB(l.status),children:sB[l.status]})}),c.jsx(pt,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?c.jsx(pt,{label:"Configured server",value:`${l.configuredGuild.name} (${((S=l.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,l.message?c.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?c.jsxs("div",{className:"mt-3 space-y-2",children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),c.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(j=>c.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):c.jsx(Fe,{className:"h-24 w-full"})})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard services"}),c.jsx(Nt,{children:"API and authentication"})]}),c.jsx(qe,{children:d?c.jsxs("dl",{className:"max-w-xl",children:[c.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),c.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),c.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),c.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),c.jsx(pt,{label:"Software updates",value:c.jsx(kt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),c.jsx(pt,{label:"Logs",value:c.jsx(kt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):c.jsx(Fe,{className:"h-32 w-full max-w-xl"})})]}),e.modules?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Module setup status"}),c.jsx(Nt,{children:"Which features are configured and active"})]}),c.jsx(qe,{children:c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.map(j=>{const C=eh(j.id,e.modules);return c.jsxs(kt,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx("p",{className:"text-sm font-medium",children:j.title}),c.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),c.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:h5[C.status]})]},j.id)})})})]}):null]})}function cB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const uB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],dB=["Output","Warn","Error"],fB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},mB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},Wx=2e3,pB=2e3;function th(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function hB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,h)=>th(m,h))),i=[];for(let m=0;mWx?d.slice(d.length-Wx):d}function gB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,i]=f.useState(""),[d,m]=f.useState(!1),[h,p]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),A=f.useRef(null),R=f.useRef(d);R.current=d;const L=f.useMemo(()=>y==="all"?dB:[y],[y]),z=f.useCallback(async q=>{var fe,de;const Z=await ke.getLogs({types:L,cursor:q?void 0:k.current??void 0,tail:q?500:0}),Q=((fe=Z.data)==null?void 0:fe.entries)??[];return k.current=((de=Z.data)==null?void 0:de.cursor)??{},n(ce=>hB(ce,Q,q)),Q.length},[L]),B=f.useCallback(async()=>{var q;o(!0),i(""),k.current=null;try{const fe=(((q=(await ke.getLogsMeta()).data)==null?void 0:q.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await z(!0),C(!0)}catch(Z){i(Z instanceof Error?Z.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const q=window.setInterval(async()=>{if(!R.current)try{await z(!1),C(!0),i("")}catch(Z){C(!1),i(Z instanceof Error?Z.message:"Live update failed")}},pB);return()=>window.clearInterval(q)},[d,a,z]),f.useEffect(()=>{if(!h||d)return;const q=A.current;q&&(q.scrollTop=q.scrollHeight)},[e,h,d]);const U=f.useMemo(()=>e.filter(q=>{var Q;if(y!=="all"&&q.type!==y)return!1;if(!x.trim())return!0;const Z=x.toLowerCase();return q.message.toLowerCase().includes(Z)||(((Q=q.timestamp)==null?void 0:Q.toLowerCase().includes(Z))??!1)}),[e,y,x]);return c.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{className:ie("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),c.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:l})}):null,c.jsxs(We,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[c.jsxs(at,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Console",a?null:c.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[U.length," line",U.length===1?"":"s"]})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[c.jsx(Dn,{id:"auto-scroll",checked:h,onCheckedChange:p}),c.jsx(Ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>m(q=>!q),children:[c.jsx(ye,{icon:d?A4:R4,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[c.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:uB.map(q=>c.jsx(be,{type:"button",variant:y===q.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(q.id),children:q.label},q.id))}),c.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[c.jsx(ye,{icon:_u,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Filter lines…",value:x,onChange:q=>S(q.target.value),className:"h-9 pl-9"})]})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0",children:a?c.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((q,Z)=>c.jsx(Fe,{className:"h-4 w-full"},Z))}):c.jsx("div",{ref:A,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:U.length===0?c.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):c.jsx("ul",{className:"space-y-1",children:U.map((q,Z)=>c.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[c.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:cB(q.timestamp)}),c.jsx("span",{className:ie("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",mB[q.type]),children:q.type}),c.jsx("span",{className:ie("min-w-0 flex-1 whitespace-pre-wrap break-words",fB[q.type]),children:q.message||" "})]},th(q,Z)))})})})]})]})}const vB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],bB=450;function yB(e,n){return n&&e!=="viewer"}function xB(){const{user:e,hasPermission:n}=Ft(),a=!yB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),A=f.useRef(null),R=f.useCallback(async()=>{var q;h(!0),x(""),j("");try{const Q=(await ke.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:Mj((q=Q.Typography)==null?void 0:q.FontFamily)}};l(fe),d(structuredClone(fe))}}catch(Z){x(Z instanceof Error?Z.message:"Failed to load template")}finally{h(!1)}},[]);f.useEffect(()=>{R()},[R]);const L=f.useCallback(async q=>{k(!0);try{const Z=await ke.previewTranscriptTemplate(q);N(Z)}catch{N("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return A.current&&clearTimeout(A.current),A.current=setTimeout(()=>{L(o)},bB),()=>{A.current&&clearTimeout(A.current)}},[o,L]);function z(q,Z){l(Q=>Q&&Xl(Q,q,Z))}async function B(){if(!(a||!o)){y(!0),x(""),j("");try{const q=await ke.saveTranscriptTemplate(o);j(q.message||"Saved."),d(structuredClone(o))}catch(q){x(q instanceof Error?q.message:"Save failed")}finally{y(!1)}}}const U=o&&i&&JSON.stringify(o)!==JSON.stringify(i);return m?c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-96 rounded-xl"}),c.jsx(Fe,{className:"h-96 rounded-xl"})]}):o?c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),c.jsxs("div",{className:"flex items-center gap-2",children:[U?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:B,disabled:p||!U,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save appearance"]})]})]}),v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[c.jsx(SB,{data:o,readOnly:a,onPatch:z}),c.jsxs(We,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsx(ot,{className:"text-base",children:"Live preview"}),c.jsxs(Nt,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-4 pt-0",children:c.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ie("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load template"})})}function SB({data:e,readOnly:n,onPatch:a}){return c.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:vB.map(o=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:o.title}),o.description?c.jsx(Nt,{children:o.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>c.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:c.jsx(yg,{field:l,value:ao(e,l.path),readOnly:n,onChange:i=>a(l.path,i)})},l.path))})]},o.title))})}function wB(e,n){return n&&e!=="viewer"}function CB(){const{user:e,hasPermission:n}=Ft(),a=!wB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(!0),[m,h]=f.useState(!1),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,A,R;d(!0),x(""),j("");try{const z=(await ke.getTranscriptSettings()).data;z&&l({autoDelete:{enabled:!!((k=z.autoDelete)!=null&&k.enabled),afterDays:((A=z.autoDelete)==null?void 0:A.afterDays)??30},publicAccess:{enabled:!!((R=z.publicAccess)!=null&&R.enabled)}})}catch(L){x(L instanceof Error?L.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){h(!0),x(""),j("");try{const k=await ke.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{h(!1)}}}async function E(){var k,A;if(!a){y(!0),x(""),j("");try{const R=await ke.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((A=R.data)==null?void 0:A.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return i?c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-40 w-full rounded-xl"}),c.jsx(Fe,{className:"h-40 w-full rounded-xl"})]}):o?c.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?c.jsx(Ue,{children:c.jsx(He,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{children:c.jsx(He,{children:S})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Auto-delete"}),c.jsx(Nt,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),c.jsx(rt,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",disabled:a||p,onClick:()=>void E(),children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Run cleanup now"]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Public transcripts"}),c.jsxs(Nt,{children:["When enabled, anyone with the link can view a transcript at"," ",c.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),c.jsx(qe,{children:c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,publicAccess:{enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:c.jsxs(be,{type:"button",disabled:m,onClick:()=>void N(),children:[c.jsx(ye,{icon:Au,size:16}),m?"Saving…":"Save settings"]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:"Could not load transcript settings."})})}function jB(e,n){return n&&e!=="viewer"}function qx(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Kx(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function EB(){var H;const{user:e,hasPermission:n}=Ft(),a=jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[i,d]=f.useState([]),[m,h]=f.useState(null),[p,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[A,R]=f.useState(!1),[L,z]=f.useState(!1),[B,U]=f.useState(!1),[q,Z]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const V=(await ke.listTranscripts()).data??[];d(V),h(ne=>{var J;return ne&&V.some(me=>me.id===ne)?ne:((J=V[0])==null?void 0:J.id)??null})}catch(I){j(I instanceof Error?I.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&ke.getTranscriptSettings().then(I=>{var V,ne;U(!!((ne=(V=I.data)==null?void 0:V.publicAccess)!=null&&ne.enabled))}).catch(()=>U(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return i;const I=C.toLowerCase();return i.filter(V=>V.id.includes(I)||V.filename.toLowerCase().includes(I)||V.ticketName&&V.ticketName.toLowerCase().includes(I))},[i,C]),de=f.useMemo(()=>i.find(I=>I.id===m)??null,[i,m]),ce=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,he=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,M=m&&B?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function K(I){x(""),h(I),k(V=>V+1)}function re(){ce&&window.open(ce,"_blank","noopener,noreferrer")}function oe(){M&&window.open(M,"_blank","noopener,noreferrer")}async function ee(){if(M)try{await navigator.clipboard.writeText(M),Z(!0),window.setTimeout(()=>Z(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function _(){var V;if(!m||!a)return;const I=((V=de==null?void 0:de.ticketName)==null?void 0:V.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${I}? This cannot be undone.`)){z(!0),x("");try{await ke.deleteTranscript(m),await Q()}catch(ne){x(ne instanceof Error?ne.message:"Failed to delete transcript")}finally{z(!1)}}}async function O(){if(!(!he||!de)){R(!0),x("");try{const I=await fetch(he,{credentials:"include"});if(!I.ok){const me=await I.json().catch(()=>({}));throw new Error(me.error||`Download failed (${I.status})`)}const V=await I.blob(),ne=URL.createObjectURL(V),J=document.createElement("a");J.href=ne,J.download=de.filename,J.click(),URL.revokeObjectURL(ne)}catch(I){x(I instanceof Error?I.message:"Failed to download transcript")}finally{R(!1)}}}return c.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),c.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),c.jsx(be,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),c.jsx(be,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:p,children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?c.jsx(xB,{}):o==="settings"?c.jsx(CB,{}):c.jsxs(c.Fragment,{children:[S?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[c.jsxs(We,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[c.jsxs(at,{className:"space-y-3 pb-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Saved transcripts",!p&&i.length>0?c.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",i.length,")"]}):null]}),c.jsxs("div",{className:"relative",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:I=>N(I.target.value),className:"pl-9"})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0 pb-4",children:c.jsx(hi,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:p?c.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((I,V)=>c.jsx(Fe,{className:"h-16 w-full rounded-lg"},V))}):fe.length===0?c.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:32,className:"opacity-40"}),c.jsx("p",{children:i.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):c.jsx("ul",{className:"space-y-1.5",children:fe.map(I=>{var J;const V=I.id===m,ne=((J=I.ticketName)==null?void 0:J.trim())||`Channel ${I.id}`;return c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>K(I.id),className:ie("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",V?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[c.jsx("p",{className:"truncate text-sm font-medium",children:ne}),c.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[Kx(I.createdAt),I.size!=null?` · ${qx(I.size)}`:""]})]})},I.id)})})})})]}),c.jsxs(We,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx(ot,{className:"truncate text-base font-medium",children:de?((H=de.ticketName)==null?void 0:H.trim())||`Channel ${de.id}`:"Preview"}),de?c.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[Kx(de.createdAt),de.size!=null?` · ${qx(de.size)}`:""]}):null]}),c.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[M?c.jsxs(c.Fragment,{children:[c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>void ee(),children:[c.jsx(ye,{icon:x0,size:16}),q?"Copied":"Copy link"]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:oe,children:[c.jsx(ye,{icon:gh,size:16}),"Public page"]})]}):null,c.jsxs(be,{variant:"outline",size:"sm",disabled:!ce,onClick:re,children:[c.jsx(ye,{icon:S4,size:16}),"Open tab"]}),c.jsxs(be,{variant:"outline",size:"sm",disabled:!he||A,onClick:()=>void O(),children:[c.jsx(ye,{icon:Ru,size:16}),A?"Saving…":"Download"]}),a?c.jsxs(be,{variant:"outline",size:"sm",disabled:!m||L,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[c.jsx(ye,{icon:hh,size:16}),L?"Deleting…":"Delete"]}):null]})]}),c.jsxs(qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,de&&ce?c.jsx("iframe",{title:`Transcript ${de.id}`,src:ce,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):c.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:40,className:"opacity-30"}),c.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}const NB=["admin","moderator","editor","viewer","custom"];function kB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Hl("viewer"),yamlOwner:!1}}function TB({permissions:e,onChange:n,disabled:a}){const o=l=>n({...e,...l});return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([l,i])=>c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:l}),c.jsx(Dn,{checked:e[i],disabled:a,onCheckedChange:d=>o({[i]:d})})]},i)),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — view"}),c.jsx(Dn,{checked:e.settings.view,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — install updates"}),c.jsx(Dn,{checked:e.settings.update,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,update:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — view"}),c.jsx(Dn,{checked:e.users.view,disabled:a,onCheckedChange:l=>o({users:{...e.users,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — manage"}),c.jsx(Dn,{checked:e.users.manage,disabled:a,onCheckedChange:l=>o({users:{...e.users,manage:l}})})]})]}),c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),c.jsx("div",{className:"space-y-2",children:xh.map(l=>c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:z4[l]}),c.jsxs("div",{className:"flex items-center gap-4",children:[c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",c.jsx(Dn,{checked:e.configs[l].view,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],view:i}}})})]}),c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",c.jsx(Dn,{checked:e.configs[l].edit,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],edit:i,view:i?!0:e.configs[l].view}}})})]})]})]},l))})]})]})}function RB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function AB(){const{user:e,hasPermission:n}=Ft(),a=n("users.manage"),[o,l]=f.useState([]),[i,d]=f.useState(!0),[m,h]=f.useState(""),[p,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),h("");try{const R=await ke.listDashboardUsers();R.data&&l(R.data.users)}catch(R){h(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function C(){y(kB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Hl(R.role),yamlOwner:R.yamlOwner})}function E(R){p&&y({...p,role:R,permissions:Hl(R,p.permissions)})}async function k(){if(!(!p||!a)){x(!0),h("");try{p.mode==="add"?await ke.addDashboardUser({id:p.id.trim(),role:p.role,username:p.username||void 0,globalName:p.globalName||void 0,enabled:p.enabled,permissions:p.role==="custom"?p.permissions:void 0}):await ke.updateDashboardUser(p.id,{role:p.yamlOwner?void 0:p.role,enabled:p.enabled,username:p.username||void 0,globalName:p.globalName||void 0,permissions:p.role==="custom"?p.permissions:void 0}),y(null),await S()}catch(R){h(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function A(R){if(a&&window.confirm("Remove this user from the dashboard?")){h("");try{await ke.removeDashboardUser(R),await S()}catch(L){h(L instanceof Error?L.message:"Could not remove user")}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),c.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",c.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?c.jsxs(be,{onClick:C,children:[c.jsx(ye,{icon:x4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:m})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Dashboard access"}),c.jsxs(Nt,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),c.jsx(qe,{children:i?c.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):c.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>c.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[c.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:R.avatar,alt:R.username}),c.jsx(bs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),c.jsxs("div",{className:"min-w-0",children:[c.jsxs("p",{className:"truncate font-medium",children:[E0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),c.jsx(Ll,{variant:"secondary",children:M1[R.yamlOwner?"owner":R.role]}),c.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:RB(R)}),R.enabled?c.jsx(Ll,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):c.jsx(Ll,{variant:"outline",children:"Disabled"}),a?c.jsxs("div",{className:"ml-auto flex gap-1",children:[c.jsx(be,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:c.jsx(ye,{icon:C4,size:16})}),R.yamlOwner?null:c.jsx(be,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>A(R.id),"aria-label":"Remove user",children:c.jsx(ye,{icon:hh,size:16})})]}):null]},R.id))})})]}),c.jsx($w,{open:!!p,onOpenChange:R=>!R&&y(null),children:c.jsxs(Zh,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[c.jsxs(Qh,{children:[c.jsx(Jh,{children:(p==null?void 0:p.mode)==="add"?"Add dashboard user":"Edit user"}),c.jsx(eg,{children:p!=null&&p.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":L4[(p==null?void 0:p.role)??"viewer"]})]}),p?c.jsxs("div",{className:"space-y-4",children:[p.mode==="add"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"discord-id",children:"Discord user ID"}),c.jsx(rt,{id:"discord-id",value:p.id,onChange:R=>y({...p,id:R.target.value}),placeholder:"829112572816130058"})]}):null,c.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Display name (optional)"}),c.jsx(rt,{value:p.globalName,onChange:R=>y({...p,globalName:R.target.value})})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Username (optional)"}),c.jsx(rt,{value:p.username,onChange:R=>y({...p,username:R.target.value})})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Role"}),c.jsxs(ud,{value:p.role,disabled:p.yamlOwner,onValueChange:R=>E(R),children:[c.jsx(gi,{children:c.jsx(dd,{})}),c.jsx(vi,{children:p.yamlOwner?c.jsx(no,{value:"owner",children:"Owner"}):NB.map(R=>c.jsx(no,{value:R,children:M1[R]},R))})]})]}),c.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Account enabled"}),c.jsx(Dn,{checked:p.enabled,disabled:p.yamlOwner,onCheckedChange:R=>y({...p,enabled:R})})]}),p.role==="custom"&&!p.yamlOwner?c.jsx(TB,{permissions:p.permissions,onChange:R=>y({...p,permissions:R})}):null]}):null,c.jsxs(Uw,{children:[c.jsx(be,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),c.jsx(be,{disabled:v||!a||(p==null?void 0:p.mode)==="add"&&!/^\d{17,20}$/.test(p.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function _B(){const{hasPermission:e}=Ft(),n=e("settings.update"),a=oo(),[o,l]=f.useState([]),[i,d]=f.useState(""),[m,h]=f.useState(!0),[p,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{h(!0),y("");try{const E=await ke.getAddonsCatalog();E.data&&(l(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{h(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await ke.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const A=E.configFiles[0];A&&a(`/configs?file=${is(A)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),c.jsxs("p",{className:"text-muted-foreground",children:["Install community addons from"," ",c.jsx("a",{href:i||"https://github.com/Emerald-Services/Addons",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Emerald-Services/Addons"}),". Enable addons under"," ",c.jsx(kt,{to:"/configs?file=supportbot",className:"text-primary underline-offset-4 hover:underline",children:"Bot config → General → Addons"}),". Installed addon configs appear in the left sidebar under"," ",c.jsx("strong",{className:"font-medium text-foreground",children:"Addons"}),"."]})]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[c.jsx(ye,{icon:w0,size:16,className:ie("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),p?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:p})}):null,v?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:v})}):null,c.jsxs("section",{className:"space-y-4",children:[c.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"})]}):c.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsxs(ot,{className:"flex items-center gap-2 text-lg",children:[c.jsx(ye,{icon:bh,size:20,className:"text-primary"}),E.name]}),E.installed?c.jsxs(Ll,{variant:"secondary",className:"shrink-0 gap-1",children:[c.jsx(ye,{icon:O4,size:14}),"Installed"]}):null]}),c.jsx(Nt,{children:E.description})]}),c.jsxs(qe,{className:"space-y-2 text-xs text-muted-foreground",children:[c.jsxs("p",{children:[E.jsFiles.length," command file",E.jsFiles.length===1?"":"s",":"," ",c.jsx("span",{className:"font-mono",children:E.jsFiles.join(", ")})]}),E.configFiles.length>0?c.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,A)=>c.jsxs("span",{children:[A>0?", ":null,c.jsx(kt,{to:`/configs?file=${is(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),c.jsxs(p5,{className:"flex flex-wrap gap-2",children:[c.jsx(be,{variant:"outline",size:"sm",asChild:!0,children:c.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View on GitHub"})}),E.installed&&E.configFiles[0]?c.jsx(be,{size:"sm",variant:"secondary",asChild:!0,children:c.jsx(kt,{to:`/configs?file=${is(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?c.jsx(be,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):c.jsxs(be,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[c.jsx(ye,{icon:Ru,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function MB({children:e}){const{isAuthenticated:n,loading:a}=Ft();return a?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?c.jsx(c.Fragment,{children:e}):c.jsx(Mr,{to:"/login",replace:!0})}function OB(){const{complete:e,loading:n}=yC(),a=Sn();return n?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?c.jsx(Mr,{to:"/login",replace:!0}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/login",element:c.jsx(TP,{})}),c.jsxs(ln,{element:c.jsx(MB,{children:c.jsx(XM,{})}),children:[c.jsx(ln,{index:!0,element:c.jsx(ZP,{})}),c.jsx(ln,{path:"system",element:c.jsx(as,{permission:"overview",children:c.jsx(iB,{})})}),c.jsx(ln,{path:"settings",element:c.jsx(as,{permission:"settings.view",children:c.jsx(oB,{})})}),c.jsx(ln,{path:"configs",element:c.jsx(EP,{})}),c.jsx(ln,{path:"logs",element:c.jsx(as,{permission:"logs",children:c.jsx(gB,{})})}),c.jsx(ln,{path:"transcripts",element:c.jsx(as,{permission:"transcripts",children:c.jsx(EB,{})})}),c.jsx(ln,{path:"users",element:c.jsx(as,{permission:"users.view",children:c.jsx(AB,{})})}),c.jsx(ln,{path:"addons",element:c.jsx(as,{permission:"settings.view",children:c.jsx(_B,{})})})]}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/",replace:!0})})]}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/setup",element:c.jsx(HP,{})}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/setup",replace:!0})})]})}function DB({...e}){return c.jsx(mP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}nB();IN.createRoot(document.getElementById("root")).render(c.jsx(f.StrictMode,{children:c.jsx(d4,{children:c.jsx(xw,{children:c.jsx(U4,{children:c.jsx(ZM,{children:c.jsxs(I4,{children:[c.jsx(OB,{}),c.jsx(DB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-DoxvJPsp.css b/public/dashboard/assets/index-DoxvJPsp.css new file mode 100644 index 0000000..7da031e --- /dev/null +++ b/public/dashboard/assets/index-DoxvJPsp.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[50vh\]{height:50vh}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,60vh\)\]{height:min(520px,60vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[432px\]{max-width:432px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-100\%\]{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-\[\#5865F2\]{--tw-border-opacity: 1;border-left-color:rgb(88 101 242 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[\#2b2d31\]{--tw-bg-opacity: 1;background-color:rgb(43 45 49 / var(--tw-bg-opacity, 1))}.bg-\[\#313338\]{--tw-bg-opacity: 1;background-color:rgb(49 51 56 / var(--tw-bg-opacity, 1))}.bg-\[\#5865F2\]{--tw-bg-opacity: 1;background-color:rgb(88 101 242 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-green-500\/10{background-color:#22c55e1a}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent 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-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Poppins,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#949ba4\]{--tw-text-opacity: 1;color:rgb(148 155 164 / var(--tw-text-opacity, 1))}.text-\[\#dbdee1\]{--tw-text-opacity: 1;color:rgb(219 222 225 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/30{color:#ffffff4d}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-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-md{--tw-backdrop-blur: blur(12px);-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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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-1000{transition-duration:1s}.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)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.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-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;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-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/10:hover{background-color:hsl(var(--secondary) / .1)}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px 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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--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))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-56{width:14rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.md\: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))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:pb-0{padding-bottom:0}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/index.html b/public/dashboard/index.html index 6c77a82..d65cf4b 100644 --- a/public/dashboard/index.html +++ b/public/dashboard/index.html @@ -10,8 +10,8 @@ href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> - - + +
diff --git a/public/dashboard/logo.png b/public/dashboard/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc062076e31f6b4c5c70eced1b663ab38ac1598 GIT binary patch literal 83402 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 literal 0 HcmV?d00001 From ea2a8c97ae081d3fe9151a5fe28aa6c4cf8b8ffa Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Sun, 26 Jul 2026 21:23:16 +0100 Subject: [PATCH 16/22] Removed optional addons by default --- Addons/Configs/applicationsystem.yml | 111 --- Addons/Configs/discord-stats.yml | 11 - Addons/Configs/minecraft.yml | 16 - Addons/Configs/tempvc.yml | 38 - Addons/Configs/vouchley.yml | 28 - Addons/Data/applicationsystem.json | 3 - Addons/MinecraftStatus.js | 78 --- .../Configs/sactionaddon.yml | 5 - Addons/SupportBot Sanctions/sanction.js | 157 ----- Addons/SupportBot Tags v1.3/Data/tags.json | 2 - Addons/SupportBot Tags v1.3/tags.js | 85 --- Addons/SupportBot Tags v1.3/tagscreate.js | 76 -- Addons/SupportBot Tags v1.3/tagsdelete.js | 68 -- .../SupportBot-Invoices v1/Configs/paypal.yml | 14 - Addons/SupportBot-Invoices v1/paypal.js | 146 ---- Addons/TempVC.js | 227 ------ Addons/applicationsystem.js | 652 ------------------ Addons/calculator.js | 83 --- Addons/discord-stats.js | 139 ---- Addons/vouchley.js | 292 -------- Data/ai-memory.db | Bin 0 -> 4096 bytes Data/ai-memory.db-shm | Bin 0 -> 32768 bytes Data/ai-memory.db-wal | Bin 0 -> 45352 bytes Data/supportbot.db | Bin 0 -> 49152 bytes 24 files changed, 2231 deletions(-) delete mode 100644 Addons/Configs/applicationsystem.yml delete mode 100644 Addons/Configs/discord-stats.yml delete mode 100644 Addons/Configs/minecraft.yml delete mode 100644 Addons/Configs/tempvc.yml delete mode 100644 Addons/Configs/vouchley.yml delete mode 100644 Addons/Data/applicationsystem.json delete mode 100644 Addons/MinecraftStatus.js delete mode 100644 Addons/SupportBot Sanctions/Configs/sactionaddon.yml delete mode 100644 Addons/SupportBot Sanctions/sanction.js delete mode 100644 Addons/SupportBot Tags v1.3/Data/tags.json delete mode 100644 Addons/SupportBot Tags v1.3/tags.js delete mode 100644 Addons/SupportBot Tags v1.3/tagscreate.js delete mode 100644 Addons/SupportBot Tags v1.3/tagsdelete.js delete mode 100644 Addons/SupportBot-Invoices v1/Configs/paypal.yml delete mode 100644 Addons/SupportBot-Invoices v1/paypal.js delete mode 100644 Addons/TempVC.js delete mode 100644 Addons/applicationsystem.js delete mode 100644 Addons/calculator.js delete mode 100644 Addons/discord-stats.js delete mode 100644 Addons/vouchley.js create mode 100644 Data/ai-memory.db create mode 100644 Data/ai-memory.db-shm create mode 100644 Data/ai-memory.db-wal create mode 100644 Data/supportbot.db diff --git a/Addons/Configs/applicationsystem.yml b/Addons/Configs/applicationsystem.yml deleted file mode 100644 index db1c3e5..0000000 --- a/Addons/Configs/applicationsystem.yml +++ /dev/null @@ -1,111 +0,0 @@ -Command: - Name: "applicationsetup" - Description: "Posts the application panel" - Permission: - - "ManageGuild" - -Application: - ReviewChannelId: "1481380207305691287" - CooldownHours: 24 - OneOpenApplicationPerUserPerType: true - -Panel: - Title: "Applications" - Description: "Choose an application type from the dropdown below." - Placeholder: "Select an application type" - -Review: - Title: "New Application" - AcceptLabel: "Accept" - RejectLabel: "Reject" - -Applications: - staff: - Name: "Staff Team" - Description: "Apply for the staff team" - AcceptedRoleId: "" # Leave "" blank to disable - Questions: - Username: - Label: "What is your Discord username?" - Placeholder: "ExampleUser" - Required: true - Style: "Short" - MinLength: 2 - MaxLength: 50 - - Age: - Label: "How old are you?" - Placeholder: "18" - Required: true - Style: "Short" - MinLength: 1 - MaxLength: 3 - - Timezone: - Label: "What is your timezone?" - Placeholder: "GMT / BST / EST" - Required: true - Style: "Short" - MinLength: 2 - MaxLength: 30 - - Experience: - Label: "What experience do you have?" - Placeholder: "Tell us about your experience" - Required: true - Style: "Paragraph" - MinLength: 10 - MaxLength: 1000 - - Reason: - Label: "Why should we accept you?" - Placeholder: "Tell us why" - Required: true - Style: "Paragraph" - MinLength: 10 - MaxLength: 1000 - - developer: - Name: "Developer" - Description: "Apply for the development team" - AcceptedRoleId: "" - Questions: - Username: - Label: "What is your Discord username?" - Placeholder: "ExampleUser" - Required: true - Style: "Short" - MinLength: 2 - MaxLength: 50 - - Languages: - Label: "What languages do you know?" - Placeholder: "JavaScript, Python, Lua" - Required: true - Style: "Paragraph" - MinLength: 3 - MaxLength: 500 - - Projects: - Label: "What projects have you worked on?" - Placeholder: "Describe your work" - Required: true - Style: "Paragraph" - MinLength: 10 - MaxLength: 1000 - - Availability: - Label: "How active can you be?" - Placeholder: "How much time can you commit?" - Required: true - Style: "Paragraph" - MinLength: 5 - MaxLength: 500 - - Reason: - Label: "Why do you want this role?" - Placeholder: "Tell us why" - Required: true - Style: "Paragraph" - MinLength: 10 - MaxLength: 1000 \ No newline at end of file diff --git a/Addons/Configs/discord-stats.yml b/Addons/Configs/discord-stats.yml deleted file mode 100644 index f295c0e..0000000 --- a/Addons/Configs/discord-stats.yml +++ /dev/null @@ -1,11 +0,0 @@ - -# SupportBot | Emerald Services -# Discord Stats addon | Created by Xiled Emerald - -Guild_ID: "GUILD_ID_HERE" - -StatsCategory: "Server Statistics" - -UserCount_Name: "Total Members:" -ChannelCount_Name: "Total Channels:" -RoleCount_Name: "Total Roles:" \ No newline at end of file diff --git a/Addons/Configs/minecraft.yml b/Addons/Configs/minecraft.yml deleted file mode 100644 index 552deec..0000000 --- a/Addons/Configs/minecraft.yml +++ /dev/null @@ -1,16 +0,0 @@ -# Minecraft Server Configuration - -Java: - IP: "play.sapling.gg" - Port: 25565 - DisplayName: "Java Edition" -Bedrock: - IP: "play.sapling.gg" - Port: 19132 - DisplayName: "Bedrock Edition" - -Embed: - Color: "#57F287" - OfflineColor: "#ED4245" - - diff --git a/Addons/Configs/tempvc.yml b/Addons/Configs/tempvc.yml deleted file mode 100644 index f7227bc..0000000 --- a/Addons/Configs/tempvc.yml +++ /dev/null @@ -1,38 +0,0 @@ -# SupportBot Temporary Voice Channels Configuration -# Addon Version 1.0 - -Enabled: true - -# The ID of the voice channel that users join to create a new one -JoinToCreateChannelID: "CHANNEL_ID" - -# The category ID where new channels should be created (Optional) -# If left blank, it will create it in the same category as the JoinToCreate channel -CategoryID: "CATEGORY_ID" - -# The name pattern for new channels - -# Placeholders: -# {user}: Username -ChannelNamePattern: "🔊 {user}'s Channel" - -# Should the channel be deleted when the last person leaves? -AutoDelete: true - -# Voice Channel Hub (Control Panel) -Hub: - Enabled: true - SendOnCreate: true - LayoutStyle: "classic" # classic | modern - - # Classic Layout Settings (Standard Embed + Buttons) - Classic: - Title: "Voice Channel Hub" - Description: "Manage your voice channel using the buttons below." - Color: "#57F287" - - # Modern Layout Settings (V2 Containers) - Modern: - Title: "Voice Channel Controller" - Body: "Control temporary voice channel using this control panel." - Color: "#57F287" diff --git a/Addons/Configs/vouchley.yml b/Addons/Configs/vouchley.yml deleted file mode 100644 index ed67607..0000000 --- a/Addons/Configs/vouchley.yml +++ /dev/null @@ -1,28 +0,0 @@ -# +==================================================================================+ -# | | -# | __ __ _ _ _ _ _ | -# | \ \ / /__ _ _ ___| |__ | | ___ _ _ / \ __| | __| | ___ _ __ | -# | \ \ / / _ \| | | |/ __| '_ \| |/ _ \ | | | / _ \ / _` |/ _` |/ _ \| '_ \ | -# | \ V / (_) | |_| | (__| | | | | __/ |_| | / ___ \ (_| | (_| | (_) | | | | | -# | \_/ \___/ \__,_|\___|_| |_|_|\___|\__, | /_/ \_\__,_|\__,_|\___/|_| |_| | -# | |___/ | -# | | -# | Vouchley Addon for SupportBot | -# | Created by Emerald Services | -# | | -# +==================================================================================+ - -Vouchley: - API_Key: "REQUEST_API_KEY_BELOW" - -# Vouchley API Documentation: https://www.vouchley.com/docs/api/getting-started -# To use the API you will need an API key. To get this create a ticket in https://discord.gg/buzz - -Embed: - Colour: 0x6063fc # 0x without the # - Ephermal: true # Make the profile searches hidden so only the interacting user can see them. - -Command: - Name: "vouchley" # The name of the command (/vouchley) - Description: "Search a Vouchley Profile." # The description of the command (/vouchley) - Permissions: ["SendMessages"] \ No newline at end of file diff --git a/Addons/Data/applicationsystem.json b/Addons/Data/applicationsystem.json deleted file mode 100644 index caf3f18..0000000 --- a/Addons/Data/applicationsystem.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "applications": [] -} \ No newline at end of file diff --git a/Addons/MinecraftStatus.js b/Addons/MinecraftStatus.js deleted file mode 100644 index 3ff782b..0000000 --- a/Addons/MinecraftStatus.js +++ /dev/null @@ -1,78 +0,0 @@ -const Discord = require("discord.js"); -const { Command } = require("../Structures/Addon.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const axios = require("axios"); - -// Load configs -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const minecraftConfig = yaml.load(fs.readFileSync("./Addons/Configs/minecraft.yml", "utf8")); - -module.exports = new Command({ - name: "serverip", - description: "Display the Minecraft server IP and status", - options: [ - { - name: "type", - description: "The edition of Minecraft (Java or Bedrock)", - type: Discord.ApplicationCommandOptionType.String, - required: true, - choices: [ - { name: "Java", value: "java" }, - { name: "Bedrock", value: "bedrock" }, - ], - }, - ], - permissions: ["SendMessages"], - - async run(interaction) { - const type = interaction.options.getString("type"); - const config = type === "java" ? minecraftConfig.Java : minecraftConfig.Bedrock; - - await interaction.deferReply(); - - try { - const response = await axios.get(`https://api.mcstatus.io/v2/status/${type}/${config.IP}:${config.Port}`); - const data = response.data; - - if (!data.online) { - throw new Error("Server is offline"); - } - - const embed = new Discord.EmbedBuilder() - .setTitle(`${config.DisplayName} Status`) - .setTimestamp(); - - embed.setColor(minecraftConfig.Embed.Color || supportbot.Embed.Colours.General) - .setDescription(`The server is currently **Online**!`) - .addFields( - { name: "IP Address", value: `\`${config.IP}\``, inline: true }, - { name: "Port", value: `\`${config.Port}\``, inline: true }, - { name: "Players", value: `\`${data.players.online}/${data.players.max}\``, inline: true }, - { name: "Version", value: `\`${type === "java" ? data.version.name_clean : data.version.name || "Unknown"}\``, inline: true } - ); - - if (data.motd && data.motd.clean) { - embed.addFields({ name: "MOTD", value: `\`\`\`${data.motd.clean}\`\`\`` }); - } - - await interaction.editReply({ embeds: [embed] }); - } catch (error) { - console.error("Error fetching Minecraft status:", error); - - const config = interaction.options.getString("type") === "java" ? minecraftConfig.Java : minecraftConfig.Bedrock; - - const embed = new Discord.EmbedBuilder() - .setTitle(`${config.DisplayName} Status`) - .setTimestamp() - .setColor(minecraftConfig.Embed.OfflineColor || "#FF0000") - .setDescription(`The server is currently **Offline**.`) - .addFields( - { name: "IP Address", value: `\`${config.IP}\``, inline: true }, - { name: "Port", value: `\`${config.Port}\``, inline: true } - ); - - await interaction.editReply({ embeds: [embed] }); - } - }, -}); diff --git a/Addons/SupportBot Sanctions/Configs/sactionaddon.yml b/Addons/SupportBot Sanctions/Configs/sactionaddon.yml deleted file mode 100644 index f352e10..0000000 --- a/Addons/SupportBot Sanctions/Configs/sactionaddon.yml +++ /dev/null @@ -1,5 +0,0 @@ -# SupportBot Sanction Addon -# Created by ItsNyoty - -LogChannel: "1275426007980965908" -# The ID of the channel where the logs will be sent. \ No newline at end of file diff --git a/Addons/SupportBot Sanctions/sanction.js b/Addons/SupportBot Sanctions/sanction.js deleted file mode 100644 index 153a166..0000000 --- a/Addons/SupportBot Sanctions/sanction.js +++ /dev/null @@ -1,157 +0,0 @@ -const Discord = require('discord.js'); -const fs = require('fs'); -const yaml = require('js-yaml'); -const { Command } = require('../Structures/Addon.js'); -const supportbot = yaml.load(fs.readFileSync('./Configs/supportbot.yml', 'utf8')); -const sactionaddon = yaml.load(fs.readFileSync('./Addons/Configs/sactionaddon.yml', 'utf8')); - -module.exports = new Command({ - name: 'sanction', - description: 'Sanction a user (kick, ban, or timeout).', - options: [ - { - name: 'action', - type: 3, - description: 'The action to perform (kick, ban, timeout)', - required: true, - choices: [ - { name: 'Kick', value: 'kick' }, - { name: 'Ban', value: 'ban' }, - { name: 'Timeout', value: 'timeout' } - ] - }, - { - name: 'user', - type: 6, - description: 'The user to sanction', - required: true - }, - { - name: 'reason', - type: 3, - description: 'Reason for the sanction', - required: false - }, - { - name: 'duration', - type: 3, - description: 'Duration of the timeout (e.g., "10m", "2h", "1d")', - required: false - } - ], - permissions: [], - - async run(interaction) { - const action = interaction.options.getString('action'); - const user = interaction.options.getUser('user'); - const reason = interaction.options.getString('reason') || 'No reason provided'; - const duration = interaction.options.getString('duration'); - const staffRoleId = supportbot.Roles.StaffMember.Staff; - - const member = interaction.guild.members.cache.get(interaction.user.id); - if (!member || !member.roles.cache.has(staffRoleId)) { - return interaction.reply({ content: 'You do not have permission to use this command.', ephemeral: true }); - } - - const targetMember = interaction.guild.members.cache.get(user.id); - if (!targetMember) { - return interaction.reply({ content: 'The user is not a member of this guild.', ephemeral: true }); - } - - try { - let actionMessage = ''; - let logEmbed = new Discord.EmbedBuilder().setColor(supportbot.Embed.Colours.General); - - switch (action) { - case 'kick': - if (!targetMember.kickable) return interaction.reply({ content: 'I cannot kick this user.', ephemeral: true }); - await targetMember.kick(reason); - actionMessage = `Successfully kicked ${user.tag} for: ${reason}`; - logEmbed - .setTitle('User Kicked') - .setDescription(`**User:** ${user.tag}\n**Reason:** ${reason}`) - .addFields( - { name: 'Action By', value: interaction.user.tag, inline: true }, - { name: 'Action', value: 'Kick', inline: true }, - { name: 'Timestamp', value: new Date().toISOString(), inline: true } - ); - break; - - case 'ban': - if (!targetMember.bannable) return interaction.reply({ content: 'I cannot ban this user.', ephemeral: true }); - await targetMember.ban({ reason }); - actionMessage = `Successfully banned ${user.tag} for: ${reason}`; - logEmbed - .setTitle('User Banned') - .setDescription(`**User:** ${user.tag}\n**Reason:** ${reason}`) - .addFields( - { name: 'Action By', value: interaction.user.tag, inline: true }, - { name: 'Action', value: 'Ban', inline: true }, - { name: 'Timestamp', value: new Date().toISOString(), inline: true } - ); - break; - - case 'timeout': - // Ensure a valid duration is provided - if (!duration) return interaction.reply({ content: 'You must specify a duration for the timeout.', ephemeral: true }); - - // Convert duration to milliseconds - const parsedDuration = ms(duration); - if (!parsedDuration) return interaction.reply({ content: 'Invalid duration format. Use "1s", "5m", "2h", or "1d".', ephemeral: true }); - - // Apply the timeout - await targetMember.timeout(parsedDuration, reason); - actionMessage = `Successfully timed out ${user.tag} for ${duration} with reason: ${reason}`; - logEmbed - .setTitle('User Timed Out') - .setDescription(`**User:** ${user.tag}\n**Duration:** ${duration}\n**Reason:** ${reason}`) - .addFields( - { name: 'Action By', value: interaction.user.tag, inline: true }, - { name: 'Action', value: 'Timeout', inline: true }, - { name: 'Timestamp', value: new Date().toISOString(), inline: true } - ); - break; - - default: - return interaction.reply({ content: 'Invalid action specified.', ephemeral: true }); - } - - // Send the action message - interaction.reply({ content: actionMessage, ephemeral: true }); - - // Log the action to the logging channel - const logChannel = interaction.guild.channels.cache.get(sactionaddon.LogChannel); - if (logChannel) { - logChannel.send({ embeds: [logEmbed] }); - } else { - console.error('Logging channel not found.'); - } - } catch (error) { - console.error('Error executing sanction command:', error); - interaction.reply({ content: 'An error occurred while executing the command.', ephemeral: true }); - } - }, -}); - -/** - * Converts a time duration string to milliseconds. - * @param {string} duration - The duration string (e.g., "10m", "2h", "1d"). - * @returns {number} - The duration in milliseconds. - */ -function ms(duration) { - const regex = /^(\d+)([smhd])$/; - const match = regex.exec(duration); - - if (!match) return null; - - const value = parseInt(match[1], 10); - const unit = match[2]; - - switch (unit) { - case 's': return value * 1000; // seconds - case 'm': return value * 60 * 1000; // minutes - case 'h': return value * 60 * 60 * 1000; // hours - case 'd': return value * 24 * 60 * 60 * 1000; // days - default: return null; - } -} \ No newline at end of file diff --git a/Addons/SupportBot Tags v1.3/Data/tags.json b/Addons/SupportBot Tags v1.3/Data/tags.json deleted file mode 100644 index 7a73a41..0000000 --- a/Addons/SupportBot Tags v1.3/Data/tags.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/Addons/SupportBot Tags v1.3/tags.js b/Addons/SupportBot Tags v1.3/tags.js deleted file mode 100644 index 22fa01d..0000000 --- a/Addons/SupportBot Tags v1.3/tags.js +++ /dev/null @@ -1,85 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -module.exports = new Command({ - name: "tags", - description: "Retrieve a saved tag.", - options: [ - { - name: 'name', - type: Discord.ApplicationCommandOptionType.String, - description: 'The name of the tag', - required: true, - autocomplete: true - }, - ], - permissions: ["SendMessages"], - - async autocomplete(interaction) { - const tagsPath = './Addons/Data/tags.json'; - const focusedValue = interaction.options.getFocused().toLowerCase(); - - if (!fs.existsSync(tagsPath)) { - return interaction.respond([]); - } - - const tags = JSON.parse(fs.readFileSync(tagsPath, 'utf8')); - const choices = Object.keys(tags) - .filter(tag => tag.toLowerCase().includes(focusedValue)) - .slice(0, 25) // Discord has a limit of 25 choices - .map(tag => ({ name: tag, value: tag })); - - return interaction.respond(choices); - }, - - async run(interaction) { - const tagsPath = './Addons/Data/tags.json'; - const tagName = interaction.options.getString('name').toLowerCase(); - - if (!fs.existsSync(tagsPath)) { - const embed = new Discord.EmbedBuilder() - .setDescription('No tags have been created yet.') - .setColor(supportbot.Embed.Colours.General); - return interaction.reply({ embeds: [embed], ephemeral: true }); - } - - const tags = JSON.parse(fs.readFileSync(tagsPath, 'utf8')); - - if (tags[tagName]) { - const tag = tags[tagName]; - - if (tag.embed) { - // For embeds, Discord automatically handles line breaks correctly - const embed = new Discord.EmbedBuilder() - .setDescription(tag.content) - .setColor(supportbot.Embed.Colours.General); - - if (tag.image) { - embed.setImage(tag.image); - } - - return interaction.reply({ embeds: [embed], ephemeral: tag.ephemeral || false }); - } else { - // For plain text, we need to keep the line breaks - const response = { - content: tag.content, - ephemeral: tag.ephemeral || false - }; - - if (tag.image) { - response.files = [tag.image]; - } - - return interaction.reply(response); - } - } else { - const embed = new Discord.EmbedBuilder() - .setDescription(`Tag "${tagName}" not found.`) - .setColor(supportbot.Embed.Colours.General); - return interaction.reply({ embeds: [embed], ephemeral: true }); - } - } -}); \ No newline at end of file diff --git a/Addons/SupportBot Tags v1.3/tagscreate.js b/Addons/SupportBot Tags v1.3/tagscreate.js deleted file mode 100644 index 0af78ee..0000000 --- a/Addons/SupportBot Tags v1.3/tagscreate.js +++ /dev/null @@ -1,76 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -module.exports = new Command({ - name: "tagscreate", - description: "Create a new tag.", - options: [ - { - name: 'name', - type: Discord.ApplicationCommandOptionType.String, - description: 'The name of the tag', - required: true, - }, - { - name: 'content', - type: Discord.ApplicationCommandOptionType.String, - description: 'The content of the tag (use ; or /n for new lines)', - required: true, - }, - { - name: 'image', - type: Discord.ApplicationCommandOptionType.Attachment, - description: 'The image URL of the tag', - required: false, - }, - { - name: 'embed', - type: Discord.ApplicationCommandOptionType.Boolean, - description: 'Do you want this tag to send as an embed', - required: false, - }, - { - name: 'ephemeral', - type: Discord.ApplicationCommandOptionType.Boolean, - description: 'Do you want this tag to send as ephemeral', - required: false, - }, - ], - permissions: ["SendMessages"], - - async run(interaction) { - const tagName = interaction.options.getString('name').toLowerCase(); - let tagContent = interaction.options.getString('content'); - const tagImage = interaction.options.getAttachment('image'); - const isEmbed = interaction.options.getBoolean('embed'); - const isEphemeral = interaction.options.getBoolean('ephemeral'); - const tagsPath = './Addons/Data/tags.json'; - - // Process line breaks in content - support both ; and /n notations - tagContent = tagContent.replace(/;/g, '\n').replace(/\/n/g, '\n'); - - let tags = {}; - - if (fs.existsSync(tagsPath)) { - tags = JSON.parse(fs.readFileSync(tagsPath, 'utf8')); - } - - tags[tagName] = { - content: tagContent, - image: tagImage ? tagImage.url : null, - embed: isEmbed || false, - ephemeral: isEphemeral || false, - }; - - fs.writeFileSync(tagsPath, JSON.stringify(tags, null, 4)); - - const embed = new Discord.EmbedBuilder() - .setDescription(`Tag "${tagName}" created successfully.`) - .setColor(supportbot.Embed.Colours.General); - - return interaction.reply({ embeds: [embed], ephemeral: true }); - }, -}); \ No newline at end of file diff --git a/Addons/SupportBot Tags v1.3/tagsdelete.js b/Addons/SupportBot Tags v1.3/tagsdelete.js deleted file mode 100644 index 250a8eb..0000000 --- a/Addons/SupportBot Tags v1.3/tagsdelete.js +++ /dev/null @@ -1,68 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -module.exports = new Command({ - name: "tagsdelete", - description: "Delete an existing tag.", - options: [ - { - name: 'name', - type: Discord.ApplicationCommandOptionType.String, - description: 'The name of the tag to delete', - required: true, - autocomplete: true - }, - ], - permissions: ["SendMessages"], - - async autocomplete(interaction) { - const tagsPath = './Addons/Data/tags.json'; - const focusedValue = interaction.options.getFocused().toLowerCase(); - - if (!fs.existsSync(tagsPath)) { - return interaction.respond([]); - } - - const tags = JSON.parse(fs.readFileSync(tagsPath, 'utf8')); - const choices = Object.keys(tags) - .filter(tag => tag.toLowerCase().includes(focusedValue)) - .slice(0, 25) // Discord has a limit of 25 choices - .map(tag => ({ name: tag, value: tag })); - - return interaction.respond(choices); - }, - - async run(interaction) { - const tagsPath = './Addons/Data/tags.json'; - const tagName = interaction.options.getString('name').toLowerCase(); - - if (!fs.existsSync(tagsPath)) { - const embed = new Discord.EmbedBuilder() - .setDescription('No tags have been created yet.') - .setColor(supportbot.Embed.Colours.General); - return interaction.reply({ embeds: [embed], ephemeral: true }); - } - - let tags = JSON.parse(fs.readFileSync(tagsPath, 'utf8')); - - if (!tags[tagName]) { - const embed = new Discord.EmbedBuilder() - .setDescription(`Tag "${tagName}" not found.`) - .setColor(supportbot.Embed.Colours.General); - return interaction.reply({ embeds: [embed], ephemeral: true }); - } - - delete tags[tagName]; - - fs.writeFileSync(tagsPath, JSON.stringify(tags, null, 4)); - - const embed = new Discord.EmbedBuilder() - .setDescription(`Tag "${tagName}" deleted successfully.`) - .setColor(supportbot.Embed.Colours.General); - - return interaction.reply({ embeds: [embed], ephemeral: true }); - } -}); \ No newline at end of file diff --git a/Addons/SupportBot-Invoices v1/Configs/paypal.yml b/Addons/SupportBot-Invoices v1/Configs/paypal.yml deleted file mode 100644 index 0796f6a..0000000 --- a/Addons/SupportBot-Invoices v1/Configs/paypal.yml +++ /dev/null @@ -1,14 +0,0 @@ -PayPal: - ClientID: "clientID_Here" - ClientSecret: "ClientSecret_Here" - Mode: "live" # or "live" - Email: "Email_Here" # Add your PayPal email here -Embed: - Colours: - General: "#0099ff" - Success: "#00ff00" # Add more colors if needed - Error: "#ff0000" # Add more colors if needed - Footer: "PayPal Invoice" # Add footer text here - Logo: "https://your-logo-url.com/logo.png" # Add logo URL if used in invoice - Note: "Thank you for your business!" # Add a note if used in invoice - TOS: "Please review our terms and conditions. https://domain.com/tos" # Add terms of service if used in invoice diff --git a/Addons/SupportBot-Invoices v1/paypal.js b/Addons/SupportBot-Invoices v1/paypal.js deleted file mode 100644 index bd02844..0000000 --- a/Addons/SupportBot-Invoices v1/paypal.js +++ /dev/null @@ -1,146 +0,0 @@ -const { EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder, ApplicationCommandOptionType } = require('discord.js'); -const fs = require('fs'); -const yaml = require('js-yaml'); -const paypal = require('paypal-rest-sdk'); -const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed - -// Load the PayPal configuration -const config = yaml.load(fs.readFileSync("./Addons/Configs/paypal.yml", "utf8")); -const supportbot = config; - -// Configure PayPal SDK -paypal.configure({ - mode: supportbot.PayPal.Mode, // sandbox or live - client_id: supportbot.PayPal.ClientID, - client_secret: supportbot.PayPal.ClientSecret -}); - -module.exports = new Command({ - name: "invoice", - description: "Generate a PayPal invoice for a user.", - options: [ - { - name: "user", - description: "The user to notify.", - type: ApplicationCommandOptionType.User, - required: true, - }, - { - name: "price", - description: "The amount to invoice.", - type: ApplicationCommandOptionType.String, - required: true, - }, - { - name: "service", - description: "The service provided.", - type: ApplicationCommandOptionType.String, - required: true, - }, - { - name: "email", - description: "The email to invoice.", - type: ApplicationCommandOptionType.String, - required: true, - } - ], - permissions: ["Administrator"], - - async run(interaction) { - const user = interaction.options.getUser("user"); - const price = interaction.options.getString("price"); - const service = interaction.options.getString("service"); - const email = interaction.options.getString("email"); - - // Validate the price format - if (isNaN(price) || parseFloat(price) <= 0) { - const errorEmbed = new EmbedBuilder() - .setDescription(`The price provided is invalid.`) - .setColor(supportbot.Embed.Colours.Error) - .setFooter({ text: supportbot.Embed.Footer }); - return interaction.reply({ embeds: [errorEmbed], ephemeral: true }); - } - - const invoiceData = { - "merchant_info": { - "email": supportbot.PayPal.Email, - "business_name": interaction.guild.name - }, - "billing_info": [{ - "email": email - }], - "items": [{ - "name": service, - "quantity": 1, - "unit_price": { - "currency": "USD", - "value": price - } - }], - "logo_url": supportbot.PayPal.Logo, - "note": supportbot.PayPal.Note, - "terms": supportbot.PayPal.TOS, - "payment_term": { - "term_type": "NET_45" - }, - "tax_inclusive": false, - "total_amount": { - "currency": "USD", - "value": price - } - }; - - paypal.invoice.create(invoiceData, function (error, invoice) { - if (error) { - console.error(error); - const errorEmbed = new EmbedBuilder() - .setTitle(`PayPal Error`) - .setDescription(`There was an error creating the invoice. Please check your configuration and try again.`) - .setColor(supportbot.Embed.Colours.Error) - .setFooter({ text: supportbot.Embed.Footer }); - return interaction.reply({ embeds: [errorEmbed], ephemeral: true }); - } - - const invoiceId = invoice.id; - paypal.invoice.send(invoiceId, function (error) { - if (error) { - console.error(error); - const errorEmbed = new EmbedBuilder() - .setTitle(`PayPal Error`) - .setDescription(`There was an error sending the invoice. Please check your configuration and try again.`) - .setColor(supportbot.Embed.Colours.Error) - .setFooter({ text: supportbot.Embed.Footer }); - return interaction.reply({ embeds: [errorEmbed], ephemeral: true }); - } - - const invoiceEmbed = new EmbedBuilder() - .setTitle(`Payment System | ${interaction.guild.name}`) - .addFields( - { name: 'Service', value: service, inline: true }, - { name: 'Amount Due', value: `$${price}`, inline: true }, - { name: 'Currency', value: 'USD', inline: true }, - { name: 'Invoice ID', value: `\`${invoiceId}\``, inline: false } - ) - .setColor(supportbot.Embed.Colours.General) - .setFooter({ text: supportbot.Embed.Footer }) - .setTimestamp(); - - // Create a button with a link to the invoice - const invoiceButton = new ButtonBuilder() - .setLabel('View Invoice') - .setStyle(ButtonStyle.Link) - .setURL(`https://www.paypal.com/invoice/payerView/details/${invoiceId}`); - - // Create the action row - const actionRow = new ActionRowBuilder() - .addComponents(invoiceButton); - - // Send the embed with the button - interaction.reply({ - embeds: [invoiceEmbed], - components: [actionRow] - }); - }); - }); - }, -}); diff --git a/Addons/TempVC.js b/Addons/TempVC.js deleted file mode 100644 index 1c3b190..0000000 --- a/Addons/TempVC.js +++ /dev/null @@ -1,227 +0,0 @@ -const Discord = require("discord.js"); -const { Event } = require("../Structures/Addon.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); - -const tempVCConfig = yaml.load(fs.readFileSync("./Addons/Configs/tempvc.yml", "utf8")); - -const tempChannels = new Map(); - -const voiceStateUpdate = new Event("voiceStateUpdate", async (client, oldState, newState) => { - if (!tempVCConfig.Enabled) return; - - const member = newState.member; - const guild = newState.guild; - - if (newState.channelId === tempVCConfig.JoinToCreateChannelID) { - console.log(`[TempVC] ${member.user.tag} joined the Join-to-Create channel.`); - } - - if (newState.channelId === tempVCConfig.JoinToCreateChannelID) { - try { - const parentCategory = tempVCConfig.CategoryID || newState.channel.parentId; - const channelName = tempVCConfig.ChannelNamePattern.replace("{user}", member.user.username); - - const newChannel = await guild.channels.create({ - name: channelName, - type: Discord.ChannelType.GuildVoice, - parent: parentCategory, - permissionOverwrites: [ - { - id: member.id, - allow: [Discord.PermissionFlagsBits.ManageChannels, Discord.PermissionFlagsBits.MoveMembers], - }, - ], - }); - - tempChannels.set(newChannel.id, member.id); - await member.voice.setChannel(newChannel); - - console.log(`[TempVC] Created channel "${channelName}" for ${member.user.tag}`); - - if (tempVCConfig.Hub.Enabled && tempVCConfig.Hub.SendOnCreate) { - try { - const { ActionRowBuilder, ButtonBuilder, EmbedBuilder, MessageFlags, ButtonStyle } = Discord; - const layoutStyle = tempVCConfig.Hub.LayoutStyle || "classic"; - - if (layoutStyle === "classic") { - const config = tempVCConfig.Hub.Classic; - const embed = new EmbedBuilder() - .setTitle(config.Title) - .setDescription(config.Description) - .setColor(config.Color); - - const buttons = new ActionRowBuilder().addComponents( - new ButtonBuilder().setCustomId("tempvc_lock").setLabel("Lock").setEmoji("🔒").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("tempvc_unlock").setLabel("Unlock").setEmoji("🔓").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("tempvc_rename").setLabel("Rename").setEmoji("✏️").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("tempvc_limit").setLabel("Limit").setEmoji("👥").setStyle(ButtonStyle.Secondary), - new ButtonBuilder().setCustomId("tempvc_claim").setLabel("Claim Ownership").setEmoji("👑").setStyle(ButtonStyle.Primary) - ); - - await newChannel.send({ embeds: [embed], components: [buttons] }); - } else { - const config = tempVCConfig.Hub.Modern; - const colorInt = parseInt(config.Color.replace("#", ""), 16); - - const container = { - type: 11, - accent_color: colorInt, - children: [ - { - type: 12, - children: [ - { type: 13, content: `## ${config.Title}` }, - { type: 13, content: config.Body } - ] - }, - { - type: 15, - divider: true - }, - { - type: 1, - components: [ - { type: 2, custom_id: "tempvc_lock", label: "Lock", emoji: { name: "🔒" }, style: 2 }, - { type: 2, custom_id: "tempvc_unlock", label: "Unlock", emoji: { name: "🔓" }, style: 2 }, - { type: 2, custom_id: "tempvc_rename", label: "Rename", emoji: { name: "✏️" }, style: 2 }, - { type: 2, custom_id: "tempvc_limit", label: "Limit", emoji: { name: "👥" }, style: 2 } - ] - }, - { - type: 1, - components: [ - { type: 2, custom_id: "tempvc_claim", label: "Claim Ownership", emoji: { name: "👑" }, style: 1 } - ] - } - ] - }; - - await newChannel.send({ - flags: MessageFlags.IsComponentsV2, - components: [container] - }); - } - } catch (hubError) { - console.error("[TempVC] Error sending Hub:", hubError); - } - } - } catch (error) { - console.error("[TempVC] Error creating temporary channel:", error); - } - } - - if (oldState.channelId && tempChannels.has(oldState.channelId)) { - const oldChannel = oldState.channel; - - if (oldChannel && oldChannel.members.size === 0) { - try { - await oldChannel.delete(); - tempChannels.delete(oldState.channelId); - console.log(`[TempVC] Deleted empty temporary channel "${oldChannel.name}"`); - } catch (error) { - if (error.code !== 10003) { - console.error("[TempVC] Error deleting temporary channel:", error); - } - tempChannels.delete(oldState.channelId); - } - } - } -}); - -const interactionEvent = new Event("interactionCreate", async (client, interaction) => { - if (!interaction.isButton() && !interaction.isModalSubmit()) return; - if (!interaction.customId.startsWith("tempvc_")) return; - - const channel = interaction.channel; - if (!tempChannels.has(channel.id)) { - return interaction.reply({ content: "This channel is no longer a temporary voice channel.", flags: Discord.MessageFlags.Ephemeral }); - } - - const ownerId = tempChannels.get(channel.id); - const isOwner = interaction.user.id === ownerId || interaction.member.permissions.has(Discord.PermissionFlagsBits.Administrator); - - if (interaction.customId === "tempvc_claim") { - const currentOwnerInVC = channel.members.has(ownerId); - if (currentOwnerInVC && interaction.user.id !== ownerId) { - return interaction.reply({ content: "The owner is still in the voice channel!", flags: Discord.MessageFlags.Ephemeral }); - } - - tempChannels.set(channel.id, interaction.user.id); - await channel.permissionOverwrites.edit(interaction.user.id, { - ManageChannels: true, - MoveMembers: true, - }); - - return interaction.reply({ content: "You are now the owner of this voice channel!", flags: Discord.MessageFlags.Ephemeral }); - } - - if (!isOwner) { - return interaction.reply({ content: "Only the channel owner can use these controls.", flags: Discord.MessageFlags.Ephemeral }); - } - - try { - switch (interaction.customId) { - case "tempvc_lock": - await channel.permissionOverwrites.edit(interaction.guild.id, { Connect: false }); - await interaction.reply({ content: "Channel locked! 🔒", flags: Discord.MessageFlags.Ephemeral }); - break; - case "tempvc_unlock": - await channel.permissionOverwrites.edit(interaction.guild.id, { Connect: null }); - await interaction.reply({ content: "Channel unlocked! 🔓", flags: Discord.MessageFlags.Ephemeral }); - break; - case "tempvc_rename": - const modal = new Discord.ModalBuilder() - .setCustomId("tempvc_modal_rename") - .setTitle("Rename Channel") - .addComponents( - new Discord.ActionRowBuilder().addComponents( - new Discord.TextInputBuilder() - .setCustomId("name") - .setLabel("New Name") - .setStyle(Discord.TextInputStyle.Short) - .setPlaceholder(channel.name) - .setRequired(true) - ) - ); - await interaction.showModal(modal); - break; - case "tempvc_limit": - const limitModal = new Discord.ModalBuilder() - .setCustomId("tempvc_modal_limit") - .setTitle("Set User Limit") - .addComponents( - new Discord.ActionRowBuilder().addComponents( - new Discord.TextInputBuilder() - .setCustomId("limit") - .setLabel("Limit (0-99)") - .setStyle(Discord.TextInputStyle.Short) - .setPlaceholder("0 for no limit") - .setRequired(true) - ) - ); - await interaction.showModal(limitModal); - break; - } - - if (interaction.isModalSubmit()) { - if (interaction.customId === "tempvc_modal_rename") { - const newName = interaction.fields.getTextInputValue("name"); - await channel.setName(newName); - await interaction.reply({ content: `Channel renamed to **${newName}**!`, flags: Discord.MessageFlags.Ephemeral }); - } else if (interaction.customId === "tempvc_modal_limit") { - const limit = parseInt(interaction.fields.getTextInputValue("limit")); - if (isNaN(limit) || limit < 0 || limit > 99) { - return interaction.reply({ content: "Please enter a valid number between 0 and 99.", flags: Discord.MessageFlags.Ephemeral }); - } - await channel.setUserLimit(limit); - await interaction.reply({ content: `User limit set to **${limit === 0 ? "Unlimited" : limit}**!`, flags: Discord.MessageFlags.Ephemeral }); - } - } - } catch (error) { - console.error("[TempVC] Error handling interaction:", error); - if (!interaction.replied) await interaction.reply({ content: "An error occurred.", flags: Discord.MessageFlags.Ephemeral }); - } -}); - -module.exports = [voiceStateUpdate, interactionEvent]; diff --git a/Addons/applicationsystem.js b/Addons/applicationsystem.js deleted file mode 100644 index cb84e34..0000000 --- a/Addons/applicationsystem.js +++ /dev/null @@ -1,652 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const path = require("path"); -const yaml = require("js-yaml"); - -const { Command } = require("../Structures/Addon.js"); - -// Main bot config -const supportbot = yaml.load( - fs.readFileSync("./Configs/supportbot.yml", "utf8") -); - -// Addon config -const addonConfig = yaml.load( - fs.readFileSync("./Addons/Configs/applicationsystem.yml", "utf8") -); - -// Data file -const dataPath = path.join(__dirname, "Data/applicationsystem.json"); - -function ensureDataFile() { - const dir = path.dirname(dataPath); - - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }); - } - - if (!fs.existsSync(dataPath)) { - fs.writeFileSync( - dataPath, - JSON.stringify({ applications: [] }, null, 2), - "utf8" - ); - } -} - -function readData() { - ensureDataFile(); - - try { - const raw = fs.readFileSync(dataPath, "utf8"); - const parsed = JSON.parse(raw); - - if (!parsed || !Array.isArray(parsed.applications)) { - return { applications: [] }; - } - - return parsed; - } catch (error) { - console.error("[ApplicationSystem] Failed to read data file:", error); - return { applications: [] }; - } -} - -function writeData(data) { - ensureDataFile(); - fs.writeFileSync(dataPath, JSON.stringify(data, null, 2), "utf8"); -} - -function now() { - return Date.now(); -} - -function createId() { - return `app_${Date.now()}_${Math.floor(Math.random() * 100000)}`; -} - -function parseColor(value, fallback = 0x2b2d31) { - if (typeof value === "number") return value; - - if (typeof value === "string") { - const cleaned = value.trim().replace("#", ""); - if (/^[0-9A-Fa-f]{6}$/.test(cleaned)) { - return parseInt(cleaned, 16); - } - } - - return fallback; -} - -function getGeneralColour() { - return parseColor(supportbot?.Embed?.Colours?.General, 0x2b2d31); -} - -function buildNoticeContainer(title, description, colour = 0x5865f2) { - return new Discord.ContainerBuilder() - .setAccentColor(colour) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent(`## ${title}`) - ) - .addSeparatorComponents(new Discord.SeparatorBuilder()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent(description) - ); -} - -function buildPanelContainer() { - const options = Object.entries(addonConfig.Applications || {}) - .slice(0, 25) - .map(([key, app]) => - new Discord.StringSelectMenuOptionBuilder() - .setLabel(String(app.Name || key).slice(0, 100)) - .setDescription( - String(app.Description || "Apply for this position").slice(0, 100) - ) - .setValue(key) - ); - - return new Discord.ContainerBuilder() - .setAccentColor(getGeneralColour()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent( - `## ${addonConfig.Panel?.Title || "Applications"}` - ) - ) - .addSeparatorComponents(new Discord.SeparatorBuilder()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent( - addonConfig.Panel?.Description || - "Choose an application from the dropdown below." - ) - ) - .addActionRowComponents( - new Discord.ActionRowBuilder().addComponents( - new Discord.StringSelectMenuBuilder() - .setCustomId("appsystem_select") - .setPlaceholder( - addonConfig.Panel?.Placeholder || "Select an application type" - ) - .addOptions(options) - ) - ); -} - -function textInputStyle(style) { - return style === "Paragraph" - ? Discord.TextInputStyle.Paragraph - : Discord.TextInputStyle.Short; -} - -function sanitizeQuestionKey(key) { - return String(key).toLowerCase().replace(/[^a-z0-9_]/g, "_"); -} - -function formatQuestionTitle(key) { - return String(key) - .replace(/_/g, " ") - .replace(/\b\w/g, (char) => char.toUpperCase()); -} - -function buildApplicationModal(typeKey) { - const applicationType = addonConfig.Applications?.[typeKey]; - if (!applicationType) return null; - - const modal = new Discord.ModalBuilder() - .setCustomId(`appsystem_modal_${typeKey}`) - .setTitle(String(applicationType.Name || typeKey).slice(0, 45)); - - const questionEntries = Object.entries(applicationType.Questions || {}).slice(0, 5); - - for (const [key, question] of questionEntries) { - const input = new Discord.TextInputBuilder() - .setCustomId(sanitizeQuestionKey(key)) - .setLabel(String(question.Label || key).slice(0, 45)) - .setPlaceholder(String(question.Placeholder || "Enter your answer").slice(0, 100)) - .setRequired(Boolean(question.Required)) - .setStyle(textInputStyle(question.Style)) - .setMinLength(Number(question.MinLength || 1)) - .setMaxLength(Number(question.MaxLength || 1000)); - - modal.addComponents( - new Discord.ActionRowBuilder().addComponents(input) - ); - } - - return modal; -} - -function buildReviewContainer(application, reviewerText = null, locked = false) { - const statusText = - application.status === "accepted" - ? "Accepted" - : application.status === "rejected" - ? "Rejected" - : "Pending"; - - const answerLines = Object.entries(application.answers || {}) - .map(([key, value]) => `### ${formatQuestionTitle(key)}\n${value}`) - .join("\n\n"); - - const body = [ - `**Applicant:** <@${application.userId}>`, - `**Tag:** ${application.userTag}`, - `**Application Type:** ${application.typeName}`, - `**Application ID:** \`${application.id}\``, - `**Status:** ${statusText}`, - "", - answerLines || "*No answers provided.*", - ].join("\n"); - - const container = new Discord.ContainerBuilder() - .setAccentColor(getGeneralColour()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent( - `## ${addonConfig.Review?.Title || "New Application"}` - ) - ) - .addSeparatorComponents(new Discord.SeparatorBuilder()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent(body) - ); - - if (reviewerText) { - container - .addSeparatorComponents(new Discord.SeparatorBuilder()) - .addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent(reviewerText) - ); - } - - container.addActionRowComponents( - new Discord.ActionRowBuilder().addComponents( - new Discord.ButtonBuilder() - .setCustomId(`appsystem_accept_${application.id}`) - .setLabel(addonConfig.Review?.AcceptLabel || "Accept") - .setStyle(Discord.ButtonStyle.Success) - .setDisabled(locked), - new Discord.ButtonBuilder() - .setCustomId(`appsystem_reject_${application.id}`) - .setLabel(addonConfig.Review?.RejectLabel || "Reject") - .setStyle(Discord.ButtonStyle.Danger) - .setDisabled(locked) - ) - ); - - return container; -} - -function getPendingApplication(data, guildId, userId, type) { - return data.applications.find( - (app) => - app.guildId === guildId && - app.userId === userId && - app.type === type && - app.status === "pending" - ); -} - -function getCooldownApplication(data, guildId, userId, type) { - const cooldownMs = - Number(addonConfig.Application?.CooldownHours || 24) * 60 * 60 * 1000; - - return data.applications.find( - (app) => - app.guildId === guildId && - app.userId === userId && - app.type === type && - now() - Number(app.createdAt || 0) < cooldownMs - ); -} - -function memberCanReview(member) { - if (!member) return false; - - if (member.permissions?.has(Discord.PermissionFlagsBits.ManageGuild)) { - return true; - } - - return false; -} - -function registerAddonInteractions(client) { - if (client.__applicationSystemRegistered) return; - client.__applicationSystemRegistered = true; - - client.on("interactionCreate", async (interaction) => { - try { - if (!interaction.guild) return; - - // Application dropdown select - if ( - interaction.isStringSelectMenu() && - interaction.customId === "appsystem_select" - ) { - const typeKey = interaction.values[0]; - const applicationType = addonConfig.Applications?.[typeKey]; - - if (!applicationType) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Invalid Application", - "That application type does not exist.", - 0xed4245 - ), - ], - }); - } - - const data = readData(); - - if (addonConfig.Application?.OneOpenApplicationPerUserPerType) { - const existing = getPendingApplication( - data, - interaction.guild.id, - interaction.user.id, - typeKey - ); - - if (existing) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Application Already Open", - `You already have a pending ${applicationType.Name} application.`, - 0xed4245 - ), - ], - }); - } - } - - const cooldownHit = getCooldownApplication( - data, - interaction.guild.id, - interaction.user.id, - typeKey - ); - - if (cooldownHit && cooldownHit.status !== "pending") { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Please Wait", - `You must wait ${addonConfig.Application?.CooldownHours || 24} hours before applying again for ${applicationType.Name}.`, - 0xfee75c - ), - ], - }); - } - - const modal = buildApplicationModal(typeKey); - - if (!modal) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Modal Error", - "The application form could not be created.", - 0xed4245 - ), - ], - }); - } - - return interaction.showModal(modal); - } - - // Application modal submit - if ( - interaction.isModalSubmit() && - interaction.customId.startsWith("appsystem_modal_") - ) { - const typeKey = interaction.customId.replace("appsystem_modal_", ""); - const applicationType = addonConfig.Applications?.[typeKey]; - - if (!applicationType) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Invalid Application", - "That application type no longer exists.", - 0xed4245 - ), - ], - }); - } - - const reviewChannel = interaction.guild.channels.cache.get( - addonConfig.Application?.ReviewChannelId - ); - - if (!reviewChannel) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Configuration Error", - "The review channel was not found. Please contact staff.", - 0xed4245 - ), - ], - }); - } - - const data = readData(); - - if (addonConfig.Application?.OneOpenApplicationPerUserPerType) { - const existing = getPendingApplication( - data, - interaction.guild.id, - interaction.user.id, - typeKey - ); - - if (existing) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Application Already Open", - `You already have a pending ${applicationType.Name} application.`, - 0xed4245 - ), - ], - }); - } - } - - const answers = {}; - const questionEntries = Object.entries(applicationType.Questions || {}).slice(0, 5); - - for (const [key] of questionEntries) { - const inputKey = sanitizeQuestionKey(key); - answers[inputKey] = interaction.fields.getTextInputValue(inputKey); - } - - const application = { - id: createId(), - type: typeKey, - typeName: applicationType.Name || typeKey, - guildId: interaction.guild.id, - userId: interaction.user.id, - userTag: interaction.user.tag || interaction.user.username, - status: "pending", - createdAt: now(), - reviewerId: null, - reviewedAt: null, - reviewMessageId: null, - answers, - }; - - const reviewMessage = await reviewChannel.send({ - flags: Discord.MessageFlags.IsComponentsV2, - components: [buildReviewContainer(application, null, false)], - }); - - application.reviewMessageId = reviewMessage.id; - data.applications.push(application); - writeData(data); - - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Application Sent", - `Your ${applicationType.Name} application has been submitted successfully.`, - 0x57f287 - ), - ], - }); - } - - // Review buttons - if ( - interaction.isButton() && - (interaction.customId.startsWith("appsystem_accept_") || - interaction.customId.startsWith("appsystem_reject_")) - ) { - if (!memberCanReview(interaction.member)) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "No Permission", - "You do not have permission to review applications.", - 0xed4245 - ), - ], - }); - } - - const isAccept = interaction.customId.startsWith("appsystem_accept_"); - const applicationId = interaction.customId.replace( - isAccept ? "appsystem_accept_" : "appsystem_reject_", - "" - ); - - const data = readData(); - const application = data.applications.find((app) => app.id === applicationId); - - if (!application) { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Not Found", - "This application no longer exists in storage.", - 0xed4245 - ), - ], - }); - } - - if (application.status !== "pending") { - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Already Reviewed", - `This application has already been ${application.status}.`, - 0xfee75c - ), - ], - }); - } - - application.status = isAccept ? "accepted" : "rejected"; - application.reviewerId = interaction.user.id; - application.reviewedAt = now(); - writeData(data); - - const reviewerText = [ - `### Review Result`, - `**Decision:** ${isAccept ? "Accepted" : "Rejected"}`, - `**Reviewer:** <@${interaction.user.id}>`, - `**Reviewed At:** `, - ].join("\n"); - - await interaction.update({ - flags: Discord.MessageFlags.IsComponentsV2, - components: [ - buildReviewContainer(application, reviewerText, true), - ], - }); - - const applicationType = addonConfig.Applications?.[application.type]; - - if (isAccept && applicationType?.AcceptedRoleId) { - const member = await interaction.guild.members - .fetch(application.userId) - .catch(() => null); - - if (member) { - await member.roles.add(applicationType.AcceptedRoleId).catch(() => null); - } - } - - const applicantUser = await interaction.client.users - .fetch(application.userId) - .catch(() => null); - - if (applicantUser) { - await applicantUser - .send({ - flags: Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - isAccept ? "Application Accepted" : "Application Rejected", - isAccept - ? `Congratulations! Your ${application.typeName} application in **${interaction.guild.name}** has been accepted.` - : `Your ${application.typeName} application in **${interaction.guild.name}** has been rejected.`, - isAccept ? 0x57f287 : 0xed4245 - ), - ], - }) - .catch(() => null); - } - - return; - } - } catch (error) { - console.error("[ApplicationSystem] Interaction error:", error); - - if (interaction.deferred || interaction.replied) { - return; - } - - return interaction - .reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Error", - "Something went wrong while handling that application interaction.", - 0xed4245 - ), - ], - }) - .catch(() => null); - } - }); -} - -module.exports = new Command({ - name: addonConfig.Command?.Name || "applicationsetup", - description: - addonConfig.Command?.Description || "Posts the application panel", - options: [], - permissions: addonConfig.Command?.Permission || ["ManageGuild"], - - async run(interaction) { - registerAddonInteractions(interaction.client); - - await interaction.channel.send({ - flags: Discord.MessageFlags.IsComponentsV2, - components: [buildPanelContainer()], - }); - - return interaction.reply({ - flags: - Discord.MessageFlags.Ephemeral | - Discord.MessageFlags.IsComponentsV2, - components: [ - buildNoticeContainer( - "Application Panel Posted", - "The application panel has been posted in this channel.", - 0x57f287 - ), - ], - }); - }, -}); \ No newline at end of file diff --git a/Addons/calculator.js b/Addons/calculator.js deleted file mode 100644 index b6c7f95..0000000 --- a/Addons/calculator.js +++ /dev/null @@ -1,83 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const { Command } = require('../Structures/Addon.js'); // Adjust the path as needed -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -module.exports = new Command({ - name: "calculator", - description: "Use a calculator to solve your math problems.", - options: [], - permissions: ["SendMessages"], - - async run(interaction) { - let expression = ""; - let history = ""; - - const createButton = (label, customId) => { - return new Discord.ButtonBuilder() - .setLabel(label) - .setCustomId(customId) - .setStyle(Discord.ButtonStyle.Secondary); - }; - - const createRow = (buttons) => { - return new Discord.ActionRowBuilder().addComponents(buttons); - }; - - const rows = [ - createRow([createButton('7', '7'), createButton('8', '8'), createButton('9', '9'), createButton('/', '/')]), - createRow([createButton('4', '4'), createButton('5', '5'), createButton('6', '6'), createButton('*', '*')]), - createRow([createButton('1', '1'), createButton('2', '2'), createButton('3', '3'), createButton('-', '-')]), - createRow([createButton('0', '0'), createButton('.', '.'), createButton('=', '='), createButton('+', '+')]), - createRow([createButton('Clear', 'clear')]) - ]; - - const embed = new Discord.EmbedBuilder() - .setTitle('Calculator') - .setDescription('Calculator') - .setColor(supportbot.Embed.Colours.General); - - const message = await interaction.reply({ - embeds: [embed], - components: rows, - fetchReply: true - }); - - const filter = i => i.user.id === interaction.user.id; - const collector = message.createMessageComponentCollector({ filter, time: 60000 }); - - collector.on('collect', async i => { - if (i.customId === 'clear') { - expression = ""; - history = ""; - } else if (i.customId === '=') { - try { - const result = eval(expression).toString(); - history += `${expression} = ${result}\n`; - expression = result; - } catch { - expression = "Error"; - } - } else { - if (history.endsWith(`${expression} = ${expression}\n`)) { - history += `\n`; - expression = i.customId; - } else { - expression += i.customId; - } - } - - await i.update({ - embeds: [new Discord.EmbedBuilder().setTitle('Calculator').setDescription(`\`\`\`${history}${expression}\`\`\``).setColor(supportbot.Embed.Colours.General)], - components: rows - }); - }); - - collector.on('end', collected => { - message.edit({ - components: [] - }); - }); - }, -}); diff --git a/Addons/discord-stats.js b/Addons/discord-stats.js deleted file mode 100644 index 1299b91..0000000 --- a/Addons/discord-stats.js +++ /dev/null @@ -1,139 +0,0 @@ -// SupportBot | Emerald Services -// Discord Stats addon | Created by Xiled Emerald - -const fs = require("fs"); - -const Discord = require("discord.js"); -const yaml = require("js-yaml"); -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -// If you need to read something from the main config! -const cmdconfig = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); - -// This is for your Addon Configuration -const config = yaml.load(fs.readFileSync('./Addons/Configs/discord-stats.yml', 'utf8')); - -const { Command, Event } = require("../Structures/Addon"); - -module.exports.commands = [ - - new Command({ - name: "stats", - description: "Create the discord statistic channels", - options: [], - permissions: ["SEND_MESSAGES"], - async run(interaction) { - const guild = interaction.guild; - const statsCategory = guild.channels.cache.find( - (category) => - category.name === config.StatsCategory || - category.id === config.StatsCategory - ); - - if (!statsCategory) { - const errorEmbed = new Discord.MessageEmbed() - .setTitle("Invalid Category") - .setDescription( - `${supportbot.InvalidChannel}\n\n**Category Required:** \`${config.StatsCategory}\`` - ) - .setColor(supportbot.ErrorColour); - - interaction.reply({ - embeds: [errorEmbed], - ephemeral: true, - }); - return; - } - - const guildName = guild.name; - const userCount = guild.memberCount; - const roleCount = guild.roles.cache.size; - const channelCount = guild.channels.cache.size; - - try { - const guildNameChannel = await guild.channels.create(guildName, { - type: "GUILD_VOICE", - }); - - const userCountChannel = await guild.channels.create( - `${config.UserCount_Name} ${userCount}`, - { - type: "GUILD_VOICE", - } - ); - - const channelCountChannel = await guild.channels.create( - `${config.ChannelCount_Name} ${channelCount}`, - { - type: "GUILD_VOICE", - } - ); - - const roleCountChannel = await guild.channels.create( - `${config.RoleCount_Name} ${roleCount}`, - { - type: "GUILD_VOICE", - } - ); - - guildNameChannel.permissionOverwrites.edit(guild.id, { - VIEW_CHANNEL: true, - CONNECT: false, - }); - - userCountChannel.permissionOverwrites.edit(guild.id, { - VIEW_CHANNEL: true, - CONNECT: false, - }); - - channelCountChannel.permissionOverwrites.edit(guild.id, { - VIEW_CHANNEL: true, - CONNECT: false, - }); - - roleCountChannel.permissionOverwrites.edit(guild.id, { - VIEW_CHANNEL: true, - CONNECT: false, - }); - - userCountChannel.setParent(statsCategory.id); - roleCountChannel.setParent(statsCategory.id); - guildNameChannel.setParent(statsCategory.id); - channelCountChannel.setParent(statsCategory.id); - - const successEmbed = new Discord.MessageEmbed() - .setDescription(":white_check_mark: **[DISCORD STATS]** Channels created successfully!") - .setColor(supportbot.EmbedColour); - - interaction.reply({ - embeds: [successEmbed], - ephemeral: true, - }); - - setInterval(() => { - userCountChannel.setName( - `${config.UserCount_Name} ${userCount}` - ); - channelCountChannel.setName( - `${config.ChannelCount_Name} ${channelCount}` - ); - roleCountChannel.setName( - `${config.RoleCount_Name} ${roleCount}` - ); - }, 30000); - } catch (error) { - console.error(error); - const errorEmbed = new Discord.MessageEmbed() - .setTitle("Error") - .setDescription("An error occurred while creating the stats channels.") - .setColor(supportbot.ErrorColour); - - interaction.reply({ - embeds: [errorEmbed], - ephemeral: true, - }); - } - }, - }), - -]; diff --git a/Addons/vouchley.js b/Addons/vouchley.js deleted file mode 100644 index e6a8d26..0000000 --- a/Addons/vouchley.js +++ /dev/null @@ -1,292 +0,0 @@ -const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); -const fetch = require("node-fetch"); -const { Command } = require('../Structures/Addon.js'); - -const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8")); -const vouchleyaddon = yaml.load(fs.readFileSync("./Addons/Configs/vouchley.yml", "utf8")); - -function formatURL(url) { - if (!url) return 'https://www.vouchley.com'; - if (!url.startsWith('http://') && !url.startsWith('https://')) { - return `https://${url}`; - } - return url; -} - -function formatDate(timestamp) { - return ``; -} - -function createReviewEmbed(review, username, currentPage, totalReviews) { - const embed = new Discord.EmbedBuilder() - .setTitle(`Review for ${username}`) - .setColor(vouchleyaddon.Embed.Colour); - - const fields = [ - { - name: "Rating", - value: "⭐".repeat(Math.min(Math.max(review.rating, 1), 5)) || "No rating", - inline: false - }, - { - name: "Platform", - value: review.platform?.toString() || "Not specified", - inline: true - }, - { - name: "Date", - value: formatDate(review.time_sent), - inline: true - } - ]; - - if (review.message && review.message.trim()) { - fields.push({ - name: "Review", - value: `\`\`\`${review.message.substring(0, 1024)}\`\`\``, - inline: false - }); - } - - embed.addFields(fields); - embed.setFooter({ text: `Review ${currentPage + 1} of ${totalReviews}` }); - - return embed; -} - -function createReviewNavigation(currentPage, totalReviews) { - return new Discord.ActionRowBuilder() - .addComponents( - new Discord.ButtonBuilder() - .setCustomId('prev_review') - .setLabel('Previous') - .setStyle(Discord.ButtonStyle.Primary) - .setDisabled(currentPage === 0), - new Discord.ButtonBuilder() - .setCustomId('next_review') - .setLabel('Next') - .setStyle(Discord.ButtonStyle.Primary) - .setDisabled(currentPage === totalReviews - 1), - new Discord.ButtonBuilder() - .setCustomId('back_to_profile') - .setLabel('Back to Profile') - .setStyle(Discord.ButtonStyle.Secondary) - ); -} - -const activeReviews = new Map(); - -module.exports = new Command({ - name: vouchleyaddon.Command.Name, - description: vouchleyaddon.Command.Description, - options: [ - { - name: "search_type", - description: "How do you want to search for the user?", - type: 3, - required: true, - choices: [ - { name: "Vouchley ID", value: "id" }, - { name: "Vouchley Username", value: "username" }, - ] - }, - { - name: "query", - description: "Enter the ID, username, or Discord ID to search", - type: 3, - required: true - } - ], - permissions: vouchleyaddon.Command.Permissions, - - async run(interaction) { - const searchType = interaction.options.getString("search_type"); - const query = interaction.options.getString("query"); - - try { - let apiUrl; - switch (searchType) { - case "id": - apiUrl = `https://www.vouchley.com/api/v1/user?id=${query}`; - break; - case "username": - apiUrl = `https://www.vouchley.com/api/v1/user?username=${query}`; - break; - } - - const response = await fetch(apiUrl, { - headers: { - 'Authorization': `Bearer ${vouchleyaddon.Vouchley.API_Key}`, - 'Content-Type': 'application/json', - } - }); - - const data = await response.json(); - - if (!response.ok || (data.error && data.error.code !== 200)) { - return interaction.reply({ - content: `Error: ${data.error?.message || 'Failed to fetch user data'}`, - ephemeral: vouchleyaddon.Embed.Ephemeral - }); - } - - const user = data.user; - - const profileEmbed = new Discord.EmbedBuilder() - .setTitle(`${user.username} - ${String(user.title || "N/A")}`) - .setColor(vouchleyaddon.Embed.Colour) - .setThumbnail(user.avatar_url) - .addFields([ - { - name: "Discord", - value: `<@${String(user.discord_id)}> (\`${String(user.discord_id)}\`)`, - inline: false - }, - { - name: "Average Rating", - value: `${String(user.average_rating)} (\`${String(user.reviews.length)} Reviews\`)`, - inline: false - } - ]); - - const profileButtons = [ - new Discord.ButtonBuilder() - .setLabel(`Review ${user.username}`) - .setURL(`https://www.vouchley.com/review?user=${user.username}`) - .setStyle(Discord.ButtonStyle.Link) - ]; - - if (user.website) { - profileButtons.push( - new Discord.ButtonBuilder() - .setLabel('Visit Website') - .setURL(formatURL(user.website)) - .setStyle(Discord.ButtonStyle.Link) - ); - } - - if (user.reviews && user.reviews.length > 0) { - profileButtons.push( - new Discord.ButtonBuilder() - .setCustomId('seereviews') - .setLabel('See Reviews') - .setEmoji("⭐") - .setStyle(Discord.ButtonStyle.Secondary) - ); - } - - const profileRow = new Discord.ActionRowBuilder() - .addComponents(profileButtons); - - const message = await interaction.reply({ - embeds: [profileEmbed], - components: [profileRow], - fetchReply: true, - ephemeral: vouchleyaddon.Embed.Ephemeral - }); - - if (user.reviews && user.reviews.length > 0) { - activeReviews.set(message.id, { - reviews: user.reviews, - currentPage: 0, - username: user.username, - profileEmbed, - profileRow - }); - - const collector = message.createMessageComponentCollector({ - time: 600000 - }); - - collector.on('collect', async i => { - const reviewData = activeReviews.get(message.id); - if (!reviewData) return; - - switch (i.customId) { - case 'seereviews': { - const review = reviewData.reviews[reviewData.currentPage]; - const reviewEmbed = createReviewEmbed( - review, - reviewData.username, - reviewData.currentPage, - reviewData.reviews.length - ); - const reviewNav = createReviewNavigation( - reviewData.currentPage, - reviewData.reviews.length - ); - await i.update({ - embeds: [reviewEmbed], - components: [reviewNav], - ephemeral: vouchleyaddon.Embed.Ephemeral - }); - break; - } - case 'prev_review': { - if (reviewData.currentPage > 0) { - reviewData.currentPage--; - const review = reviewData.reviews[reviewData.currentPage]; - const reviewEmbed = createReviewEmbed( - review, - reviewData.username, - reviewData.currentPage, - reviewData.reviews.length - ); - const reviewNav = createReviewNavigation( - reviewData.currentPage, - reviewData.reviews.length - ); - await i.update({ - embeds: [reviewEmbed], - components: [reviewNav], - ephemeral: vouchleyaddon.Embed.Ephemeral - }); - } - break; - } - case 'next_review': { - if (reviewData.currentPage < reviewData.reviews.length - 1) { - reviewData.currentPage++; - const review = reviewData.reviews[reviewData.currentPage]; - const reviewEmbed = createReviewEmbed( - review, - reviewData.username, - reviewData.currentPage, - reviewData.reviews.length - ); - const reviewNav = createReviewNavigation( - reviewData.currentPage, - reviewData.reviews.length - ); - await i.update({ embeds: [reviewEmbed], components: [reviewNav] }); - } - break; - } - case 'back_to_profile': { - await i.update({ - embeds: [reviewData.profileEmbed], - components: [reviewData.profileRow] - }); - break; - } - } - }); - - collector.on('end', () => { - activeReviews.delete(message.id); - }); - } - - } catch (error) { - console.error(error); - if (!interaction.replied) { - await interaction.reply({ - content: "There was an error fetching Vouchley user data.", - ephemeral: vouchleyaddon.Embed.Ephemeral - }); - } - } - } -}); diff --git a/Data/ai-memory.db b/Data/ai-memory.db new file mode 100644 index 0000000000000000000000000000000000000000..c9cf4b4e788deb2a37a4a5eef5db1c380729a4e1 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYC*>nir&9fNV2HHI9bB nXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDP#6LLLQ)5D literal 0 HcmV?d00001 diff --git a/Data/ai-memory.db-shm b/Data/ai-memory.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..423b95bb8e39ba570528873fa5cb5aaf1bbbe722 GIT binary patch literal 32768 zcmeI)F-`(O6b9e{g;lYjL_)F^C0DSt@&Y#Az%#%JD7lZ9@BnsHRyH*Ho|za*En&Vt zd70hKW_I4U{hPh7N@f%_C}lc{wTn93uW$F8x5xft{<2#v?_NK;+8$G=N_y9}c)qVoE(uJv4HT<`O2LVy4P0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlya4rIam@_dh zSLNnh8qx=WKMUl%6(P{3Ku#JG0&NQ9TrDBcrhqAOZT@#%r@%D^0?i8KBvK(jfB*pk v1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyaGC<&iwz@m literal 0 HcmV?d00001 diff --git a/Data/ai-memory.db-wal b/Data/ai-memory.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..98ccbd80463eb8cf48e8272fd107a241acc0a5f1 GIT binary patch literal 45352 zcmeI*O^g#|9LMoaUlU$7B$!l)WCzJA1XdCuYB0WZO=A{Hf!d91V$uxl!|uSmKxc|_ zLdufWc=4ha^@cZJ4klha7%{|yCod*?@W8?7$%KQ6o_wC!PBR@^+9G?P`<-OB^UPbP zpWW_e`u{!8JbNYEPR!nZG?CbrP}B5ZJM9l2o7pj^-FbTZ)bF-jq(zti^xo>%ZsnzO zubnEHzR=IQP22GGLvrtAGV!vm%WaeLE2Z}7Oltph*pQFG@gnVhv&qC$AN;sgu1QYa zNKE}LzcC?z00IagfB*srAbyVo&naX{|5ubtC!`Po_RS|K>5VbWi?@?KM~$!5 z_iobVWH$8qa<%wsv7(=>%pWgQ7WHGrMZK_4JuzRF2RL3VR}TbRF11XnQIp$Oi>Et_ z>dS`X2&;Et%M;DsB~8~7!Crd#L{%>@luBzylxOb?$M3tUDGXmUYVztnJiTyVc{2MX zxw_8peqQkD$G^OD^XP6(U9)#SN>Fo52q1s}0tg_000IagfB*srATXH%s`j4>a|CC8 zHILl6ed{ov3ryw@n^%PZ0tg_000IagfB*srAb>zjpr;?fBQH#Ue*L#Ewh!q?5bZah z@&?iNSp5i6TfYqY5y%H71Q0*~0R#|0009ILKmdW^0#}=t@bqxs@F;L2mCnfv#KsbgH5qqM4oBEKB;nxS zxX!qP>KZ>2<^{ALKASmq`uZE>1vb>5V_qx*2q1s}0tg_000IagfWXET=*bHhg>U~^ zo_c?ENM0Zt;R^a8MA~DGFOb<>?dApKEE56XFfsp*cp(TNfB*srAbo@b3QMw%ZU^ zWH;50G%dsPYqmUJV@cEuU+)xeJ5MpVOYTTTUGf6Dt`8Ywp1c5gfrV0Or1ul|BUsn_ w5vXhYT$mTwa^=N;OFzH;CwYN~;omXmhyVfzAbf&a7{GCFTl1$nj-mo9?B7f{Pg3YA4~Bnj7DxOzA^3? zrfED8!Z3`x`n9TG#g-f|6$kp$EbU*nd)N5-&%bZ4|7$cGpBd}-*Z*2OTKi}9+1lsL zKblV(@0xX8%!U902q1s}0tg`RzY6r4b!&6eoLaHl8%ibP*bfG(_*^|WvD;l+blXo4 zZBdkp-GCGgrAAxFgxp zU)`HNtfw~TUzBaeZXkzw&*}ck%-PB{pA3d*zwG|dIo6Gj?BiT)B$aXpau%(B<_5aU zxxz@gvGg2$tB?me!Tas!<+`=8Vg9~c8gU*-Rl8!G>dNpf=FDO!RqVzSl}1}Uv%hP< zJnV{{a4dtJEcpF}0p>|D*7-Lx@T^=-daq?aE~SqrRX_5_u^$FSy0*l-(C^EGOr(=1 zoABh=jpC6EvgViL8OT6J?r^6i#*rUJe*9r>z$5ATlaa1>{iD#6c95*J%e7NX>{0TC z`CeVW`(Z4z0qg3#?bED_q(NTNz6eoE=ycTK2!nQ@e$`7XZ=B`KvCg~Mg2|{SqqJ!6 zt6I%!Z+v=LsA5H^`qa9aUOUdsG!e#8_{!Ipkm7S`CKZa(JQvEbUd)7^A7+D0uO+cR zk{`n$A9q^RABOrG;&p-|F)zaLC`r+WOEv3Y^SX%?Lvi+tz2)hbX5HG_GSBa2D|<2+ zWQIyz?%tT0P^qHG?=zi_Ua^E0XQi(&XW`t%Dwgld>3C(rA7oj+lg#Y#jhfZjx^8Br zF**CCgPZy%W+nNVxt+Y-N#58HKmY**5I_I{1Q0*~0R#|0psE6mWMbU^S2euM3jqWW zKmY**5I_I{1Q0*~fmDF!|0Dte2q1s}0tg_000IagfB*v37vTAS^<&Ho5kLR|1Q0*~ z0R#|0009IL;Q2o}fB*srAb0q*~+A7f^S00IagfB*srAb Date: Thu, 6 Aug 2026 16:30:04 +0100 Subject: [PATCH 17/22] 26.2-pre-2 --- API/server.js | 465 +++- Configs/api.yml | 37 +- Configs/messages.yml | 23 +- Configs/supportbot-ai.yml | 47 +- Configs/supportbot.yml | 23 +- Configs/ticket-panel.yml | 16 +- Data/ai-memory.db | Bin 4096 -> 0 bytes Data/ai-memory.db-shm | Bin 32768 -> 0 bytes Data/ai-memory.db-wal | Bin 45352 -> 0 bytes Data/supportbot.db | Bin 49152 -> 0 bytes Events/messageCreate.js | 86 + README.md | 213 +- Structures/DashboardGroupStore.js | 199 ++ Structures/DashboardPermissions.js | 6 + Structures/DashboardUserStore.js | 42 +- Structures/Database.js | 16 + Structures/TicketManager.js | 63 +- Structures/TranscriptTemplate.js | 57 +- index.js | 11 +- package-lock.json | 2489 -------------------- package.json | 4 +- public/dashboard/assets/index-BOdhXLlb.js | 206 -- public/dashboard/assets/index-BpDEEtaJ.js | 206 ++ public/dashboard/assets/index-DW3eyGbF.css | 1 + public/dashboard/assets/index-DoxvJPsp.css | 1 - public/dashboard/index.html | 4 +- 26 files changed, 1252 insertions(+), 2963 deletions(-) delete mode 100644 Data/ai-memory.db delete mode 100644 Data/ai-memory.db-shm delete mode 100644 Data/ai-memory.db-wal delete mode 100644 Data/supportbot.db create mode 100644 Structures/DashboardGroupStore.js delete mode 100644 package-lock.json delete mode 100644 public/dashboard/assets/index-BOdhXLlb.js create mode 100644 public/dashboard/assets/index-BpDEEtaJ.js create mode 100644 public/dashboard/assets/index-DW3eyGbF.css delete mode 100644 public/dashboard/assets/index-DoxvJPsp.css diff --git a/API/server.js b/API/server.js index 10b9e24..3c87429 100644 --- a/API/server.js +++ b/API/server.js @@ -98,6 +98,9 @@ class APIServer { this.client = client; this.app = express(); + this.sseClients = new Set(); + global.apiServer = this; + try { const apiCfg = yaml.load(fs.readFileSync('./Configs/api.yml', 'utf8')).API; this.config = apiCfg; @@ -196,12 +199,25 @@ class APIServer { req.dashboardPermissions = access.permissions; req.dashboardRole = access.role; req.dashboardIsOwner = access.isOwner; + + // --- Impersonation / View as Group Mode --- + const impersonateGroupId = req.headers['x-impersonate-group']; + if (impersonateGroupId && (access.isOwner || hasPermission(access.permissions, 'users.manage'))) { + const groupStore = require('../Structures/DashboardGroupStore.js'); + const group = groupStore.getGroup(impersonateGroupId); + if (group) { + req.dashboardPermissions = group.permissions; + req.dashboardImpersonatingGroup = group; + } + } + return next(); } } const authHeader = req.headers.authorization; - if (authHeader === `Bearer ${secret}`) { + const tokenQuery = req.query.token; + if (authHeader === `Bearer ${secret}` || (tokenQuery && tokenQuery === secret)) { grantServiceAccess(req); return next(); } @@ -211,9 +227,22 @@ class APIServer { }); } + broadcast(event, data) { + if (!this.sseClients || this.sseClients.size === 0) return; + const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; + for (const clientRes of this.sseClients) { + try { + clientRes.write(payload); + } catch (e) { + this.sseClients.delete(clientRes); + } + } + } + requirePermission(permission) { return (req, res, next) => { if (req.dashboardService) return next(); + if (req.dashboardIsOwner || req.dashboardImpersonatingGroup) return next(); if (hasPermission(req.dashboardPermissions, permission)) return next(); return forbid(res); }; @@ -222,6 +251,7 @@ class APIServer { requireConfigAccess(mode = 'view') { return (req, res, next) => { if (req.dashboardService) return next(); + if (req.dashboardIsOwner || req.dashboardImpersonatingGroup) return next(); const file = req.params?.file || req.body?.filename; if (!file) return next(); if (!canAccessConfig(req.dashboardPermissions, file, mode)) { @@ -478,6 +508,26 @@ h1{font-size:1.25rem}a{color:#a78bfa} this.startNotificationJobs(); }); + // Periodic system metrics broadcast every 2 seconds to SSE clients + setInterval(() => { + if (!this.sseClients || this.sseClients.size === 0) return; + const totalMem = os.totalmem(); + const freeMem = os.freemem(); + const usedMem = totalMem - freeMem; + const ramPercent = Math.round((usedMem / totalMem) * 100); + const cpuLoad = parseFloat(os.loadavg()[0].toFixed(2)); + + this.broadcast('metrics', { + timestamp: Date.now(), + ping: this.client?.ws?.ping ?? 0, + ram_percent: ramPercent, + ram_used_mb: Math.round(usedMem / 1024 / 1024), + ram_total_mb: Math.round(totalMem / 1024 / 1024), + cpu_load: cpuLoad, + uptime: process.uptime() + }); + }, 2000); + this._httpServer.on('error', (err) => { if (err.code === 'EADDRINUSE') { console.error( @@ -543,6 +593,376 @@ h1{font-size:1.25rem}a{color:#a78bfa} const p = (permission) => this.requirePermission(permission); const cv = (mode) => this.requireConfigAccess(mode); + // --- Real-time SSE Stream --- + app.get('/stream', (req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'Access-Control-Allow-Origin': '*' + }); + res.write('event: connected\ndata: {"connected": true}\n\n'); + this.sseClients.add(res); + + req.on('close', () => { + this.sseClients.delete(res); + }); + }); + + // --- Ticket Chat & Management API --- + app.get('/system/tickets/open', p('tickets'), async (req, res) => { + try { + const allTickets = db.getAllTickets() || []; + const openTickets = allTickets.filter(t => t.status === 'open' || t.status === undefined || t.open); + const guildId = this.client?.guilds?.cache?.first()?.id || ""; + + res.json({ + success: true, + data: { + guildId, + tickets: openTickets.map(t => ({ + ticket_id: t.ticket_id, + user_id: t.user_id, + subject: t.subject || t.reason || 'Untitled Ticket', + description: t.description || '', + department: t.department || 'general', + priority: t.priority || 'medium', + created_at: t.created_at + })) + } + }); + } catch (err) { + console.error('[API] Error fetching open tickets:', err); + res.status(500).json({ success: false, error: 'Failed to fetch open tickets' }); + } + }); + + app.get('/system/tickets/:ticketId/messages', p('tickets'), async (req, res) => { + const { ticketId } = req.params; + try { + const channel = await this.client.channels.fetch(ticketId).catch(() => null); + if (!channel || !channel.isTextBased()) { + return res.status(404).json({ success: false, error: 'Ticket channel not found or inactive.' }); + } + + const fetchedMessages = await channel.messages.fetch({ limit: 50 }); + const messages = Array.from(fetchedMessages.values()) + .reverse() + .map(m => ({ + id: m.id, + author: { + id: m.author.id, + username: m.author.username, + globalName: m.author.globalName || m.author.username, + avatar: m.author.displayAvatarURL({ extension: 'png', size: 64 }), + bot: m.author.bot + }, + content: (() => { + if (m.content && m.content.trim()) return m.content; + if (Array.isArray(m.components) && m.components.length > 0) { + const texts = []; + for (const comp of m.components) { + const data = typeof comp.toJSON === 'function' ? comp.toJSON() : comp; + if (data.content) texts.push(data.content); + if (Array.isArray(data.components)) { + for (const child of data.components) { + const childData = typeof child.toJSON === 'function' ? child.toJSON() : child; + if (childData.content) texts.push(childData.content); + if (childData.label && (childData.type === 10 || childData.type === 'TEXT_DISPLAY')) { + texts.push(childData.label); + } + } + } + } + if (texts.length > 0) return texts.join('\n'); + } + return m.content || ''; + })(), + containerColor: (() => { + if (Array.isArray(m.components)) { + for (const comp of m.components) { + const data = typeof comp.toJSON === 'function' ? comp.toJSON() : comp; + if (data.accent_color) { + return `#${data.accent_color.toString(16).padStart(6, '0')}`; + } + } + } + return null; + })(), + embeds: m.embeds.map(e => ({ + title: e.title || null, + description: e.description || null, + color: e.color ? `#${e.color.toString(16).padStart(6, '0')}` : '#5865F2', + author: e.author ? { name: e.author.name, iconURL: e.author.iconURL } : null, + fields: (e.fields || []).map(f => ({ name: f.name, value: f.value, inline: f.inline })), + footer: e.footer ? { text: e.footer.text, iconURL: e.footer.iconURL } : null, + thumbnail: e.thumbnail?.url ? { url: e.thumbnail.url } : null, + image: e.image?.url ? { url: e.image.url } : null, + timestamp: e.timestamp || null + })), + components: (m.components || []).map(c => { + const data = typeof c.toJSON === 'function' ? c.toJSON() : c; + return { + type: data.type, + components: (data.components || []).map(sub => { + const subData = typeof sub.toJSON === 'function' ? sub.toJSON() : sub; + return { + type: subData.type, + label: subData.label || subData.content || null, + style: subData.style || null, + url: subData.url || null, + customId: subData.custom_id || subData.customId || null, + emoji: subData.emoji ? (subData.emoji.name || subData.emoji.id) : null + }; + }) + }; + }), + attachments: Array.from(m.attachments.values()).map(a => ({ + id: a.id, + name: a.name, + url: a.url, + contentType: a.contentType + })), + createdAt: m.createdTimestamp + })); + + res.json({ success: true, data: { ticketId, messages } }); + } catch (err) { + console.error('[API] Error fetching ticket messages:', err); + res.status(500).json({ success: false, error: 'Failed to fetch ticket messages' }); + } + }); + + app.post('/system/tickets/:ticketId/reply', p('tickets'), async (req, res) => { + const { ticketId } = req.params; + const { message, staffName, attachments } = req.body; + + const hasText = message && message.trim(); + const hasAttachments = Array.isArray(attachments) && attachments.length > 0; + + if (!hasText && !hasAttachments) { + return res.status(400).json({ success: false, error: 'Message content or attachment is required.' }); + } + + try { + const channel = await this.client.channels.fetch(ticketId).catch(() => null); + if (!channel || !channel.isTextBased()) { + return res.status(404).json({ success: false, error: 'Ticket channel not found or inactive.' }); + } + + const { AttachmentBuilder } = require('discord.js'); + const files = (attachments || []).map(att => { + const base64Data = att.data.includes(',') ? att.data.split(',')[1] : att.data; + const buffer = Buffer.from(base64Data, 'base64'); + return new AttachmentBuilder(buffer, { name: att.filename || 'attachment.png' }); + }); + + const apiConfig = require('../Structures/ConfigStore').api; + const liveChatMode = (apiConfig?.API?.LiveChat?.Mode || 'webhook').toLowerCase(); + + const staffTag = staffName ? staffName.trim() : (req.dashboardUser?.username || 'Staff'); + const contentText = hasText ? message.trim() : ''; + + let sentMsg; + if (liveChatMode === 'webhook') { + let webhook; + try { + const webhooks = await channel.fetchWebhooks(); + webhook = webhooks.find(wh => wh.name === 'SupportBot WebChat' || wh.owner?.id === this.client.user.id); + if (!webhook) { + webhook = await channel.createWebhook({ + name: 'SupportBot WebChat', + avatar: this.client.user.displayAvatarURL() + }); + } + } catch (whErr) { + console.warn('[API] Could not fetch/create webhook for channel, falling back to bot send:', whErr.message); + } + + if (webhook) { + let avatarURL = this.client.user.displayAvatarURL({ extension: 'png' }); + + if (req.dashboardUser?.id && req.dashboardUser?.avatar) { + avatarURL = `https://cdn.discordapp.com/avatars/${req.dashboardUser.id}/${req.dashboardUser.avatar}.png`; + } else { + try { + const guild = channel.guild; + if (guild) { + const members = await guild.members.fetch().catch(() => null); + const member = members?.find(m => + m.user.username.toLowerCase() === staffTag.toLowerCase() || + m.displayName.toLowerCase() === staffTag.toLowerCase() || + m.user.tag.toLowerCase() === staffTag.toLowerCase() + ); + if (member) { + avatarURL = member.displayAvatarURL({ extension: 'png', size: 256 }); + } + } + } catch (e) { + // fallback to bot avatar + } + } + + sentMsg = await webhook.send({ + content: contentText || undefined, + username: staffTag, + avatarURL, + files + }); + } else { + const formattedContent = contentText ? `**[${staffTag}]** ${contentText}` : `**[${staffTag}]**`; + sentMsg = await channel.send({ content: formattedContent, files }); + } + } else if (liveChatMode === 'bot_noprefix' || liveChatMode === 'bot_no_prefix' || liveChatMode === 'noprefix') { + // Bot mode without [Username] prefix + sentMsg = await channel.send({ content: contentText || undefined, files }); + } else { + // Bot mode with [Username] prefix + const formattedContent = contentText ? `**[${staffTag}]** ${contentText}` : `**[${staffTag}]**`; + sentMsg = await channel.send({ content: formattedContent, files }); + } + + const sentAttachments = Array.from(sentMsg.attachments.values()).map(a => ({ + id: a.id, + name: a.name, + url: a.url, + contentType: a.contentType + })); + + const messageData = { + id: sentMsg.id, + author: { + id: sentMsg.author.id, + username: staffTag, + globalName: `${staffTag} (via Dashboard)`, + avatar: sentMsg.author.displayAvatarURL({ extension: 'png', size: 64 }), + bot: false, + isDashboard: true + }, + content: contentText, + embeds: [], + attachments: sentAttachments, + createdAt: sentMsg.createdTimestamp + }; + + this.broadcast('ticket_message', { + ticketId, + message: messageData + }); + + res.json({ success: true, data: messageData }); + } catch (err) { + console.error('[API] Error sending ticket reply:', err); + res.status(500).json({ success: false, error: 'Failed to send message to Discord.' }); + } + }); + + app.delete('/system/tickets/:ticketId/messages/:messageId', p('tickets'), async (req, res) => { + const { ticketId, messageId } = req.params; + try { + const channel = await this.client.channels.fetch(ticketId).catch(() => null); + if (!channel || !channel.isTextBased()) { + return res.status(404).json({ success: false, error: 'Ticket channel not found.' }); + } + + const targetMsg = await channel.messages.fetch(messageId).catch(() => null); + if (!targetMsg) { + return res.status(404).json({ success: false, error: 'Message not found in Discord.' }); + } + + await targetMsg.delete(); + + this.broadcast('ticket_message_deleted', { + ticketId, + messageId + }); + + res.json({ success: true, message: 'Message deleted successfully.' }); + } catch (err) { + console.error('[API] Error deleting message:', err); + res.status(500).json({ success: false, error: 'Failed to delete message in Discord.' }); + } + }); + + app.patch('/system/tickets/:ticketId/messages/:messageId', p('tickets'), async (req, res) => { + const { ticketId, messageId } = req.params; + const { content } = req.body; + if (!content || !content.trim()) { + return res.status(400).json({ success: false, error: 'Content cannot be empty.' }); + } + + try { + const channel = await this.client.channels.fetch(ticketId).catch(() => null); + if (!channel || !channel.isTextBased()) { + return res.status(404).json({ success: false, error: 'Ticket channel not found.' }); + } + + const targetMsg = await channel.messages.fetch(messageId).catch(() => null); + if (!targetMsg) { + return res.status(404).json({ success: false, error: 'Message not found in Discord.' }); + } + + const updatedMsg = await targetMsg.edit({ content: content.trim() }); + + this.broadcast('ticket_message_updated', { + ticketId, + messageId, + content: content.trim() + }); + + res.json({ success: true, data: { id: updatedMsg.id, content: content.trim() } }); + } catch (err) { + console.error('[API] Error editing message:', err); + res.status(500).json({ success: false, error: 'Failed to edit message in Discord.' }); + } + }); + + app.post('/system/tickets/:ticketId/close', p('tickets'), async (req, res) => { + const { ticketId } = req.params; + const { reason } = req.body || {}; + const staffTag = req.dashboardUser?.username || 'Staff'; + + try { + const channel = await this.client.channels.fetch(ticketId).catch(() => null); + if (!channel || !channel.isTextBased()) { + db.updateTicketStatus(ticketId, 'closed'); + this.broadcast('ticket_closed', { ticket_id: ticketId }); + return res.json({ success: true, message: 'Ticket marked as closed.' }); + } + + try { + const ticketManager = require('../Structures/TicketManager'); + if (typeof ticketManager.createTranscript === 'function') { + const fakeInteraction = { + channel, + guild: channel.guild, + user: { + id: req.dashboardUser?.id || this.client.user.id, + tag: staffTag, + displayAvatarURL: () => this.client.user.displayAvatarURL() + }, + client: this.client + }; + await ticketManager.createTranscript(fakeInteraction, reason || 'Closed via Web Dashboard').catch(() => null); + } + } catch (trErr) { + console.warn('[API] Transcript generation on close skipped:', trErr.message); + } + + db.updateTicketStatus(ticketId, 'closed'); + this.broadcast('ticket_closed', { ticket_id: ticketId }); + + setTimeout(async () => { + await channel.delete(`Ticket closed by ${staffTag} via Web Dashboard`).catch(() => null); + }, 1500); + + res.json({ success: true, message: 'Ticket closed successfully.' }); + } catch (err) { + console.error('[API] Error closing ticket:', err); + res.status(500).json({ success: false, error: 'Failed to close ticket.' }); + } + }); + app.put('/branding', p('settings.update'), (req, res) => { try { const branding = dashboardBranding.updateBranding({ @@ -670,6 +1090,49 @@ h1{font-size:1.25rem}a{color:#a78bfa} } }); + // --- Custom Dashboard Groups API --- + const groupStore = require('../Structures/DashboardGroupStore.js'); + + app.get('/dashboard-groups', p('users.view'), (req, res) => { + try { + res.json({ + success: true, + data: { + groups: groupStore.listGroups(), + }, + }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + app.post('/dashboard-groups', p('users.manage'), (req, res) => { + try { + const group = groupStore.createGroup(req.body); + res.json({ success: true, data: group }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.put('/dashboard-groups/:id', p('users.manage'), (req, res) => { + try { + const group = groupStore.updateGroup(req.params.id, req.body); + res.json({ success: true, data: group }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + + app.delete('/dashboard-groups/:id', p('users.manage'), (req, res) => { + try { + groupStore.deleteGroup(req.params.id); + res.json({ success: true }); + } catch (err) { + res.status(400).json({ success: false, error: err.message }); + } + }); + app.get('/guild/status', p('overview'), (req, res) => { try { if (!this.client?.user) { diff --git a/Configs/api.yml b/Configs/api.yml index c59abd3..3aa2a67 100644 --- a/Configs/api.yml +++ b/Configs/api.yml @@ -1,34 +1,63 @@ +# ___ _ ___ _ +# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_ +# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | | +# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_| +# |_| |_| +# +# SupportBot created by Emerald Services +# Installed with MIT License +# +# Discord Support: https://discord.gg/emeraldsrv +# Official Website & Marketplace: https://emeraldsrv.com +# +# Messages Configuration (api.yml) + + # ------------------------------- # API Server Configuration # ------------------------------- -# Copy to api.yml and fill in your values (api.yml is not committed with real secrets). API: Enabled: true Port: 3000 SecretKey: "SECRET_KEY" + # Set to 1 when the dashboard is behind nginx, Cloudflare, Pterodactyl proxy, etc. # so http/https is detected from X-Forwarded-Proto. TrustProxy: false EmeraldAPIKey: "EMERALDSRV_API_KEY" + # This is required for the one-click addon installer. Get API key from https://emeraldsrv.dev/ OAuth: Enabled: true - ClientId: "1530910674551574580" - ClientSecret: "GIWdonM3bdFILhkg_1XWWeVQRlGf_npu" + ClientId: "CLIENT_ID" + ClientSecret: "CLIENT_SECRET" + # Get Client ID and Client Secret from https://discord.com/developers/applications + # Canonical callback URL (host + path). Protocol (http/https) can follow the # browser when UseRequestOrigin is true (default). RedirectUri: "http://localhost:3000/api/auth/discord/callback" + # Optional: register extra callback URLs in Discord and list them here. + # RedirectUris: # - "https://bot.example.com/api/auth/discord/callback" # UseRequestOrigin: true # CookieSecure: false OwnerUserIds: - - "OWNER_ID" + - "OWNER_USER_ID" + AllowedUserIds: [] + +# Dashboard Features + + LiveChat: + Mode: "webhook" + # "webhook" - Webhook to send messages with staff member's avatar and Discord username + # "bot" - Send messages as Bot account with discord username prefix. + # "bot_noprefix" - Send messages as Bot account without discord username prefix. \ No newline at end of file diff --git a/Configs/messages.yml b/Configs/messages.yml index 35f70eb..a6ff5e9 100644 --- a/Configs/messages.yml +++ b/Configs/messages.yml @@ -8,8 +8,7 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Official Documentation: https://docs.emeraldsrv.com -# Addons Marketplace: https://community.emeraldsrv.com +# Official Website & Marketplace: https://emeraldsrv.com # # Messages Configuration (messages.yml) @@ -21,7 +20,7 @@ Info: Title: "About Us" Description: "SupportBot is an open-sourced support system for discord. It's completely free to use with high amounts of customization to match your own brand." Button: "Visit Site" - URL: "https://docs.emeraldsrv.com" + URL: "https://emeraldsrv.dev" Colour: "#45b463" # ---------------------------- @@ -30,15 +29,15 @@ Info: Welcome: Enabled: true - LayoutStyle: "modern" + LayoutStyle: "classic" # Available Layout Styles # "modern" - For the new Discord v2 components # "classic" - Use the classic Discord look. Embed: Colour: "#45b463" - Title: "Welcome to ServerName" - Message: ":smile: %joined_user% has just landed!\n\n🔨 **Server Rules:** <#CHANNEL_ID>" + Title: "Welcome!" + Message: ":smile: %joined_user% has just landed!" Icon: Mode: "USER" # USER | BOT | CUSTOM CustomURL: "https://example.com/custom.png" @@ -48,18 +47,10 @@ Welcome: Buttons: Enabled: true List: - - label: "BuiltByBit" + - label: "Website" style: "Link" - url: "https://your-website.com/how-to-play-java" + url: "https://emeraldsrv.dev" emoji: "⌨️" - - label: "GitHub" - style: "Link" - url: "https://your-website.com/how-to-play-bedrock" - emoji: "👾" - - label: "Tebex" - style: "Link" - url: "https://your-store.tebex.io/" - emoji: "🛒" Modern: Colour: "#45b463" diff --git a/Configs/supportbot-ai.yml b/Configs/supportbot-ai.yml index 6a2f371..4f47c42 100644 --- a/Configs/supportbot-ai.yml +++ b/Configs/supportbot-ai.yml @@ -1,3 +1,15 @@ +# ___ _ ___ _ +# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_ +# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | | +# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_| +# |_| |_| +# +# SupportBot created by Emerald Services +# Installed with MIT License +# +# Discord Support: https://discord.gg/emeraldsrv +# Official Website & Marketplace: https://emeraldsrv.com + # ------------------------- # SupportBot AI # @@ -8,8 +20,8 @@ Enabled: true General: - Provider: "claude" - Model: "claude-sonnet-4-6" + Provider: "groq" + Model: "MODEL_NAME" Model_API_Key: "MODEL_API_KEY" # Providers Available: # "openai" - Use OpenAI's GPT models. Example: "gpt-5.4" "gpt-5-mini" @@ -17,7 +29,7 @@ General: # "claude" - Use Anthropic's Claude models. Example: "claude-sonnet-4-6" Tokens: 1200 - + Temperature: 0.4 Name: "SupportBot AI" @@ -25,7 +37,7 @@ General: PastebinAPI_URL: "https://pastebin.com/api/api_post.php" Style: - MessageType: "text" + MessageType: "components_v2" # Available Styles for AI: # "embed" - AI responses will be sent as Discord embeds. # "text" - AI responses will be sent as plain messages. @@ -59,12 +71,25 @@ Memory: CustomInstructions: - "You are SupportBot AI made by Emerald Services" - - "You are built with DiscordJS/NodeJS and currently running on dev build 26.0 build 2" - - "You're current build can be found here https://github.com/Emerald-Services/SupportBot/tree/26.0" - - "You're main build can be found here https://builtbybit.com/resources/supportbot-free-advanced-ticket-bot.8940/ and Polymart at https://polymart.org/product/518/supportbot-1-discord-ticket-bot which is version 8.4" - - "dev build 26.0 build 2 includes all-new AI features for SupportBot such as memory system that allows you to remember facts and summaries of conversations, which can be used to provide better responses." - - "SupportBot AI also have a new tickets AI Mode which is enabled in supportbot.ymll, which allows you to assist users in support tickets and provide better responses based on the context of the ticket." - - "Your main purpose is to assist users in the support server and provide helpful responses to their questions and issues. Always be accurate and if you do not have answer then simply ask the person to create a ticket if they need more help." + - "You are built with DiscordJS/NodeJS and currently running on dev build 26.0 + build 2" + - "You're current build can be found here + https://github.com/Emerald-Services/SupportBot/tree/26.0" + - "You're main build can be found here + https://builtbybit.com/resources/supportbot-free-advanced-ticket-bot.8940/ + and Polymart at + https://polymart.org/product/518/supportbot-1-discord-ticket-bot which is + version 8.4" + - "dev build 26.0 build 2 includes all-new AI features for SupportBot such as + memory system that allows you to remember facts and summaries of + conversations, which can be used to provide better responses." + - "SupportBot AI also have a new tickets AI Mode which is enabled in + supportbot.ymll, which allows you to assist users in support tickets and + provide better responses based on the context of the ticket." + - "Your main purpose is to assist users in the support server and provide + helpful responses to their questions and issues. Always be accurate and if + you do not have answer then simply ask the person to create a ticket if they + need more help." #- "Add custom instructions here" Messages: @@ -73,4 +98,4 @@ Messages: AIDisabled: "AI is currently disabled." MessageTooLong: "My response was too long, so I uploaded it here: {pastebin}" SuggestTicketText: "-# Need more help? React with 🎫 to open a ticket." - SuggestTicketReaction : "🎫" + SuggestTicketReaction: "🎫" diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index c249270..b7ee41f 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -8,7 +8,7 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Website: https://emeraldsrv.dev +# Official Website & Marketplace: https://emeraldsrv.com # # SupportBot Configuration (supportbot.yml) @@ -20,7 +20,7 @@ SupportBot_Version: "v26.2-pre1" General: Name: "SupportBot" - Token: "BOT_TOKEN" + Token: "DISCORD_BOT_TOKEN" Addons: Enabled: true GuildId: "GUILD_ID" @@ -33,12 +33,12 @@ Activity: Status: "SupportBot" Type: "Watching" StreamingURL: "https://www.twitch.tv/YOUR_TWITCH_NAME" - # Available Types: - # Playing - # Watching - # Listening - # Competing - # Streaming (URL required) + # Available Activity Types: + # - Playing + # - Watching + # - Listening + # - Competing + # - Streaming (URL required) # You can also update the activity via Discord using: /settings @@ -54,7 +54,6 @@ Embed: Warn: "#fca117" Footer: "SupportBot | Developed by Emerald Development" - # Use 0x to change the colour of the embeds. # ------------------------- # Roles @@ -71,7 +70,7 @@ Roles: Moderator: "ROLE_ID" Mod: - AllowSupportStaff: false + AllowSupportStaff: true # Allow Support Staff to use the /mod command. (More in detail customisation in commands.yml) # ---------------------------- @@ -225,7 +224,7 @@ Ticket: TicketBlacklistLog: "CHANNEL_ID" AIMode: - Enabled: false + Enabled: true ThreadName: "Chat with SupportBot AI" WelcomeMessage: "Hi! I’m SupportBot AI. You can chat with me here about your issue." @@ -366,4 +365,4 @@ MessageUpdate: Colour: "#f2a024" Translate: - TranslateLog: "CHANNEL_ID" + TranslateLog: "CHANNEL_ID" \ No newline at end of file diff --git a/Configs/ticket-panel.yml b/Configs/ticket-panel.yml index 099f267..09775d6 100644 --- a/Configs/ticket-panel.yml +++ b/Configs/ticket-panel.yml @@ -8,8 +8,7 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Official Documentation: https://docs.emeraldsrv.com -# Addons Marketplace: https://community.emeraldsrv.com +# Official Website & Marketplace: https://emeraldsrv.com # # Ticket Creation Panel Configuration (ticket-panel.yml) @@ -20,12 +19,11 @@ Panel: true Style: - Title: "## SupportBot Ticket Creation" - Description: "Click on the button to file a `Ticket` and our team will try their - best to assist you in the best way we can!" - Image: "https://i.imgur.com/dejQvkg.png" + Title: "## 📬 Open Ticket" + Description: "Tap the button to open a support ticket, Our team will respond as soon as possible." + Image: "https://cdn.1tzemerald.space/Emerald%20Services/SBPoster.png" Color: "#45b463" - Layout: "4" + Layout: "3" # Available Layout Styles # "1" - Style 1 - Title & Text, Button at the top -- Image at the bottom @@ -34,8 +32,8 @@ Style: # "4" - Style 4 - Classic Embed (Title & Text, Image on right, Button at bottom) Button: - Text: "Create Ticket" - Emoji: "🎫" + Text: "Open" + Emoji: "🛟" Color: "2" CustomId: "createticket" diff --git a/Data/ai-memory.db b/Data/ai-memory.db deleted file mode 100644 index c9cf4b4e788deb2a37a4a5eef5db1c380729a4e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYC*>nir&9fNV2HHI9bB nXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDP#6LLLQ)5D diff --git a/Data/ai-memory.db-shm b/Data/ai-memory.db-shm deleted file mode 100644 index 423b95bb8e39ba570528873fa5cb5aaf1bbbe722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)F-`(O6b9e{g;lYjL_)F^C0DSt@&Y#Az%#%JD7lZ9@BnsHRyH*Ho|za*En&Vt zd70hKW_I4U{hPh7N@f%_C}lc{wTn93uW$F8x5xft{<2#v?_NK;+8$G=N_y9}c)qVoE(uJv4HT<`O2LVy4P0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlya4rIam@_dh zSLNnh8qx=WKMUl%6(P{3Ku#JG0&NQ9TrDBcrhqAOZT@#%r@%D^0?i8KBvK(jfB*pk v1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyaGC<&iwz@m diff --git a/Data/ai-memory.db-wal b/Data/ai-memory.db-wal deleted file mode 100644 index 98ccbd80463eb8cf48e8272fd107a241acc0a5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45352 zcmeI*O^g#|9LMoaUlU$7B$!l)WCzJA1XdCuYB0WZO=A{Hf!d91V$uxl!|uSmKxc|_ zLdufWc=4ha^@cZJ4klha7%{|yCod*?@W8?7$%KQ6o_wC!PBR@^+9G?P`<-OB^UPbP zpWW_e`u{!8JbNYEPR!nZG?CbrP}B5ZJM9l2o7pj^-FbTZ)bF-jq(zti^xo>%ZsnzO zubnEHzR=IQP22GGLvrtAGV!vm%WaeLE2Z}7Oltph*pQFG@gnVhv&qC$AN;sgu1QYa zNKE}LzcC?z00IagfB*srAbyVo&naX{|5ubtC!`Po_RS|K>5VbWi?@?KM~$!5 z_iobVWH$8qa<%wsv7(=>%pWgQ7WHGrMZK_4JuzRF2RL3VR}TbRF11XnQIp$Oi>Et_ z>dS`X2&;Et%M;DsB~8~7!Crd#L{%>@luBzylxOb?$M3tUDGXmUYVztnJiTyVc{2MX zxw_8peqQkD$G^OD^XP6(U9)#SN>Fo52q1s}0tg_000IagfB*srATXH%s`j4>a|CC8 zHILl6ed{ov3ryw@n^%PZ0tg_000IagfB*srAb>zjpr;?fBQH#Ue*L#Ewh!q?5bZah z@&?iNSp5i6TfYqY5y%H71Q0*~0R#|0009ILKmdW^0#}=t@bqxs@F;L2mCnfv#KsbgH5qqM4oBEKB;nxS zxX!qP>KZ>2<^{ALKASmq`uZE>1vb>5V_qx*2q1s}0tg_000IagfWXET=*bHhg>U~^ zo_c?ENM0Zt;R^a8MA~DGFOb<>?dApKEE56XFfsp*cp(TNfB*srAbo@b3QMw%ZU^ zWH;50G%dsPYqmUJV@cEuU+)xeJ5MpVOYTTTUGf6Dt`8Ywp1c5gfrV0Or1ul|BUsn_ w5vXhYT$mTwa^=N;OFzH;CwYN~;omXmhyVfzAbf&a7{GCFTl1$nj-mo9?B7f{Pg3YA4~Bnj7DxOzA^3? zrfED8!Z3`x`n9TG#g-f|6$kp$EbU*nd)N5-&%bZ4|7$cGpBd}-*Z*2OTKi}9+1lsL zKblV(@0xX8%!U902q1s}0tg`RzY6r4b!&6eoLaHl8%ibP*bfG(_*^|WvD;l+blXo4 zZBdkp-GCGgrAAxFgxp zU)`HNtfw~TUzBaeZXkzw&*}ck%-PB{pA3d*zwG|dIo6Gj?BiT)B$aXpau%(B<_5aU zxxz@gvGg2$tB?me!Tas!<+`=8Vg9~c8gU*-Rl8!G>dNpf=FDO!RqVzSl}1}Uv%hP< zJnV{{a4dtJEcpF}0p>|D*7-Lx@T^=-daq?aE~SqrRX_5_u^$FSy0*l-(C^EGOr(=1 zoABh=jpC6EvgViL8OT6J?r^6i#*rUJe*9r>z$5ATlaa1>{iD#6c95*J%e7NX>{0TC z`CeVW`(Z4z0qg3#?bED_q(NTNz6eoE=ycTK2!nQ@e$`7XZ=B`KvCg~Mg2|{SqqJ!6 zt6I%!Z+v=LsA5H^`qa9aUOUdsG!e#8_{!Ipkm7S`CKZa(JQvEbUd)7^A7+D0uO+cR zk{`n$A9q^RABOrG;&p-|F)zaLC`r+WOEv3Y^SX%?Lvi+tz2)hbX5HG_GSBa2D|<2+ zWQIyz?%tT0P^qHG?=zi_Ua^E0XQi(&XW`t%Dwgld>3C(rA7oj+lg#Y#jhfZjx^8Br zF**CCgPZy%W+nNVxt+Y-N#58HKmY**5I_I{1Q0*~0R#|0psE6mWMbU^S2euM3jqWW zKmY**5I_I{1Q0*~fmDF!|0Dte2q1s}0tg_000IagfB*v37vTAS^<&Ho5kLR|1Q0*~ z0R#|0009IL;Q2o}fB*srAb0q*~+A7f^S00IagfB*srAb { + if (message.guild && typeof db.getTicket === "function") { + const activeTicket = db.getTicket(message.channel.id); + if (activeTicket && global.apiServer) { + global.apiServer.broadcast("ticket_message", { + ticketId: message.channel.id, + message: { + id: message.id, + author: { + id: message.author.id, + username: message.author.username, + globalName: message.author.globalName || message.author.username, + avatar: message.author.displayAvatarURL({ extension: "png", size: 64 }), + bot: message.author.bot + }, + content: (() => { + if (message.content && message.content.trim()) return message.content; + if (Array.isArray(message.components) && message.components.length > 0) { + const texts = []; + for (const comp of message.components) { + const data = typeof comp.toJSON === "function" ? comp.toJSON() : comp; + if (data.content) texts.push(data.content); + if (Array.isArray(data.components)) { + for (const child of data.components) { + const childData = typeof child.toJSON === "function" ? child.toJSON() : child; + if (childData.content) texts.push(childData.content); + if (childData.label && (childData.type === 10 || childData.type === "TEXT_DISPLAY")) { + texts.push(childData.label); + } + } + } + } + if (texts.length > 0) return texts.join("\n"); + } + return message.content || ""; + })(), + containerColor: (() => { + if (Array.isArray(message.components)) { + for (const comp of message.components) { + const data = typeof comp.toJSON === "function" ? comp.toJSON() : comp; + if (data.accent_color) { + return `#${data.accent_color.toString(16).padStart(6, "0")}`; + } + } + } + return null; + })(), + embeds: (message.embeds || []).map(e => ({ + title: e.title || null, + description: e.description || null, + color: e.color ? `#${e.color.toString(16).padStart(6, "0")}` : "#5865F2", + author: e.author ? { name: e.author.name, iconURL: e.author.iconURL } : null, + fields: (e.fields || []).map(f => ({ name: f.name, value: f.value, inline: f.inline })), + footer: e.footer ? { text: e.footer.text, iconURL: e.footer.iconURL } : null, + thumbnail: e.thumbnail?.url ? { url: e.thumbnail.url } : null, + image: e.image?.url ? { url: e.image.url } : null, + timestamp: e.timestamp || null + })), + components: (message.components || []).map(c => { + const data = typeof c.toJSON === "function" ? c.toJSON() : c; + return { + type: data.type, + components: (data.components || []).map(sub => { + const subData = typeof sub.toJSON === "function" ? sub.toJSON() : sub; + return { + type: subData.type, + label: subData.label || subData.content || null, + style: subData.style || null, + url: subData.url || null, + customId: subData.custom_id || subData.customId || null, + emoji: subData.emoji ? (subData.emoji.name || subData.emoji.id) : null + }; + }) + }; + }), + attachments: Array.from((message.attachments || []).values()).map(a => ({ + id: a.id, + name: a.name, + url: a.url, + contentType: a.contentType + })), + createdAt: message.createdTimestamp + } + }); + } + } + if (message.author.bot || !message.guild) return; let shouldRespond = diff --git a/README.md b/README.md index 0fe213c..c38d2cd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@


-
+
SupportBot
@@ -29,7 +29,7 @@ | SupportBot | Node.JS | Discord.JS | Supported | |------------|---------|------------|------------| | 26.x | 22.x | 14.x. | ✅ Yes -| 8.x | 22.x | 14.x. | ✅ Yes +| 8.x | 22.x | 14.x. | ❌ Yes | 7.7.3 | 16.x | 13.x. | ❌ No | 7.x | 16.x | 13.x. | ❌ No | 6.x | 14.x | 13.x. | ❌ No @@ -40,183 +40,54 @@

- - MIT License - - - discord.js v14 - - - Node.js 22.x - - - Upstream SupportBot - -

- -

- About · - Features · - Requirements · - Getting started · - Dashboard access · - Configuration · - Addons · - Development · - Upstream & credits · + Website + • + Wiki +
+ About + • + Support + • License + • + Third-Party + • + Contributors

---- - ## About -This repository is a **community fork** of [SupportBot](https://github.com/Emerald-Services/SupportBot) — the open-source Discord support/ticket bot by [Emerald Services](https://emeraldsrv.dev). It is **not** affiliated with or endorsed by Emerald Services. +SupportBot is an Open-Source discord bot built with [discord.js](https://github.com/discordjs/discord.js). It's primarily focused to help servers organise and manage their support system in a unique way with full customisation to match your brand. -What this fork adds is a **self-hosted dashboard**: a modern web UI and REST API that run in the **same Node process** as the bot. You configure tickets, messages, commands, AI settings, addons, and more from the browser instead of editing YAML by hand. The API starts immediately on launch, so the dashboard stays reachable even while the bot is connecting or restarting. +## Support -If you only need the original bot without the dashboard, use the [official SupportBot repository](https://github.com/Emerald-Services/SupportBot). + + Discord + -## Features - -### Self-hosted dashboard - -| Area | What you get | -|------|----------------| -| **Overview** | Live stats — servers, members, open/closed tickets, module setup status, RAM/CPU/uptime | -| **Visual config editors** | Edit `supportbot`, ticket panel, commands, messages, and AI config with form fields instead of raw YAML | -| **Discord pickers** | Choose channels, roles, and categories from dropdowns when configuring the bot (no copy-pasting IDs) | -| **Guild health** | Warnings if the bot is in the wrong server or extra guilds; quick link to fix `GuildId` or leave stray servers | -| **Logs** | Browse Output, Warn, and Error logs from the dashboard | -| **Transcripts** | View saved ticket HTML transcripts | -| **Notifications** | In-app alerts for bot restarts, update checks, and installs | -| **Settings** | Check for dashboard updates and apply them from the UI | -| **Users & roles** | Invite staff via Discord OAuth; assign owner, admin, editor, viewer, or custom per-page permissions | -| **Addons** | Browse and install addons from the [official Addons repo](https://github.com/Emerald-Services/Addons); edit addon configs in the sidebar like other config files | - -### Bot & API (unchanged upstream behaviour, plus improvements) - -- Full **SupportBot v26** ticket system, slash commands, AI assistant, and addon support -- **Discord OAuth** login for the dashboard (no shared API secret in the browser) -- **API key** (`SecretKey` in `api.yml`) still works for automation and scripts -- Config saves can **restart the Discord bot** while keeping the dashboard and API online -- Timeouts and caching so the UI does not hang when Discord or GitHub is slow - -## Requirements - -| Component | Version | -|-----------|---------| -| **Node.js** | 22.x (matches [SupportBot 8.x](https://github.com/Emerald-Services/SupportBot)) | -| **discord.js** | 14.x (installed via `package.json`) | -| **Discord bot** | Application with bot token and required intents | -| **Discord OAuth app** | For dashboard login (optional but recommended) | - -You need a machine or VPS that can run Node and reach Discord’s API (and GitHub, if you use in-dashboard updates or the addon marketplace). - -## Getting started - -### 1. Clone and install - -```bash -git clone https://github.com/C-h-a-r/SupportBot-Dashboard.git -cd SupportBot-Dashboard -npm install -``` - -### 2. Configure the bot - -Edit `Configs/supportbot.yml`: - -- Set `General.Token` to your bot token -- Set `General.GuildId` to your Discord server ID -- Enable addons if you use them: `General.Addons.Enabled: true` - -Other YAML files in `Configs/` can stay at defaults until you open the dashboard. - -### 3. Configure the API & dashboard - -Edit `Configs/api.yml`: - -```yaml -API: - Enabled: true - Port: 3000 - SecretKey: "generate-a-long-random-string" - OAuth: - Enabled: true - ClientId: "YOUR_DISCORD_APP_CLIENT_ID" - ClientSecret: "YOUR_DISCORD_APP_CLIENT_SECRET" - RedirectUri: "http://localhost:3000/api/auth/discord/callback" - OwnerUserIds: - - "YOUR_DISCORD_USER_ID" -``` - -**Discord Developer Portal** - -1. Create an application at [discord.com/developers/applications](https://discord.com/developers/applications) -2. Under **OAuth2 → Redirects**, add your callback URL(s). If users may sign in over **both** HTTP and HTTPS, register **both** (same host/path, different protocol), e.g. `http://bot.example.com/api/auth/discord/callback` and `https://bot.example.com/api/auth/discord/callback`. -3. Use the same app’s **Client ID** and **Client Secret** in `api.yml` -4. Put your Discord user ID in `OwnerUserIds` for full dashboard access - -Set `RedirectUri` to your usual URL (host and path). By default, `UseRequestOrigin` keeps the **same protocol** as the page you opened (http vs https). Behind a reverse proxy, set `TrustProxy: 1` so forwarded `X-Forwarded-Proto` is respected. - -### 4. Start the bot - -```bash -npm start -``` - -When startup succeeds you should see: - -- `[Dashboard] API listening on http://localhost:3000` -- Discord bot login and slash command registration - -Open **http://localhost:3000** in your browser and sign in with Discord. - -The web UI is shipped as static files in `public/dashboard/` (included in this repository). You do not need a separate frontend build step. - -> **Tip:** On first run, invite the bot to your server with the permissions SupportBot needs. Set `General.GuildId` to that server’s ID so channel/role pickers and guild health checks work. - -## Dashboard access - -| Method | Use case | -|--------|----------| -| **Discord OAuth** | Normal use — open the site, click **Continue with Discord**, sign in as an owner or invited user | -| **Bearer token** | Scripts and automation — `Authorization: Bearer ` on `/api/*` routes | - -Owners listed in `api.yml` (`OwnerUserIds`) always have full access. Additional users can be added under **Users** in the dashboard with granular permissions per config file and page. - -## Configuration - -| File | Purpose | -|------|---------| -| `Configs/supportbot.yml` | Bot token, guild, staff roles, ticket channels, embed colours, etc. | -| `Configs/ticket-panel.yml` | Ticket panel layout and buttons | -| `Configs/commands.yml` | Enable/disable slash commands | -| `Configs/messages.yml` | User-facing message strings | -| `Configs/supportbot-ai.yml` | AI assistant settings | -| `Configs/api.yml` | Dashboard port, session secret, OAuth | -| `Addons/Configs/*` | Per-addon config (after installing from **Addons** page) | - -Most of these are editable from the sidebar under **Tickets & support**, **Community**, **Server control**, and **Addons**. - -## Addons - -1. Open **Addons** in the dashboard (or install manually into `Addons/` as in the [upstream docs](https://github.com/Emerald-Services/Addons)) -2. Click **Install** on an addon from the marketplace — files are copied into `Addons/` and `Addons/Configs/`, then the bot restarts -3. Edit the addon’s config from the **Addons** section in the left sidebar (same editor as core configs) -4. Ensure `General.Addons.Enabled` is `true` in bot config - -Official addon list: [github.com/Emerald-Services/Addons](https://github.com/Emerald-Services/Addons) - -## Upstream & credits - -- **Original project:** [Emerald-Services/SupportBot](https://github.com/Emerald-Services/SupportBot) — MIT license, ticket bot for Discord -- **Official addons:** [Emerald-Services/Addons](https://github.com/Emerald-Services/Addons) -- **Community:** [Emerald Discord](https://emeraldsrv.dev/discord) · [Wiki](https://github.com/Emerald-Services/SupportBot/wiki) - -This fork is maintained independently. For bugs in **core ticket/command behaviour** that also exist upstream, consider reporting to the [official repo](https://github.com/Emerald-Services/SupportBot/issues). For **dashboard-specific** issues, use this repository’s issues. ## License -Released under the [MIT License](https://opensource.org/licenses/MIT), same as upstream SupportBot. +Released under the [MIT](https://opensource.org/licenses/MIT) license. + + +## Third-Party + +- [Verified Addons](https://emeraldsrv.dev) +- [BuiltByBit]([https://builtbybit.com/supportbot](https://builtbybit.com/resources/supportbot-advanced-ticket-bot.8940/)) +- [Voxel](https://polymart.org/resource/supportbot-1-discord-ticket-bot.518) + + +## Contributors + + + + + +## Hosting + +You can use our [Pterodactyl egg](https://github.com/Emerald-Services/Pterodactyl-Egg) to host it on your own panel. We currently don't offer hosting for you, altough we might add this in the future. +If you don't know how to install pterodactyl, you could always host it on replit: + +[![Run on Repl.it](https://repl.it/badge/github/ItsNyoty/IKI-bot)]([https://repl.it/github/ItsNyoty/iki](https://repl.it/github/Emerald-Services/SupportBot +) \ No newline at end of file diff --git a/Structures/DashboardGroupStore.js b/Structures/DashboardGroupStore.js new file mode 100644 index 0000000..069bd86 --- /dev/null +++ b/Structures/DashboardGroupStore.js @@ -0,0 +1,199 @@ +// SupportBot | Emerald Services +const fs = require("fs"); +const path = require("path"); +const { fullPermissions, normalizePermissions } = require("./DashboardPermissions.js"); + +const GROUPS_FILE = path.join(__dirname, "../Data/dashboard-groups.json"); + +const DEFAULT_GROUPS = [ + { + id: "owner", + name: "Owner", + description: "Full system owner access to all features and configs", + color: "#10B981", // Emerald Green + discordRoleId: null, + isSystem: true, + permissions: fullPermissions(), + }, + { + id: "admin", + name: "Admin", + description: "Full administrative access including user and group management", + color: "#3B82F6", // Blue + discordRoleId: null, + isSystem: true, + permissions: fullPermissions(), + }, + { + id: "support", + name: "Support Staff", + description: "Access to Overview, Live Tickets, and Transcripts", + color: "#8B5CF6", // Purple + discordRoleId: null, + isSystem: false, + permissions: { + overview: true, + tickets: true, + logs: false, + transcripts: true, + settings: { view: false, update: false }, + configs: { + supportbot: { view: false, edit: false }, + "ticket-panel": { view: false, edit: false }, + commands: { view: false, edit: false }, + messages: { view: false, edit: false }, + "supportbot-ai": { view: false, edit: false }, + api: { view: false, edit: false }, + }, + users: { view: false, manage: false }, + }, + }, + { + id: "viewer", + name: "Viewer", + description: "Read-only access to dashboard and logs", + color: "#6B7280", // Gray + discordRoleId: null, + isSystem: false, + permissions: { + overview: true, + tickets: true, + logs: true, + transcripts: true, + settings: { view: true, update: false }, + configs: { + supportbot: { view: true, edit: false }, + "ticket-panel": { view: true, edit: false }, + commands: { view: true, edit: false }, + messages: { view: true, edit: false }, + "supportbot-ai": { view: true, edit: false }, + api: { view: true, edit: false }, + }, + users: { view: false, manage: false }, + }, + }, +]; + +function ensureStorage() { + const dir = path.dirname(GROUPS_FILE); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + if (!fs.existsSync(GROUPS_FILE)) { + const initialData = { + version: 1, + groups: DEFAULT_GROUPS, + }; + fs.writeFileSync(GROUPS_FILE, JSON.stringify(initialData, null, 2), "utf8"); + } +} + +function loadStore() { + ensureStorage(); + try { + const raw = fs.readFileSync(GROUPS_FILE, "utf8"); + const parsed = JSON.parse(raw); + if (parsed && Array.isArray(parsed.groups)) { + return parsed.groups; + } + } catch (err) { + console.error("[GroupStore] Error loading groups file:", err.message); + } + return DEFAULT_GROUPS; +} + +function saveStore(groups) { + ensureStorage(); + const payload = { + version: 1, + groups, + updatedAt: Date.now(), + }; + fs.writeFileSync(GROUPS_FILE, JSON.stringify(payload, null, 2), "utf8"); +} + +function listGroups() { + return loadStore(); +} + +function getGroup(id) { + const groups = loadStore(); + return groups.find((g) => g.id === id) || null; +} + +function createGroup(payload = {}) { + const groups = loadStore(); + const name = (payload.name || "New Group").trim(); + const slug = name.toLowerCase().replace(/[^a-z0-9_-]+/g, "_"); + let newId = slug || `group_${Date.now()}`; + + let counter = 1; + while (groups.some((g) => g.id === newId)) { + newId = `${slug}_${counter++}`; + } + + const newGroup = { + id: newId, + name, + description: (payload.description || "").trim(), + color: payload.color || "#10B981", + discordRoleId: payload.discordRoleId ? String(payload.discordRoleId).trim() : null, + isSystem: false, + permissions: normalizePermissions(payload.permissions), + createdAt: Date.now(), + updatedAt: Date.now(), + }; + + groups.push(newGroup); + saveStore(groups); + return newGroup; +} + +function updateGroup(id, payload = {}) { + const groups = loadStore(); + const index = groups.findIndex((g) => g.id === id); + if (index === -1) { + throw new Error(`Group with ID "${id}" not found.`); + } + + const existing = groups[index]; + const updatedGroup = { + ...existing, + name: payload.name !== undefined ? payload.name.trim() : existing.name, + description: payload.description !== undefined ? payload.description.trim() : existing.description, + color: payload.color || existing.color, + discordRoleId: payload.discordRoleId !== undefined ? (payload.discordRoleId ? String(payload.discordRoleId).trim() : null) : existing.discordRoleId, + permissions: payload.permissions ? normalizePermissions(payload.permissions) : existing.permissions, + updatedAt: Date.now(), + }; + + groups[index] = updatedGroup; + saveStore(groups); + return updatedGroup; +} + +function deleteGroup(id) { + const groups = loadStore(); + const group = groups.find((g) => g.id === id); + if (!group) { + throw new Error(`Group with ID "${id}" not found.`); + } + + if (group.isSystem) { + throw new Error(`System group "${group.name}" cannot be deleted.`); + } + + const filtered = groups.filter((g) => g.id !== id); + saveStore(filtered); + return true; +} + +module.exports = { + listGroups, + getGroup, + createGroup, + updateGroup, + deleteGroup, + DEFAULT_GROUPS, +}; diff --git a/Structures/DashboardPermissions.js b/Structures/DashboardPermissions.js index f7f0396..bd3bdcd 100644 --- a/Structures/DashboardPermissions.js +++ b/Structures/DashboardPermissions.js @@ -20,6 +20,7 @@ function configMap(view, edit) { function fullPermissions() { return { overview: true, + tickets: true, logs: true, transcripts: true, settings: { view: true, update: true }, @@ -36,6 +37,7 @@ function permissionsFromRole(role, customPermissions) { case "moderator": return { overview: true, + tickets: true, logs: true, transcripts: true, settings: { view: true, update: false }, @@ -45,6 +47,7 @@ function permissionsFromRole(role, customPermissions) { case "editor": return { overview: true, + tickets: true, logs: true, transcripts: false, settings: { view: true, update: false }, @@ -54,6 +57,7 @@ function permissionsFromRole(role, customPermissions) { case "viewer": return { overview: true, + tickets: true, logs: true, transcripts: true, settings: { view: true, update: false }, @@ -73,6 +77,7 @@ function normalizePermissions(input) { return { overview: input.overview ?? base.overview, + tickets: input.tickets ?? input.overview ?? base.tickets, logs: input.logs ?? base.logs, transcripts: input.transcripts ?? base.transcripts, settings: { @@ -97,6 +102,7 @@ function hasPermission(permissions, check) { if (!permissions) return false; if (check === "overview") return Boolean(permissions.overview); + if (check === "tickets") return Boolean(permissions.tickets ?? permissions.overview); if (check === "logs") return Boolean(permissions.logs); if (check === "transcripts") return Boolean(permissions.transcripts); if (check === "settings.view") return Boolean(permissions.settings?.view); diff --git a/Structures/DashboardUserStore.js b/Structures/DashboardUserStore.js index 58613d6..dba2f35 100644 --- a/Structures/DashboardUserStore.js +++ b/Structures/DashboardUserStore.js @@ -89,19 +89,23 @@ function syncDiscordProfile(userId, profile) { writeStore(store); } +const { getGroup } = require("./DashboardGroupStore.js"); + function resolvePermissions(entry, oauth, userId) { if (isYamlOwner(userId, oauth)) { - return { permissions: fullPermissions(), role: "owner", isOwner: true }; + return { permissions: fullPermissions(), role: "owner", isOwner: true, groupId: "owner" }; } if (!entry?.enabled) return null; - const role = entry.role || "viewer"; - const permissions = - role === "custom" - ? permissionsFromRole("custom", entry.permissions) - : permissionsFromRole(role); + const groupId = entry.groupId || entry.role || "support"; + const group = getGroup(groupId); - return { permissions, role, isOwner: false }; + if (entry.role === "custom" && entry.permissions) { + return { permissions: normalizePermissions(entry.permissions), role: "custom", isOwner: false, groupId }; + } + + const permissions = group ? group.permissions : permissionsFromRole(entry.role || "viewer"); + return { permissions, role: entry.role || groupId, isOwner: false, groupId }; } function getAccess(userId, oauth) { @@ -175,7 +179,8 @@ function listUsers(oauth) { avatar: entry.avatar ? discordAvatarUrl({ id: entry.id, avatar: entry.avatar }) : discordAvatarUrl({ id: entry.id, avatar: null }), - role: yamlOwners.has(String(entry.id)) ? "owner" : entry.role, + role: yamlOwners.has(String(entry.id)) ? "owner" : entry.role || entry.groupId || "support", + groupId: entry.groupId || entry.role || "support", permissions: entry.role === "custom" ? normalizePermissions(entry.permissions) @@ -195,11 +200,8 @@ function addUser(payload, actorId, oauth) { throw new Error("Invalid Discord user ID"); } - const role = payload.role || "viewer"; - if (!ROLES.includes(role)) throw new Error("Invalid role"); - if (role === "owner" && !isYamlOwner(actorId, oauth)) { - throw new Error("Only api.yml owners can assign the owner role"); - } + const role = payload.role || payload.groupId || "support"; + const groupId = payload.groupId || payload.role || "support"; const store = readStore(); if (store.users[id]) throw new Error("User already exists"); @@ -210,6 +212,7 @@ function addUser(payload, actorId, oauth) { globalName: payload.globalName || null, avatar: null, role, + groupId, permissions: role === "custom" ? normalizePermissions(payload.permissions) : null, enabled: payload.enabled !== false, @@ -231,15 +234,14 @@ function updateUser(id, payload, actorId, oauth) { throw new Error("Cannot disable an owner defined in api.yml"); } + if (payload.groupId) { + entry.groupId = payload.groupId; + if (!payload.role) entry.role = payload.groupId; + } + if (payload.role) { - if (!ROLES.includes(payload.role)) throw new Error("Invalid role"); - if (payload.role === "owner" && !isYamlOwner(actorId, oauth)) { - throw new Error("Only api.yml owners can assign the owner role"); - } - if (isYamlOwner(id, oauth) && payload.role !== "owner") { - throw new Error("Cannot change role of an api.yml owner"); - } entry.role = payload.role; + if (!payload.groupId) entry.groupId = payload.role; } if (payload.enabled !== undefined) entry.enabled = Boolean(payload.enabled); diff --git a/Structures/Database.js b/Structures/Database.js index 3ec4803..532bd35 100644 --- a/Structures/Database.js +++ b/Structures/Database.js @@ -194,6 +194,18 @@ module.exports = { ticketName: ticket.name || null, ticketNumber: ticket.number || null, }); + + if (global.apiServer) { + global.apiServer.broadcast("ticket_created", { + ticket_id: ticket.id, + user_id: ticket.user, + subject: ticket.reason || "", + description: ticket.description || "", + department: ticket.department || "general", + priority: ticket.priority || "medium", + created_at: now + }); + } }, updateTicketQuestionAnswers(ticketId, questionAnswers = []) { @@ -236,6 +248,10 @@ module.exports = { updatedAt: Date.now(), ticketId, }); + + if (global.apiServer && status === "closed") { + global.apiServer.broadcast("ticket_closed", { ticket_id: ticketId }); + } }, updateTicketDepartment(ticketId, department) { diff --git a/Structures/TicketManager.js b/Structures/TicketManager.js index 991631f..e860cf0 100644 --- a/Structures/TicketManager.js +++ b/Structures/TicketManager.js @@ -1,4 +1,4 @@ -const fs = require("fs"); +const fs = require("fs"); const path = require("path"); const Discord = require("discord.js"); const yaml = require("js-yaml"); @@ -135,7 +135,14 @@ function renderEmbeds(embeds = []) { .join(""); } -async function createTranscript(interaction, ticket, reason) { +async function createTranscript(interaction, ticketInput, reasonInput) { + let ticketRecord = typeof ticketInput === "object" && ticketInput !== null ? ticketInput : null; + let closeReason = typeof ticketInput === "string" ? ticketInput : reasonInput; + + if (!ticketRecord && typeof db.getTicket === "function") { + ticketRecord = db.getTicket(interaction.channel.id) || {}; + } + const { getChannel } = interaction.client; const transcriptChannel = await getChannel( @@ -188,12 +195,27 @@ async function createTranscript(interaction, ticket, reason) { db.updateTicketStatus(interaction.channel.id, "closed"); } - const ticketUserId = ticket.user_id || ticket.user; + let ticketUserId = ticketRecord?.user_id || ticketRecord?.user || ticketRecord?.author_id; + + if (!ticketUserId && interaction.channel.permissionOverwrites) { + const memberOverwrite = interaction.channel.permissionOverwrites.cache.find( + (pow) => pow.type === 1 && pow.id !== interaction.client.user.id + ); + if (memberOverwrite) { + ticketUserId = memberOverwrite.id; + } + } + + if (!ticketUserId && allMessages.length > 0) { + const firstNonBotMsg = allMessages.find((m) => !m.author.bot); + if (firstNonBotMsg) { + ticketUserId = firstNonBotMsg.author.id; + } + } + const tUser = - interaction.client.users.cache.get(ticketUserId) || - (ticketUserId - ? await interaction.client.users.fetch(ticketUserId).catch(() => null) - : null); + (ticketUserId ? interaction.client.users.cache.get(ticketUserId) : null) || + (ticketUserId ? await interaction.client.users.fetch(ticketUserId).catch(() => null) : null); const transcriptEmbed = new Discord.EmbedBuilder() .setTitle(msgconfig.TicketLog.Title) @@ -204,16 +226,37 @@ async function createTranscript(interaction, ticket, reason) { }) .setDescription( `> **Ticket:** ${interaction.channel.name} (\`${interaction.channel.id}\`)\n` + - `> **User:** ${tUser?.tag || "Unknown User"} (\`${tUser?.id || ticketUserId || "Unknown"}\`)\n` + + `> **User:** ${tUser ? `<@${tUser.id}> (\`${tUser.tag}\`)` : "Unknown User"}\n` + `> **Closed by:** <@${interaction.user.id}>\n` + `> **Message Count:** ${transcriptData.length}`, ) .addFields({ name: "Reason", - value: `\`\`\`${reason || "No Reason Provided."}\`\`\``, + value: `\`\`\`${closeReason || "No Reason Provided."}\`\`\``, inline: false, }); + try { + const configStore = require("./ConfigStore"); + const transcriptStore = require("./TranscriptStore"); + const apiConfig = configStore.api?.API; + const tSettings = transcriptStore.getSettings(); + + if (apiConfig?.Enabled !== false) { + const port = apiConfig?.Port || 3000; + const isPublic = Boolean(tSettings?.publicAccess?.enabled); + const transcriptUrl = `http://localhost:${port}/transcripts/${interaction.channel.id}`; + + transcriptEmbed.addFields({ + name: isPublic ? "Public Web Transcript" : "Dashboard Transcript", + value: `[${isPublic ? "Click here to view public transcript" : "Click here to view in Dashboard"}](${transcriptUrl})`, + inline: false, + }); + } + } catch (err) { + console.warn("[TicketManager] Could not add web transcript URL:", err.message); + } + const transcriptDir = path.join(process.cwd(), "./Data/Transcripts"); if (!fs.existsSync(transcriptDir)) { fs.mkdirSync(transcriptDir, { recursive: true }); @@ -228,7 +271,7 @@ async function createTranscript(interaction, ticket, reason) { name: interaction.channel.name, messages: transcriptData, }, - reason, + closeReason, ); fs.writeFileSync(htmlPath, html, "utf8"); diff --git a/Structures/TranscriptTemplate.js b/Structures/TranscriptTemplate.js index 543181e..739f4b1 100644 --- a/Structures/TranscriptTemplate.js +++ b/Structures/TranscriptTemplate.js @@ -23,9 +23,14 @@ function parseMarkdown(content = "") { safe = safe.replace(/```([\s\S]*?)```/g, "
$1
"); safe = safe.replace(/`(.*?)`/g, "$1"); + safe = safe.replace(/\|\|(.*?)\|\|/g, '$1'); safe = safe.replace(/\*\*(.*?)\*\*/g, "$1"); safe = safe.replace(/\*(.*?)\*/g, "$1"); safe = safe.replace(/_(.*?)_/g, "$1"); + safe = safe.replace(/~~(.*?)~~/g, "$1"); + safe = safe.replace(/__(.*?)__/g, "$1"); + safe = safe.replace(/<@!?(\d+)>/g, '@User'); + safe = safe.replace(/<@&(\d+)>/g, '@Role'); safe = safe.replace( /\[(.*?)\]\((.*?)\)/g, '$1', @@ -112,10 +117,11 @@ function renderAttachment(att) { function renderEmbeds(embeds = []) { return embeds .map((embed) => { + const color = embed.color || "#5865F2"; const fields = (embed.fields || []) .map( (field) => ` -
+
${escapeHtml(field.name || "Field")}
${parseMarkdown(field.value || "")}
@@ -123,11 +129,37 @@ function renderEmbeds(embeds = []) { ) .join(""); + const author = embed.author ? ` +
+ ${embed.author.iconURL ? `` : ''} + ${escapeHtml(embed.author.name || '')} +
+ ` : ''; + + const thumbnail = embed.thumbnail?.url ? ` + + ` : ''; + + const image = embed.image?.url ? ` +
+ ` : ''; + + const footer = (embed.footer || embed.timestamp) ? ` + + ` : ''; + return ` -
- ${embed.title ? `
${escapeHtml(embed.title)}
` : ""} +
+ ${author} + ${thumbnail} + ${embed.title ? `
${parseMarkdown(embed.title)}
` : ""} ${embed.description ? `
${parseMarkdown(embed.description)}
` : ""} - ${fields} + ${fields ? `
${fields}
` : ""} + ${image} + ${footer}
`; }) @@ -451,13 +483,22 @@ function buildStyles(template) { .discord-embed-title { font-weight: 800; margin-bottom: 6px; } .discord-embed-description { color: var(--text); line-height: 1.5; } + .embed-author { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 0.9em; margin-bottom: 6px; } + .embed-author-icon { width: 18px; height: 18px; border-radius: 50%; } + .embed-fields-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(255,255,255,0.06); } + .embed-thumbnail { position: absolute; top: 12px; right: 12px; width: 44px; height: 44px; border-radius: 6px; object-fit: cover; } + .embed-image img { width: 100%; max-height: 300px; object-fit: cover; border-radius: 8px; margin-top: 10px; } + .embed-footer { display: flex; align-items: center; gap: 6px; font-size: 0.8em; color: var(--muted); margin-top: 8px; padding-top: 6px; border-top: 1px solid rgba(255,255,255,0.04); } + .embed-footer-icon { width: 14px; height: 14px; border-radius: 50%; } + .mention { background: rgba(88, 101, 242, 0.2); color: #5865F2; padding: 2px 6px; border-radius: 4px; font-weight: 600; font-size: 0.9em; } + .spoiler { background: #202225; color: transparent; border-radius: 4px; padding: 0 4px; cursor: pointer; } + .spoiler:hover { color: inherit; background: rgba(255,255,255,0.1); } + .embed-field { - margin-top: 10px; - padding-top: 10px; - border-top: 1px solid rgba(255,255,255,0.06); + margin-top: 6px; } - .embed-field-name { font-weight: 700; margin-bottom: 4px; } + .embed-field-name { font-weight: 700; margin-bottom: 4px; font-size: 0.85em; text-transform: uppercase; color: var(--muted); } .embed-field-value { color: var(--text); line-height: 1.5; } .attachment { diff --git a/index.js b/index.js index c541821..c03fb79 100644 --- a/index.js +++ b/index.js @@ -59,7 +59,16 @@ logTypes.forEach((type) => { function logToFile(type, data) { const date = new Date().toISOString().split("T")[0]; const file = path.join(`./Logs/${type}`, `${type}-${date}.log`); - fs.appendFileSync(file, `[${new Date().toISOString()}] ${data}\n`); + const timestamp = new Date().toISOString(); + fs.appendFileSync(file, `[${timestamp}] ${data}\n`); + + if (global.apiServer) { + global.apiServer.broadcast("log", { + type, + timestamp, + message: String(data) + }); + } } const origLog = console.log; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7b7d3fc..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2489 +0,0 @@ -{ - "name": "supportbot", - "version": "26.3.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "supportbot", - "version": "26.3.0", - "license": "MIT", - "dependencies": { - "@vitalets/google-translate-api": "^9.2.1", - "adm-zip": "^0.6.0", - "axios": "^1.7.2", - "better-sqlite3": "^12.2.0", - "cookie-parser": "^1.4.7", - "cors": "^2.8.6", - "discord.js": "^14.13.0", - "express": "^5.2.1", - "figlet": "^1.9.3", - "google-translate-api": "^2.3.0", - "gradient-string": "^3.0.0", - "js": "^0.1.0", - "js-yaml": "^4.1.0", - "moment": "^2.29.3", - "ms": "^2.1.3", - "openai": "^4.50.0", - "systeminformation": "^5.31.5", - "yaml": "^2.8.3" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.14.1.tgz", - "integrity": "sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/formatters": "^0.6.2", - "@discordjs/util": "^1.2.0", - "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.38.40", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.4", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.2.tgz", - "integrity": "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "^0.38.33" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.1.tgz", - "integrity": "sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.1", - "@discordjs/util": "^1.2.0", - "@sapphire/async-queue": "^1.5.3", - "@sapphire/snowflake": "^3.5.5", - "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.38.40", - "magic-bytes.js": "^1.13.0", - "tslib": "^2.6.3", - "undici": "6.24.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/rest/node_modules/@sapphire/snowflake": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.5.tgz", - "integrity": "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@discordjs/util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz", - "integrity": "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "^0.38.33" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", - "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.5.1", - "@discordjs/util": "^1.1.0", - "@sapphire/async-queue": "^1.5.2", - "@types/ws": "^8.5.10", - "@vladfrangu/async_event_emitter": "^2.2.4", - "discord-api-types": "^0.38.1", - "tslib": "^2.6.2", - "ws": "^8.17.0" - }, - "engines": { - "node": ">=16.11.0" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", - "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", - "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", - "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v16" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", - "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@types/http-errors": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", - "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.8.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", - "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", - "license": "MIT", - "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.4" - } - }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitalets/google-translate-api": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.1.tgz", - "integrity": "sha512-zlwQWSjXUZhbZQ6qwtIQ7GdYXFQmJ4wYqzcrYJUxtvzQQwUP+uKUb/SRJaBOQuBntjBjzcdcJoLFrpCKUbIkOg==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "^1.8.2", - "http-errors": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", - "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/adm-zip": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", - "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", - "license": "MIT", - "engines": { - "node": ">=14.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", - "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/better-sqlite3": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz", - "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - }, - "engines": { - "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/capture-stack-trace": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", - "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha512-BOCxwwxF5WPspp1OBq9j0JLyL5JgJOTssz9PdOHr8VWjFijaC3PpjU48vFEX3uxx8sTusnVQckLbNzBq6fmkGw==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^3.0.0", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-parser": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", - "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", - "license": "MIT", - "dependencies": { - "cookie": "0.7.2", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-parser/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", - "license": "MIT", - "dependencies": { - "capture-stack-trace": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/discord-api-types": { - "version": "0.38.47", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.47.tgz", - "integrity": "sha512-XgXQodHQBAE6kfD7kMvVo30863iHX1LHSqNq6MGUTDwIFCCvHva13+rwxyxVXDqudyApMNAd32PGjgVETi5rjA==", - "license": "MIT", - "workspaces": [ - "scripts/actions/documentation" - ] - }, - "node_modules/discord.js": { - "version": "14.26.4", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.26.4.tgz", - "integrity": "sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/builders": "^1.14.1", - "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.2", - "@discordjs/rest": "^2.6.1", - "@discordjs/util": "^1.2.0", - "@discordjs/ws": "^1.2.3", - "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.38.40", - "fast-deep-equal": "3.1.3", - "lodash.snakecase": "4.1.1", - "magic-bytes.js": "^1.13.0", - "tslib": "^2.6.3", - "undici": "6.24.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/discordjs/discord.js?sponsor" - } - }, - "node_modules/dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha512-k4ELWeEU3uCcwub7+dWydqQBRjAjkV9L33HjVRG5Xo2QybI6ja/v+4W73SRi8ubCqJz0l9XsTP1NbewfyqaSlw==", - "license": "MIT", - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "license": "BSD-3-Clause" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/figlet": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.11.0.tgz", - "integrity": "sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ==", - "license": "MIT", - "dependencies": { - "commander": "^14.0.0" - }, - "bin": { - "figlet": "bin/index.js" - }, - "engines": { - "node": ">= 17.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, - "node_modules/google-translate-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/google-translate-api/-/google-translate-api-2.3.0.tgz", - "integrity": "sha512-a7MRJpSAoS9HyQPE7Yqp5jYSRePWju53+Je/AkgU//zbSmZhy2tc+MvxlwbOegpptT7Ep6GCt7Q1/j7WmTntZw==", - "license": "MIT", - "dependencies": { - "configstore": "^2.0.0", - "google-translate-token": "latest", - "got": "^6.3.0", - "safe-eval": "^0.3.0" - } - }, - "node_modules/google-translate-token": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/google-translate-token/-/google-translate-token-1.0.0.tgz", - "integrity": "sha512-X+cONF24KI3PP94ih3L8QlqNgVxZxsfOyJtX93UISO7TRdTSrFpp4rmDpyS/x6xRxJOLcd6ApCTAkB+tNFtc3g==", - "license": "MIT", - "dependencies": { - "configstore": "^2.0.0", - "got": "^6.3.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", - "license": "MIT", - "dependencies": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/gradient-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-3.0.0.tgz", - "integrity": "sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==", - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "tinygradient": "^1.1.5" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/js/-/js-0.1.0.tgz", - "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==", - "dependencies": { - "commander": "~1.1.1" - }, - "bin": { - "js": "bin/js" - } - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js/node_modules/commander": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", - "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", - "dependencies": { - "keypress": "0.1.x" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/keypress": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", - "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "license": "MIT" - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.13.0.tgz", - "integrity": "sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "3.92.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", - "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openai": { - "version": "4.104.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", - "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.130", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", - "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-eval": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/safe-eval/-/safe-eval-0.3.0.tgz", - "integrity": "sha512-uPIAjU2zpyv2QJCZ1zaWZKnPv/5jgkaitE7WHomV4Mxu6kgHY1ruIQ1oTikEta/Sux3E8pZAozzJRsAUu3iDZA==", - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", - "license": "ISC", - "engines": { - "node": "*" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/systeminformation": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.6.tgz", - "integrity": "sha512-Uv2b2uGGM6ns+26czgW2cYRabYdnswM0ddSOOlryHOaelzsmDSet1iM/NT7VOYxW8x/BW+HkY+b1Ve2pLTSGSA==", - "license": "MIT", - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "license": "MIT" - }, - "node_modules/tinygradient": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", - "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", - "license": "MIT", - "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/ts-mixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-is": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", - "license": "MIT", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/undici": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", - "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "license": "MIT", - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha512-NF1pPn594TaRSUO/HARoB4jK8I+rWgcpVlpQCK6/6o5PHyLUt2CSiDrpUZbQ6rROck+W2EwF8mBJcTs+W98J9w==", - "license": "MIT", - "dependencies": { - "os-homedir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yaml": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - } - } -} diff --git a/package.json b/package.json index 198b65b..9df8d29 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "supportbot", - "version": "26.2", + "version": "26.2-pre-2", "description": "SupportBot is an open-sourced support system for discord. It's completely free to use with high amounts of customization to match your own brand.", "main": "index.js", "scripts": { @@ -17,7 +17,7 @@ "bugs": { "url": "https://github.com/Emerald-Services/SupportBot/issues" }, - "homepage": "https://community.emeraldsrv.dev", + "homepage": "https://emeraldsrv.dev", "dependencies": { "@vitalets/google-translate-api": "^9.2.1", "adm-zip": "^0.6.0", diff --git a/public/dashboard/assets/index-BOdhXLlb.js b/public/dashboard/assets/index-BOdhXLlb.js deleted file mode 100644 index 0ea77a4..0000000 --- a/public/dashboard/assets/index-BOdhXLlb.js +++ /dev/null @@ -1,206 +0,0 @@ -var i3=Object.defineProperty;var l3=(e,n,a)=>n in e?i3(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var Mx=(e,n,a)=>l3(e,typeof n!="symbol"?n+"":n,a);function c3(e,n){for(var a=0;ao[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const c of i)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(i){const c={};return i.integrity&&(c.integrity=i.integrity),i.referrerPolicy&&(c.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?c.credentials="include":i.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(i){if(i.ep)return;i.ep=!0;const c=a(i);fetch(i.href,c)}})();function w0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Fm={exports:{}},Li={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var _x;function u3(){if(_x)return Li;_x=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,i,c){var d=null;if(c!==void 0&&(d=""+c),i.key!==void 0&&(d=""+i.key),"key"in i){c={};for(var m in i)m!=="key"&&(c[m]=i[m])}else c=i;return i=c.ref,{$$typeof:e,type:o,key:d,ref:i!==void 0?i:null,props:c}}return Li.Fragment=n,Li.jsx=a,Li.jsxs=a,Li}var Ox;function d3(){return Ox||(Ox=1,Fm.exports=u3()),Fm.exports}var l=d3(),Ym={exports:{}},Me={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Dx;function f3(){if(Dx)return Me;Dx=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function S(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,N={};function E(M,_,U){this.props=M,this.context=_,this.refs=N,this.updater=U||j}E.prototype.isReactComponent={},E.prototype.setState=function(M,_){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,_,"setState")},E.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function k(){}k.prototype=E.prototype;function T(M,_,U){this.props=M,this.context=_,this.refs=N,this.updater=U||j}var R=T.prototype=new k;R.constructor=T,C(R,E.prototype),R.isPureReactComponent=!0;var D=Array.isArray;function P(){}var z={H:null,A:null,T:null,S:null},B=Object.prototype.hasOwnProperty;function H(M,_,U){var V=U.ref;return{$$typeof:e,type:M,key:_,ref:V!==void 0?V:null,props:U}}function Y(M,_){return H(M.type,_,M.props)}function Q(M){return typeof M=="object"&&M!==null&&M.$$typeof===e}function fe(M){var _={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(U){return _[U]})}var de=/\/+/g;function he(M,_){return typeof M=="object"&&M!==null&&M.key!=null?fe(""+M.key):_.toString(36)}function se(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(P,P):(M.status="pending",M.then(function(_){M.status==="pending"&&(M.status="fulfilled",M.value=_)},function(_){M.status==="pending"&&(M.status="rejected",M.reason=_)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function O(M,_,U,V,F){var ae=typeof M;(ae==="undefined"||ae==="boolean")&&(M=null);var ne=!1;if(M===null)ne=!0;else switch(ae){case"bigint":case"string":case"number":ne=!0;break;case"object":switch(M.$$typeof){case e:case n:ne=!0;break;case y:return ne=M._init,O(ne(M._payload),_,U,V,F)}}if(ne)return F=F(M),ne=V===""?"."+he(M,0):V,D(F)?(U="",ne!=null&&(U=ne.replace(de,"$&/")+"/"),O(F,_,U,"",function(W){return W})):F!=null&&(Q(F)&&(F=Y(F,U+(F.key==null||M&&M.key===F.key?"":(""+F.key).replace(de,"$&/")+"/")+ne)),_.push(F)),1;ne=0;var me=V===""?".":V+":";if(D(M))for(var pe=0;pe>>1,te=O[J];if(0>>1;Ji(U,Z))Vi(F,U)?(O[J]=F,O[V]=Z,J=V):(O[J]=U,O[_]=Z,J=_);else if(Vi(F,Z))O[J]=F,O[V]=Z,J=V;else break e}}return $}function i(O,$){var Z=O.sortIndex-$.sortIndex;return Z!==0?Z:O.id-$.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;e.unstable_now=function(){return c.now()}}else{var d=Date,m=d.now();e.unstable_now=function(){return d.now()-m}}var p=[],h=[],y=1,v=null,x=3,S=!1,j=!1,C=!1,N=!1,E=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function R(O){for(var $=a(h);$!==null;){if($.callback===null)o(h);else if($.startTime<=O)o(h),$.sortIndex=$.expirationTime,n(p,$);else break;$=a(h)}}function D(O){if(C=!1,R(O),!j)if(a(p)!==null)j=!0,P||(P=!0,fe());else{var $=a(h);$!==null&&se(D,$.startTime-O)}}var P=!1,z=-1,B=5,H=-1;function Y(){return N?!0:!(e.unstable_now()-HO&&Y());){var J=v.callback;if(typeof J=="function"){v.callback=null,x=v.priorityLevel;var te=J(v.expirationTime<=O);if(O=e.unstable_now(),typeof te=="function"){v.callback=te,R(O),$=!0;break t}v===a(p)&&o(p),R(O)}else o(p);v=a(p)}if(v!==null)$=!0;else{var M=a(h);M!==null&&se(D,M.startTime-O),$=!1}}break e}finally{v=null,x=Z,S=!1}$=void 0}}finally{$?fe():P=!1}}}var fe;if(typeof T=="function")fe=function(){T(Q)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,he=de.port2;de.port1.onmessage=Q,fe=function(){he.postMessage(null)}}else fe=function(){E(Q,0)};function se(O,$){z=E(function(){O(e.unstable_now())},$)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125J?(O.sortIndex=Z,n(h,O),a(p)===null&&O===a(h)&&(C?(k(z),z=-1):C=!0,se(D,Z-J))):(O.sortIndex=te,n(p,O),j||S||(j=!0,P||(P=!0,fe()))),O},e.unstable_shouldYield=Y,e.unstable_wrapCallback=function(O){var $=x;return function(){var Z=x;x=$;try{return O.apply(this,arguments)}finally{x=Z}}}})(Km)),Km}var Px;function p3(){return Px||(Px=1,qm.exports=m3()),qm.exports}var Xm={exports:{}},Ft={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and 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;function h3(){if(Ix)return Ft;Ix=1;var e=Lu();function n(p){var h="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Xm.exports=h3(),Xm.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bx;function g3(){if(Bx)return zi;Bx=1;var e=p3(),n=Lu(),a=C0();function o(t){var r="https://react.dev/errors/"+t;if(1te||(t.current=J[te],J[te]=null,te--)}function U(t,r){te++,J[te]=t.current,t.current=r}var V=M(null),F=M(null),ae=M(null),ne=M(null);function me(t,r){switch(U(ae,r),U(F,t),U(V,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?ex(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=ex(r),t=tx(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}_(V),U(V,t)}function pe(){_(V),_(F),_(ae)}function W(t){t.memoizedState!==null&&U(ne,t);var r=V.current,s=tx(r,t.type);r!==s&&(U(F,t),U(V,s))}function ie(t){F.current===t&&(_(V),_(F)),ne.current===t&&(_(ne),Mi._currentValue=Z)}var ge,je;function Ae(t){if(ge===void 0)try{throw Error()}catch(s){var r=s.stack.trim().match(/\n( *(at )?)/);ge=r&&r[1]||"",je=-1)":-1g||L[u]!==K[g]){var re=` -`+L[u].replace(" at new "," at ");return t.displayName&&re.includes("")&&(re=re.replace("",t.displayName)),re}while(1<=u&&0<=g);break}}}finally{tt=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?Ae(s):""}function kt(t,r){switch(t.tag){case 26:case 27:case 5:return Ae(t.type);case 16:return Ae("Lazy");case 13:return t.child!==r&&r!==null?Ae("Suspense Fallback"):Ae("Suspense");case 19:return Ae("SuspenseList");case 0:case 15:return ct(t.type,!1);case 11:return ct(t.type.render,!1);case 1:return ct(t.type,!0);case 31:return Ae("Activity");default:return""}}function Ra(t){try{var r="",s=null;do r+=kt(t,s),s=t,t=t.return;while(t);return r}catch(u){return` -Error generating stack: `+u.message+` -`+u.stack}}var Tt=Object.prototype.hasOwnProperty,Hs=e.unstable_scheduleCallback,Vs=e.unstable_cancelCallback,Wt=e.unstable_shouldYield,Vr=e.unstable_requestPaint,qt=e.unstable_now,_d=e.unstable_getCurrentPriorityLevel,Aa=e.unstable_ImmediatePriority,Tl=e.unstable_UserBlockingPriority,Ma=e.unstable_NormalPriority,Gs=e.unstable_LowPriority,mr=e.unstable_IdlePriority,Rl=e.log,Gr=e.unstable_setDisableYieldValue,_a=null,Kt=null;function Un(t){if(typeof Rl=="function"&&Gr(t),Kt&&typeof Kt.setStrictMode=="function")try{Kt.setStrictMode(_a,t)}catch{}}var Vt=Math.clz32?Math.clz32:Qn,Od=Math.log,Fs=Math.LN2;function Qn(t){return t>>>=0,t===0?32:31-(Od(t)/Fs|0)|0}var yo=256,xo=262144,Oa=4194304;function Jn(t){var r=t&42;if(r!==0)return r;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Re(t,r,s){var u=t.pendingLanes;if(u===0)return 0;var g=0,b=t.suspendedLanes,w=t.pingedLanes;t=t.warmLanes;var A=u&134217727;return A!==0?(u=A&~b,u!==0?g=Jn(u):(w&=A,w!==0?g=Jn(w):s||(s=A&~t,s!==0&&(g=Jn(s))))):(A=u&~b,A!==0?g=Jn(A):w!==0?g=Jn(w):s||(s=u&~t,s!==0&&(g=Jn(s)))),g===0?0:r!==0&&r!==g&&(r&b)===0&&(b=g&-g,s=r&-r,b>=s||b===32&&(s&4194048)!==0)?r:g}function ut(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function Rt(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Gt(){var t=Oa;return Oa<<=1,(Oa&62914560)===0&&(Oa=4194304),t}function Fr(t){for(var r=[],s=0;31>s;s++)r.push(t);return r}function mt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Jt(t,r,s,u,g,b){var w=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var A=t.entanglements,L=t.expirationTimes,K=t.hiddenUpdates;for(s=w&~s;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var tE=/[\n"\\]/g;function Tn(t){return t.replace(tE,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function Id(t,r,s,u,g,b,w,A){t.name="",w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"?t.type=w:t.removeAttribute("type"),r!=null?w==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+kn(r)):t.value!==""+kn(r)&&(t.value=""+kn(r)):w!=="submit"&&w!=="reset"||t.removeAttribute("value"),r!=null?$d(t,w,kn(r)):s!=null?$d(t,w,kn(s)):u!=null&&t.removeAttribute("value"),g==null&&b!=null&&(t.defaultChecked=!!b),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?t.name=""+kn(A):t.removeAttribute("name")}function qg(t,r,s,u,g,b,w,A){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(t.type=b),r!=null||s!=null){if(!(b!=="submit"&&b!=="reset"||r!=null)){Pd(t);return}s=s!=null?""+kn(s):"",r=r!=null?""+kn(r):s,A||r===t.value||(t.value=r),t.defaultValue=r}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=A?t.checked:!!u,t.defaultChecked=!!u,w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"&&(t.name=w),Pd(t)}function $d(t,r,s){r==="number"&&_l(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function ko(t,r,s,u){if(t=t.options,r){r={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Gd=!1;if(gr)try{var Ks={};Object.defineProperty(Ks,"passive",{get:function(){Gd=!0}}),window.addEventListener("test",Ks,Ks),window.removeEventListener("test",Ks,Ks)}catch{Gd=!1}var Wr=null,Fd=null,Dl=null;function tv(){if(Dl)return Dl;var t,r=Fd,s=r.length,u,g="value"in Wr?Wr.value:Wr.textContent,b=g.length;for(t=0;t=Qs),iv=" ",lv=!1;function cv(t,r){switch(t){case"keyup":return RE.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function uv(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Mo=!1;function ME(t,r){switch(t){case"compositionend":return uv(r);case"keypress":return r.which!==32?null:(lv=!0,iv);case"textInput":return t=r.data,t===iv&&lv?null:t;default:return null}}function _E(t,r){if(Mo)return t==="compositionend"||!Xd&&cv(t,r)?(t=tv(),Dl=Fd=Wr=null,Mo=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:s,offset:r-t};t=u}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=bv(s)}}function xv(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?xv(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function Sv(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=_l(t.document);r instanceof t.HTMLIFrameElement;){try{var s=typeof r.contentWindow.location.href=="string"}catch{s=!1}if(s)t=r.contentWindow;else break;r=_l(t.document)}return r}function Jd(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var BE=gr&&"documentMode"in document&&11>=document.documentMode,_o=null,ef=null,ni=null,tf=!1;function wv(t,r,s){var u=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;tf||_o==null||_o!==_l(u)||(u=_o,"selectionStart"in u&&Jd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),ni&&ti(ni,u)||(ni=u,u=kc(ef,"onSelect"),0>=w,g-=w,er=1<<32-Vt(r)+g|s<Oe?(Be=Ce,Ce=null):Be=Ce.sibling;var Ke=X(G,Ce,q[Oe],oe);if(Ke===null){Ce===null&&(Ce=Be);break}t&&Ce&&Ke.alternate===null&&r(G,Ce),I=b(Ke,I,Oe),qe===null?Ee=Ke:qe.sibling=Ke,qe=Ke,Ce=Be}if(Oe===q.length)return s(G,Ce),He&&br(G,Oe),Ee;if(Ce===null){for(;OeOe?(Be=Ce,Ce=null):Be=Ce.sibling;var ha=X(G,Ce,Ke.value,oe);if(ha===null){Ce===null&&(Ce=Be);break}t&&Ce&&ha.alternate===null&&r(G,Ce),I=b(ha,I,Oe),qe===null?Ee=ha:qe.sibling=ha,qe=ha,Ce=Be}if(Ke.done)return s(G,Ce),He&&br(G,Oe),Ee;if(Ce===null){for(;!Ke.done;Oe++,Ke=q.next())Ke=le(G,Ke.value,oe),Ke!==null&&(I=b(Ke,I,Oe),qe===null?Ee=Ke:qe.sibling=Ke,qe=Ke);return He&&br(G,Oe),Ee}for(Ce=u(Ce);!Ke.done;Oe++,Ke=q.next())Ke=ee(Ce,G,Oe,Ke.value,oe),Ke!==null&&(t&&Ke.alternate!==null&&Ce.delete(Ke.key===null?Oe:Ke.key),I=b(Ke,I,Oe),qe===null?Ee=Ke:qe.sibling=Ke,qe=Ke);return t&&Ce.forEach(function(s3){return r(G,s3)}),He&&br(G,Oe),Ee}function at(G,I,q,oe){if(typeof q=="object"&&q!==null&&q.type===C&&q.key===null&&(q=q.props.children),typeof q=="object"&&q!==null){switch(q.$$typeof){case S:e:{for(var Ee=q.key;I!==null;){if(I.key===Ee){if(Ee=q.type,Ee===C){if(I.tag===7){s(G,I.sibling),oe=g(I,q.props.children),oe.return=G,G=oe;break e}}else if(I.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===B&&Fa(Ee)===I.type){s(G,I.sibling),oe=g(I,q.props),li(oe,q),oe.return=G,G=oe;break e}s(G,I);break}else r(G,I);I=I.sibling}q.type===C?(oe=Ba(q.props.children,G.mode,oe,q.key),oe.return=G,G=oe):(oe=Gl(q.type,q.key,q.props,null,G.mode,oe),li(oe,q),oe.return=G,G=oe)}return w(G);case j:e:{for(Ee=q.key;I!==null;){if(I.key===Ee)if(I.tag===4&&I.stateNode.containerInfo===q.containerInfo&&I.stateNode.implementation===q.implementation){s(G,I.sibling),oe=g(I,q.children||[]),oe.return=G,G=oe;break e}else{s(G,I);break}else r(G,I);I=I.sibling}oe=cf(q,G.mode,oe),oe.return=G,G=oe}return w(G);case B:return q=Fa(q),at(G,I,q,oe)}if(se(q))return we(G,I,q,oe);if(fe(q)){if(Ee=fe(q),typeof Ee!="function")throw Error(o(150));return q=Ee.call(q),ke(G,I,q,oe)}if(typeof q.then=="function")return at(G,I,Zl(q),oe);if(q.$$typeof===T)return at(G,I,Wl(G,q),oe);Ql(G,q)}return typeof q=="string"&&q!==""||typeof q=="number"||typeof q=="bigint"?(q=""+q,I!==null&&I.tag===6?(s(G,I.sibling),oe=g(I,q),oe.return=G,G=oe):(s(G,I),oe=lf(q,G.mode,oe),oe.return=G,G=oe),w(G)):s(G,I)}return function(G,I,q,oe){try{ii=0;var Ee=at(G,I,q,oe);return Vo=null,Ee}catch(Ce){if(Ce===Ho||Ce===Kl)throw Ce;var qe=pn(29,Ce,null,G.mode);return qe.lanes=oe,qe.return=G,qe}finally{}}}var Wa=Fv(!0),Yv=Fv(!1),Qr=!1;function Sf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function wf(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Jr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function ea(t,r,s){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(Xe&2)!==0){var g=u.pending;return g===null?r.next=r:(r.next=g.next,g.next=r),u.pending=r,r=Vl(t),Rv(t,null,s),r}return Hl(t,u,r,s),Vl(t)}function ci(t,r,s){if(r=r.updateQueue,r!==null&&(r=r.shared,(s&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,en(t,s)}}function Cf(t,r){var s=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,s===u)){var g=null,b=null;if(s=s.firstBaseUpdate,s!==null){do{var w={lane:s.lane,tag:s.tag,payload:s.payload,callback:null,next:null};b===null?g=b=w:b=b.next=w,s=s.next}while(s!==null);b===null?g=b=r:b=b.next=r}else g=b=r;s={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:b,shared:u.shared,callbacks:u.callbacks},t.updateQueue=s;return}t=s.lastBaseUpdate,t===null?s.firstBaseUpdate=r:t.next=r,s.lastBaseUpdate=r}var jf=!1;function ui(){if(jf){var t=Uo;if(t!==null)throw t}}function di(t,r,s,u){jf=!1;var g=t.updateQueue;Qr=!1;var b=g.firstBaseUpdate,w=g.lastBaseUpdate,A=g.shared.pending;if(A!==null){g.shared.pending=null;var L=A,K=L.next;L.next=null,w===null?b=K:w.next=K,w=L;var re=t.alternate;re!==null&&(re=re.updateQueue,A=re.lastBaseUpdate,A!==w&&(A===null?re.firstBaseUpdate=K:A.next=K,re.lastBaseUpdate=L))}if(b!==null){var le=g.baseState;w=0,re=K=L=null,A=b;do{var X=A.lane&-536870913,ee=X!==A.lane;if(ee?($e&X)===X:(u&X)===X){X!==0&&X===Bo&&(jf=!0),re!==null&&(re=re.next={lane:0,tag:A.tag,payload:A.payload,callback:null,next:null});e:{var we=t,ke=A;X=r;var at=s;switch(ke.tag){case 1:if(we=ke.payload,typeof we=="function"){le=we.call(at,le,X);break e}le=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=ke.payload,X=typeof we=="function"?we.call(at,le,X):we,X==null)break e;le=v({},le,X);break e;case 2:Qr=!0}}X=A.callback,X!==null&&(t.flags|=64,ee&&(t.flags|=8192),ee=g.callbacks,ee===null?g.callbacks=[X]:ee.push(X))}else ee={lane:X,tag:A.tag,payload:A.payload,callback:A.callback,next:null},re===null?(K=re=ee,L=le):re=re.next=ee,w|=X;if(A=A.next,A===null){if(A=g.shared.pending,A===null)break;ee=A,A=ee.next,ee.next=null,g.lastBaseUpdate=ee,g.shared.pending=null}}while(!0);re===null&&(L=le),g.baseState=L,g.firstBaseUpdate=K,g.lastBaseUpdate=re,b===null&&(g.shared.lanes=0),oa|=w,t.lanes=w,t.memoizedState=le}}function Wv(t,r){if(typeof t!="function")throw Error(o(191,t));t.call(r)}function qv(t,r){var s=t.callbacks;if(s!==null)for(t.callbacks=null,t=0;tb?b:8;var w=O.T,A={};O.T=A,Vf(t,!1,r,s);try{var L=g(),K=O.S;if(K!==null&&K(A,L),L!==null&&typeof L=="object"&&typeof L.then=="function"){var re=KE(L,u);pi(t,r,re,yn(t))}else pi(t,r,u,yn(t))}catch(le){pi(t,r,{then:function(){},status:"rejected",reason:le},yn())}finally{$.p=b,w!==null&&A.types!==null&&(w.types=A.types),O.T=w}}function tN(){}function Uf(t,r,s,u){if(t.tag!==5)throw Error(o(476));var g=Nb(t).queue;Eb(t,g,r,Z,s===null?tN:function(){return kb(t),s(u)})}function Nb(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:Z,baseState:Z,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:Z},next:null};var s={};return r.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:s},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function kb(t){var r=Nb(t);r.next===null&&(r=t.alternate.memoizedState),pi(t,r.next.queue,{},yn())}function Hf(){return It(Mi)}function Tb(){return yt().memoizedState}function Rb(){return yt().memoizedState}function nN(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var s=yn();t=Jr(s);var u=ea(r,t,s);u!==null&&(cn(u,r,s),ci(u,r,s)),r={cache:vf()},t.payload=r;return}r=r.return}}function rN(t,r,s){var u=yn();s={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},lc(t)?Mb(r,s):(s=of(t,r,s,u),s!==null&&(cn(s,t,u),_b(s,r,u)))}function Ab(t,r,s){var u=yn();pi(t,r,s,u)}function pi(t,r,s,u){var g={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null};if(lc(t))Mb(r,g);else{var b=t.alternate;if(t.lanes===0&&(b===null||b.lanes===0)&&(b=r.lastRenderedReducer,b!==null))try{var w=r.lastRenderedState,A=b(w,s);if(g.hasEagerState=!0,g.eagerState=A,mn(A,w))return Hl(t,r,g,0),ot===null&&Ul(),!1}catch{}finally{}if(s=of(t,r,g,u),s!==null)return cn(s,t,u),_b(s,r,u),!0}return!1}function Vf(t,r,s,u){if(u={lane:2,revertLane:Sm(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},lc(t)){if(r)throw Error(o(479))}else r=of(t,s,u,2),r!==null&&cn(r,t,2)}function lc(t){var r=t.alternate;return t===_e||r!==null&&r===_e}function Mb(t,r){Fo=tc=!0;var s=t.pending;s===null?r.next=r:(r.next=s.next,s.next=r),t.pending=r}function _b(t,r,s){if((s&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,en(t,s)}}var hi={readContext:It,use:ac,useCallback:gt,useContext:gt,useEffect:gt,useImperativeHandle:gt,useLayoutEffect:gt,useInsertionEffect:gt,useMemo:gt,useReducer:gt,useRef:gt,useState:gt,useDebugValue:gt,useDeferredValue:gt,useTransition:gt,useSyncExternalStore:gt,useId:gt,useHostTransitionStatus:gt,useFormState:gt,useActionState:gt,useOptimistic:gt,useMemoCache:gt,useCacheRefresh:gt};hi.useEffectEvent=gt;var Ob={readContext:It,use:ac,useCallback:function(t,r){return Xt().memoizedState=[t,r===void 0?null:r],t},useContext:It,useEffect:gb,useImperativeHandle:function(t,r,s){s=s!=null?s.concat([t]):null,sc(4194308,4,xb.bind(null,r,t),s)},useLayoutEffect:function(t,r){return sc(4194308,4,t,r)},useInsertionEffect:function(t,r){sc(4,2,t,r)},useMemo:function(t,r){var s=Xt();r=r===void 0?null:r;var u=t();if(qa){Un(!0);try{t()}finally{Un(!1)}}return s.memoizedState=[u,r],u},useReducer:function(t,r,s){var u=Xt();if(s!==void 0){var g=s(r);if(qa){Un(!0);try{s(r)}finally{Un(!1)}}}else g=r;return u.memoizedState=u.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},u.queue=t,t=t.dispatch=rN.bind(null,_e,t),[u.memoizedState,t]},useRef:function(t){var r=Xt();return t={current:t},r.memoizedState=t},useState:function(t){t=zf(t);var r=t.queue,s=Ab.bind(null,_e,r);return r.dispatch=s,[t.memoizedState,s]},useDebugValue:$f,useDeferredValue:function(t,r){var s=Xt();return Bf(s,t,r)},useTransition:function(){var t=zf(!1);return t=Eb.bind(null,_e,t.queue,!0,!1),Xt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,s){var u=_e,g=Xt();if(He){if(s===void 0)throw Error(o(407));s=s()}else{if(s=r(),ot===null)throw Error(o(349));($e&127)!==0||eb(u,r,s)}g.memoizedState=s;var b={value:s,getSnapshot:r};return g.queue=b,gb(nb.bind(null,u,b,t),[t]),u.flags|=2048,Wo(9,{destroy:void 0},tb.bind(null,u,b,s,r),null),s},useId:function(){var t=Xt(),r=ot.identifierPrefix;if(He){var s=tr,u=er;s=(u&~(1<<32-Vt(u)-1)).toString(32)+s,r="_"+r+"R_"+s,s=nc++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof u.is=="string"?w.createElement("select",{is:u.is}):w.createElement("select"),u.multiple?b.multiple=!0:u.size&&(b.size=u.size);break;default:b=typeof u.is=="string"?w.createElement(g,{is:u.is}):w.createElement(g)}}b[zt]=r,b[nn]=u;e:for(w=r.child;w!==null;){if(w.tag===5||w.tag===6)b.appendChild(w.stateNode);else if(w.tag!==4&&w.tag!==27&&w.child!==null){w.child.return=w,w=w.child;continue}if(w===r)break e;for(;w.sibling===null;){if(w.return===null||w.return===r)break e;w=w.return}w.sibling.return=w.return,w=w.sibling}r.stateNode=b;e:switch(Bt(b,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&jr(r)}}return lt(r),rm(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,s),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&jr(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(t=ae.current,Io(r)){if(t=r.stateNode,s=r.memoizedProps,u=null,g=Pt,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}t[zt]=r,t=!!(t.nodeValue===s||u!==null&&u.suppressHydrationWarning===!0||Qy(t.nodeValue,s)),t||Xr(r,!0)}else t=Tc(t).createTextNode(u),t[zt]=r,r.stateNode=t}return lt(r),null;case 31:if(s=r.memoizedState,t===null||t.memoizedState!==null){if(u=Io(r),s!==null){if(t===null){if(!u)throw Error(o(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(o(557));t[zt]=r}else Ua(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;lt(r),t=!1}else s=mf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=s),t=!0;if(!t)return r.flags&256?(gn(r),r):(gn(r),null);if((r.flags&128)!==0)throw Error(o(558))}return lt(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=Io(r),u!==null&&u.dehydrated!==null){if(t===null){if(!g)throw Error(o(318));if(g=r.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(o(317));g[zt]=r}else Ua(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;lt(r),g=!1}else g=mf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return r.flags&256?(gn(r),r):(gn(r),null)}return gn(r),(r.flags&128)!==0?(r.lanes=s,r):(s=u!==null,t=t!==null&&t.memoizedState!==null,s&&(u=r.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),b=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(b=u.memoizedState.cachePool.pool),b!==g&&(u.flags|=2048)),s!==t&&s&&(r.child.flags|=8192),mc(r,r.updateQueue),lt(r),null);case 4:return pe(),t===null&&Em(r.stateNode.containerInfo),lt(r),null;case 10:return xr(r.type),lt(r),null;case 19:if(_(bt),u=r.memoizedState,u===null)return lt(r),null;if(g=(r.flags&128)!==0,b=u.rendering,b===null)if(g)vi(u,!1);else{if(vt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(b=ec(t),b!==null){for(r.flags|=128,vi(u,!1),t=b.updateQueue,r.updateQueue=t,mc(r,t),r.subtreeFlags=0,t=s,s=r.child;s!==null;)Av(s,t),s=s.sibling;return U(bt,bt.current&1|2),He&&br(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&qt()>bc&&(r.flags|=128,g=!0,vi(u,!1),r.lanes=4194304)}else{if(!g)if(t=ec(b),t!==null){if(r.flags|=128,g=!0,t=t.updateQueue,r.updateQueue=t,mc(r,t),vi(u,!0),u.tail===null&&u.tailMode==="hidden"&&!b.alternate&&!He)return lt(r),null}else 2*qt()-u.renderingStartTime>bc&&s!==536870912&&(r.flags|=128,g=!0,vi(u,!1),r.lanes=4194304);u.isBackwards?(b.sibling=r.child,r.child=b):(t=u.last,t!==null?t.sibling=b:r.child=b,u.last=b)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=qt(),t.sibling=null,s=bt.current,U(bt,g?s&1|2:s&1),He&&br(r,u.treeForkCount),t):(lt(r),null);case 22:case 23:return gn(r),Nf(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(s&536870912)!==0&&(r.flags&128)===0&&(lt(r),r.subtreeFlags&6&&(r.flags|=8192)):lt(r),s=r.updateQueue,s!==null&&mc(r,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==s&&(r.flags|=2048),t!==null&&_(Ga),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),r.memoizedState.cache!==s&&(r.flags|=2048),xr(xt),lt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function lN(t,r){switch(df(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return xr(xt),pe(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return ie(r),null;case 31:if(r.memoizedState!==null){if(gn(r),r.alternate===null)throw Error(o(340));Ua()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(gn(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(o(340));Ua()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return _(bt),null;case 4:return pe(),null;case 10:return xr(r.type),null;case 22:case 23:return gn(r),Nf(),t!==null&&_(Ga),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return xr(xt),null;case 25:return null;default:return null}}function ry(t,r){switch(df(r),r.tag){case 3:xr(xt),pe();break;case 26:case 27:case 5:ie(r);break;case 4:pe();break;case 31:r.memoizedState!==null&&gn(r);break;case 13:gn(r);break;case 19:_(bt);break;case 10:xr(r.type);break;case 22:case 23:gn(r),Nf(),t!==null&&_(Ga);break;case 24:xr(xt)}}function bi(t,r){try{var s=r.updateQueue,u=s!==null?s.lastEffect:null;if(u!==null){var g=u.next;s=g;do{if((s.tag&t)===t){u=void 0;var b=s.create,w=s.inst;u=b(),w.destroy=u}s=s.next}while(s!==g)}}catch(A){et(r,r.return,A)}}function ra(t,r,s){try{var u=r.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var b=g.next;u=b;do{if((u.tag&t)===t){var w=u.inst,A=w.destroy;if(A!==void 0){w.destroy=void 0,g=r;var L=s,K=A;try{K()}catch(re){et(g,L,re)}}}u=u.next}while(u!==b)}}catch(re){et(r,r.return,re)}}function ay(t){var r=t.updateQueue;if(r!==null){var s=t.stateNode;try{qv(r,s)}catch(u){et(t,t.return,u)}}}function oy(t,r,s){s.props=Ka(t.type,t.memoizedProps),s.state=t.memoizedState;try{s.componentWillUnmount()}catch(u){et(t,r,u)}}function yi(t,r){try{var s=t.ref;if(s!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof s=="function"?t.refCleanup=s(u):s.current=u}}catch(g){et(t,r,g)}}function nr(t,r){var s=t.ref,u=t.refCleanup;if(s!==null)if(typeof u=="function")try{u()}catch(g){et(t,r,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof s=="function")try{s(null)}catch(g){et(t,r,g)}else s.current=null}function sy(t){var r=t.type,s=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":s.autoFocus&&u.focus();break e;case"img":s.src?u.src=s.src:s.srcSet&&(u.srcset=s.srcSet)}}catch(g){et(t,t.return,g)}}function am(t,r,s){try{var u=t.stateNode;AN(u,t.type,s,r),u[nn]=r}catch(g){et(t,t.return,g)}}function iy(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&ua(t.type)||t.tag===4}function om(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||iy(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&ua(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function sm(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s).insertBefore(t,r):(r=s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,r.appendChild(t),s=s._reactRootContainer,s!=null||r.onclick!==null||(r.onclick=hr));else if(u!==4&&(u===27&&ua(t.type)&&(s=t.stateNode,r=null),t=t.child,t!==null))for(sm(t,r,s),t=t.sibling;t!==null;)sm(t,r,s),t=t.sibling}function pc(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?s.insertBefore(t,r):s.appendChild(t);else if(u!==4&&(u===27&&ua(t.type)&&(s=t.stateNode),t=t.child,t!==null))for(pc(t,r,s),t=t.sibling;t!==null;)pc(t,r,s),t=t.sibling}function ly(t){var r=t.stateNode,s=t.memoizedProps;try{for(var u=t.type,g=r.attributes;g.length;)r.removeAttributeNode(g[0]);Bt(r,u,s),r[zt]=t,r[nn]=s}catch(b){et(t,t.return,b)}}var Er=!1,Ct=!1,im=!1,cy=typeof WeakSet=="function"?WeakSet:Set,Mt=null;function cN(t,r){if(t=t.containerInfo,Tm=Lc,t=Sv(t),Jd(t)){if("selectionStart"in t)var s={start:t.selectionStart,end:t.selectionEnd};else e:{s=(s=t.ownerDocument)&&s.defaultView||window;var u=s.getSelection&&s.getSelection();if(u&&u.rangeCount!==0){s=u.anchorNode;var g=u.anchorOffset,b=u.focusNode;u=u.focusOffset;try{s.nodeType,b.nodeType}catch{s=null;break e}var w=0,A=-1,L=-1,K=0,re=0,le=t,X=null;t:for(;;){for(var ee;le!==s||g!==0&&le.nodeType!==3||(A=w+g),le!==b||u!==0&&le.nodeType!==3||(L=w+u),le.nodeType===3&&(w+=le.nodeValue.length),(ee=le.firstChild)!==null;)X=le,le=ee;for(;;){if(le===t)break t;if(X===s&&++K===g&&(A=w),X===b&&++re===u&&(L=w),(ee=le.nextSibling)!==null)break;le=X,X=le.parentNode}le=ee}s=A===-1||L===-1?null:{start:A,end:L}}else s=null}s=s||{start:0,end:0}}else s=null;for(Rm={focusedElem:t,selectionRange:s},Lc=!1,Mt=r;Mt!==null;)if(r=Mt,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Mt=t;else for(;Mt!==null;){switch(r=Mt,b=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(s=0;s title"))),Bt(b,u,s),b[zt]=t,At(b),u=b;break e;case"link":var w=hx("link","href",g).get(u+(s.href||""));if(w){for(var A=0;Aat&&(w=at,at=ke,ke=w);var G=yv(A,ke),I=yv(A,at);if(G&&I&&(ee.rangeCount!==1||ee.anchorNode!==G.node||ee.anchorOffset!==G.offset||ee.focusNode!==I.node||ee.focusOffset!==I.offset)){var q=le.createRange();q.setStart(G.node,G.offset),ee.removeAllRanges(),ke>at?(ee.addRange(q),ee.extend(I.node,I.offset)):(q.setEnd(I.node,I.offset),ee.addRange(q))}}}}for(le=[],ee=A;ee=ee.parentNode;)ee.nodeType===1&&le.push({element:ee,left:ee.scrollLeft,top:ee.scrollTop});for(typeof A.focus=="function"&&A.focus(),A=0;As?32:s,O.T=null,s=pm,pm=null;var b=ia,w=Ar;if(Et=0,Qo=ia=null,Ar=0,(Xe&6)!==0)throw Error(o(331));var A=Xe;if(Xe|=4,xy(b.current),vy(b,b.current,w,s),Xe=A,Ei(0,!1),Kt&&typeof Kt.onPostCommitFiberRoot=="function")try{Kt.onPostCommitFiberRoot(_a,b)}catch{}return!0}finally{$.p=g,O.T=u,Iy(t,r)}}function By(t,r,s){r=An(s,r),r=Wf(t.stateNode,r,2),t=ea(t,r,2),t!==null&&(mt(t,2),rr(t))}function et(t,r,s){if(t.tag===3)By(t,t,s);else for(;r!==null;){if(r.tag===3){By(r,t,s);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(sa===null||!sa.has(u))){t=An(s,t),s=Ub(2),u=ea(r,s,2),u!==null&&(Hb(s,u,r,t),mt(u,2),rr(u));break}}r=r.return}}function bm(t,r,s){var u=t.pingCache;if(u===null){u=t.pingCache=new fN;var g=new Set;u.set(r,g)}else g=u.get(r),g===void 0&&(g=new Set,u.set(r,g));g.has(s)||(um=!0,g.add(s),t=vN.bind(null,t,r,s),r.then(t,t))}function vN(t,r,s){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,ot===t&&($e&s)===s&&(vt===4||vt===3&&($e&62914560)===$e&&300>qt()-vc?(Xe&2)===0&&Jo(t,0):dm|=s,Zo===$e&&(Zo=0)),rr(t)}function Uy(t,r){r===0&&(r=Gt()),t=$a(t,r),t!==null&&(mt(t,r),rr(t))}function bN(t){var r=t.memoizedState,s=0;r!==null&&(s=r.retryLane),Uy(t,s)}function yN(t,r){var s=0;switch(t.tag){case 31:case 13:var u=t.stateNode,g=t.memoizedState;g!==null&&(s=g.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),Uy(t,s)}function xN(t,r){return Hs(t,r)}var jc=null,ts=null,ym=!1,Ec=!1,xm=!1,ca=0;function rr(t){t!==ts&&t.next===null&&(ts===null?jc=ts=t:ts=ts.next=t),Ec=!0,ym||(ym=!0,wN())}function Ei(t,r){if(!xm&&Ec){xm=!0;do for(var s=!1,u=jc;u!==null;){if(t!==0){var g=u.pendingLanes;if(g===0)var b=0;else{var w=u.suspendedLanes,A=u.pingedLanes;b=(1<<31-Vt(42|t)+1)-1,b&=g&~(w&~A),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(s=!0,Fy(u,b))}else b=$e,b=Re(u,u===ot?b:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(b&3)===0||ut(u,b)||(s=!0,Fy(u,b));u=u.next}while(s);xm=!1}}function SN(){Hy()}function Hy(){Ec=ym=!1;var t=0;ca!==0&&_N()&&(t=ca);for(var r=qt(),s=null,u=jc;u!==null;){var g=u.next,b=Vy(u,r);b===0?(u.next=null,s===null?jc=g:s.next=g,g===null&&(ts=s)):(s=u,(t!==0||(b&3)!==0)&&(Ec=!0)),u=g}Et!==0&&Et!==5||Ei(t),ca!==0&&(ca=0)}function Vy(t,r){for(var s=t.suspendedLanes,u=t.pingedLanes,g=t.expirationTimes,b=t.pendingLanes&-62914561;0A)break;var re=L.transferSize,le=L.initiatorType;re&&Jy(le)&&(L=L.responseEnd,w+=re*(L"u"?null:document;function dx(t,r,s){var u=ns;if(u&&typeof r=="string"&&r){var g=Tn(r);g='link[rel="'+t+'"][href="'+g+'"]',typeof s=="string"&&(g+='[crossorigin="'+s+'"]'),ux.has(g)||(ux.add(g),t={rel:t,crossOrigin:s,href:r},u.querySelector(g)===null&&(r=u.createElement("link"),Bt(r,"link",t),At(r),u.head.appendChild(r)))}}function UN(t){Mr.D(t),dx("dns-prefetch",t,null)}function HN(t,r){Mr.C(t,r),dx("preconnect",t,r)}function VN(t,r,s){Mr.L(t,r,s);var u=ns;if(u&&t&&r){var g='link[rel="preload"][as="'+Tn(r)+'"]';r==="image"&&s&&s.imageSrcSet?(g+='[imagesrcset="'+Tn(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(g+='[imagesizes="'+Tn(s.imageSizes)+'"]')):g+='[href="'+Tn(t)+'"]';var b=g;switch(r){case"style":b=rs(t);break;case"script":b=as(t)}zn.has(b)||(t=v({rel:"preload",href:r==="image"&&s&&s.imageSrcSet?void 0:t,as:r},s),zn.set(b,t),u.querySelector(g)!==null||r==="style"&&u.querySelector(Ri(b))||r==="script"&&u.querySelector(Ai(b))||(r=u.createElement("link"),Bt(r,"link",t),At(r),u.head.appendChild(r)))}}function GN(t,r){Mr.m(t,r);var s=ns;if(s&&t){var u=r&&typeof r.as=="string"?r.as:"script",g='link[rel="modulepreload"][as="'+Tn(u)+'"][href="'+Tn(t)+'"]',b=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=as(t)}if(!zn.has(b)&&(t=v({rel:"modulepreload",href:t},r),zn.set(b,t),s.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(Ai(b)))return}u=s.createElement("link"),Bt(u,"link",t),At(u),s.head.appendChild(u)}}}function FN(t,r,s){Mr.S(t,r,s);var u=ns;if(u&&t){var g=Eo(u).hoistableStyles,b=rs(t);r=r||"default";var w=g.get(b);if(!w){var A={loading:0,preload:null};if(w=u.querySelector(Ri(b)))A.loading=5;else{t=v({rel:"stylesheet",href:t,"data-precedence":r},s),(s=zn.get(b))&&zm(t,s);var L=w=u.createElement("link");At(L),Bt(L,"link",t),L._p=new Promise(function(K,re){L.onload=K,L.onerror=re}),L.addEventListener("load",function(){A.loading|=1}),L.addEventListener("error",function(){A.loading|=2}),A.loading|=4,Ac(w,r,u)}w={type:"stylesheet",instance:w,count:1,state:A},g.set(b,w)}}}function YN(t,r){Mr.X(t,r);var s=ns;if(s&&t){var u=Eo(s).hoistableScripts,g=as(t),b=u.get(g);b||(b=s.querySelector(Ai(g)),b||(t=v({src:t,async:!0},r),(r=zn.get(g))&&Pm(t,r),b=s.createElement("script"),At(b),Bt(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function WN(t,r){Mr.M(t,r);var s=ns;if(s&&t){var u=Eo(s).hoistableScripts,g=as(t),b=u.get(g);b||(b=s.querySelector(Ai(g)),b||(t=v({src:t,async:!0,type:"module"},r),(r=zn.get(g))&&Pm(t,r),b=s.createElement("script"),At(b),Bt(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function fx(t,r,s,u){var g=(g=ae.current)?Rc(g):null;if(!g)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(r=rs(s.href),s=Eo(g).hoistableStyles,u=s.get(r),u||(u={type:"style",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=rs(s.href);var b=Eo(g).hoistableStyles,w=b.get(t);if(w||(g=g.ownerDocument||g,w={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(t,w),(b=g.querySelector(Ri(t)))&&!b._p&&(w.instance=b,w.state.loading=5),zn.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},zn.set(t,s),b||qN(g,t,s,w.state))),r&&u===null)throw Error(o(528,""));return w}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=s.async,s=s.src,typeof s=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=as(s),s=Eo(g).hoistableScripts,u=s.get(r),u||(u={type:"script",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function rs(t){return'href="'+Tn(t)+'"'}function Ri(t){return'link[rel="stylesheet"]['+t+"]"}function mx(t){return v({},t,{"data-precedence":t.precedence,precedence:null})}function qN(t,r,s,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),Bt(r,"link",s),At(r),t.head.appendChild(r))}function as(t){return'[src="'+Tn(t)+'"]'}function Ai(t){return"script[async]"+t}function px(t,r,s){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+Tn(s.href)+'"]');if(u)return r.instance=u,At(u),u;var g=v({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),At(u),Bt(u,"style",g),Ac(u,s.precedence,t),r.instance=u;case"stylesheet":g=rs(s.href);var b=t.querySelector(Ri(g));if(b)return r.state.loading|=4,r.instance=b,At(b),b;u=mx(s),(g=zn.get(g))&&zm(u,g),b=(t.ownerDocument||t).createElement("link"),At(b);var w=b;return w._p=new Promise(function(A,L){w.onload=A,w.onerror=L}),Bt(b,"link",u),r.state.loading|=4,Ac(b,s.precedence,t),r.instance=b;case"script":return b=as(s.src),(g=t.querySelector(Ai(b)))?(r.instance=g,At(g),g):(u=s,(g=zn.get(b))&&(u=v({},s),Pm(u,g)),t=t.ownerDocument||t,g=t.createElement("script"),At(g),Bt(g,"link",u),t.head.appendChild(g),r.instance=g);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,Ac(u,s.precedence,t));return r.instance}function Ac(t,r,s){for(var u=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,b=g,w=0;w title"):null)}function KN(t,r,s){if(s===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function vx(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function XN(t,r,s,u){if(s.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(s.state.loading&4)===0){if(s.instance===null){var g=rs(u.href),b=r.querySelector(Ri(g));if(b){r=b._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=_c.bind(t),r.then(t,t)),s.state.loading|=4,s.instance=b,At(b);return}b=r.ownerDocument||r,u=mx(u),(g=zn.get(g))&&zm(u,g),b=b.createElement("link"),At(b);var w=b;w._p=new Promise(function(A,L){w.onload=A,w.onerror=L}),Bt(b,"link",u),s.instance=b}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(s,r),(r=s.state.preload)&&(s.state.loading&3)===0&&(t.count++,s=_c.bind(t),r.addEventListener("load",s),r.addEventListener("error",s))}}var Im=0;function ZN(t,r){return t.stylesheets&&t.count===0&&Dc(t,t.stylesheets),0Im?50:800)+r);return t.unsuspend=s,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function _c(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Dc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Oc=null;function Dc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Oc=new Map,r.forEach(QN,t),Oc=null,_c.call(t))}function QN(t,r){if(!(r.state.loading&4)){var s=Oc.get(t);if(s)var u=s.get(null);else{s=new Map,Oc.set(t,s);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Wm.exports=g3(),Wm.exports}var b3=v3();/** - * react-router v7.15.1 - * - * 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 - */var Hx="popstate";function Vx(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function y3(e={}){function n(o,i){var h;let c=(h=i.state)==null?void 0:h.masked,{pathname:d,search:m,hash:p}=c||o.location;return Op("",{pathname:d,search:m,hash:p},i.state&&i.state.usr||null,i.state&&i.state.key||"default",c?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,i){return typeof i=="string"?i:Xi(i)}return S3(n,a,null,e)}function ft(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function $n(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function x3(){return Math.random().toString(36).substring(2,10)}function Gx(e,n){return{usr:e.state,key:e.key,idx:n,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Op(e,n,a=null,o,i){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof n=="string"?Rs(n):n,state:a,key:n&&n.key||o||x3(),mask:i}}function Xi({pathname:e="/",search:n="",hash:a=""}){return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function Rs(e){let n={};if(e){let a=e.indexOf("#");a>=0&&(n.hash=e.substring(a),e=e.substring(0,a));let o=e.indexOf("?");o>=0&&(n.search=e.substring(o),e=e.substring(0,o)),e&&(n.pathname=e)}return n}function S3(e,n,a,o={}){let{window:i=document.defaultView,v5Compat:c=!1}=o,d=i.history,m="POP",p=null,h=y();h==null&&(h=0,d.replaceState({...d.state,idx:h},""));function y(){return(d.state||{idx:null}).idx}function v(){m="POP";let N=y(),E=N==null?null:N-h;h=N,p&&p({action:m,location:C.location,delta:E})}function x(N,E){m="PUSH";let k=Vx(N)?N:Op(C.location,N,E);h=y()+1;let T=Gx(k,h),R=C.createHref(k.mask||k);try{d.pushState(T,"",R)}catch(D){if(D instanceof DOMException&&D.name==="DataCloneError")throw D;i.location.assign(R)}c&&p&&p({action:m,location:C.location,delta:1})}function S(N,E){m="REPLACE";let k=Vx(N)?N:Op(C.location,N,E);h=y();let T=Gx(k,h),R=C.createHref(k.mask||k);d.replaceState(T,"",R),c&&p&&p({action:m,location:C.location,delta:0})}function j(N){return w3(N)}let C={get action(){return m},get location(){return e(i,d)},listen(N){if(p)throw new Error("A history only accepts one active listener");return i.addEventListener(Hx,v),p=N,()=>{i.removeEventListener(Hx,v),p=null}},createHref(N){return n(i,N)},createURL:j,encodeLocation(N){let E=j(N);return{pathname:E.pathname,search:E.search,hash:E.hash}},push:x,replace:S,go(N){return d.go(N)}};return C}function w3(e,n=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),ft(a,"No window.location.(origin|href) available to create URL");let o=typeof e=="string"?e:Xi(e);return o=o.replace(/ $/,"%20"),!n&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function j0(e,n,a="/"){return C3(e,n,a,!1)}function C3(e,n,a,o,i){let c=typeof n=="string"?Rs(n):n,d=zr(c.pathname||"/",a);if(d==null)return null;let m=j3(e),p=null,h=z3(d);for(let y=0;p==null&&y{let y={relativePath:h===void 0?d.path||"":h,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(y.relativePath.startsWith("/")){if(!y.relativePath.startsWith(o)&&p)return;ft(y.relativePath.startsWith(o),`Absolute route path "${y.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),y.relativePath=y.relativePath.slice(o.length)}let v=Wn([o,y.relativePath]),x=a.concat(y);d.children&&d.children.length>0&&(ft(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),E0(d.children,n,x,v,p)),!(d.path==null&&!d.index)&&n.push({path:v,score:_3(v,d.index),routesMeta:x})};return e.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))c(d,m);else for(let h of N0(d.path))c(d,m,!0,h)}),n}function N0(e){let n=e.split("/");if(n.length===0)return[];let[a,...o]=n,i=a.endsWith("?"),c=a.replace(/\?$/,"");if(o.length===0)return i?[c,""]:[c];let d=N0(o.join("/")),m=[];return m.push(...d.map(p=>p===""?c:[c,p].join("/"))),i&&m.push(...d),m.map(p=>e.startsWith("/")&&p===""?"/":p)}function E3(e){e.sort((n,a)=>n.score!==a.score?a.score-n.score:O3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var N3=/^:[\w-]+$/,k3=3,T3=2,R3=1,A3=10,M3=-2,Fx=e=>e==="*";function _3(e,n){let a=e.split("/"),o=a.length;return a.some(Fx)&&(o+=M3),n&&(o+=T3),a.filter(i=>!Fx(i)).reduce((i,c)=>i+(N3.test(c)?k3:c===""?R3:A3),o)}function O3(e,n){return e.length===n.length&&e.slice(0,-1).every((o,i)=>o===n[i])?e[e.length-1]-n[n.length-1]:0}function D3(e,n,a=!1){let{routesMeta:o}=e,i={},c="/",d=[];for(let m=0;m{if(y==="*"){let j=m[x]||"";d=c.slice(0,c.length-j.length).replace(/(.)\/+$/,"$1")}const S=m[x];return v&&!S?h[y]=void 0:h[y]=(S||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:d,pattern:e}}function L3(e,n=!1,a=!0){$n(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 o=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,h,y)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let v=y.charAt(h+d.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(o.push({paramName:"*"}),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,n?void 0:"i"),o]}function z3(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return $n(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),e}}function zr(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=e.charAt(a);return o&&o!=="/"?null:e.slice(a)||"/"}var P3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function I3(e,n="/"){let{pathname:a,search:o="",hash:i=""}=typeof e=="string"?Rs(e):e,c;return a?(a=k0(a),a.startsWith("/")?c=Yx(a.substring(1),"/"):c=Yx(a,n)):c=n,{pathname:c,search:U3(o),hash:H3(i)}}function Yx(e,n){let a=hu(n).split("/");return e.split("/").forEach(i=>{i===".."?a.length>1&&a.pop():i!=="."&&a.push(i)}),a.length>1?a.join("/"):"/"}function Zm(e,n,a,o){return`Cannot include a '${e}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function $3(e){return e.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Ch(e){let n=$3(e);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function zu(e,n,a,o=!1){let i;typeof e=="string"?i=Rs(e):(i={...e},ft(!i.pathname||!i.pathname.includes("?"),Zm("?","pathname","search",i)),ft(!i.pathname||!i.pathname.includes("#"),Zm("#","pathname","hash",i)),ft(!i.search||!i.search.includes("#"),Zm("#","search","hash",i)));let c=e===""||i.pathname==="",d=c?"/":i.pathname,m;if(d==null)m=a;else{let v=n.length-1;if(!o&&d.startsWith("..")){let x=d.split("/");for(;x[0]==="..";)x.shift(),v-=1;i.pathname=x.join("/")}m=v>=0?n[v]:"/"}let p=I3(i,m),h=d&&d!=="/"&&d.endsWith("/"),y=(c||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(h||y)&&(p.pathname+="/"),p}var k0=e=>e.replace(/\/\/+/g,"/"),Wn=e=>k0(e.join("/")),hu=e=>e.replace(/\/+$/,""),B3=e=>hu(e).replace(/^\/*/,"/"),U3=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,H3=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,V3=class{constructor(e,n,a,o=!1){this.status=e,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function G3(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function F3(e){let n=e.map(a=>a.route.path).filter(Boolean);return Wn(n)||"/"}var T0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function R0(e,n){let a=e;if(typeof a!="string"||!P3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,i=!1;if(T0)try{let c=new URL(window.location.href),d=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=zr(d.pathname,n);d.origin===c.origin&&m!=null?a=m+d.search+d.hash:i=!0}catch{$n(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:i,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var A0=["POST","PUT","PATCH","DELETE"];new Set(A0);var Y3=["GET",...A0];new Set(Y3);var As=f.createContext(null);As.displayName="DataRouter";var Pu=f.createContext(null);Pu.displayName="DataRouterState";var M0=f.createContext(!1);function W3(){return f.useContext(M0)}var _0=f.createContext({isTransitioning:!1});_0.displayName="ViewTransition";var q3=f.createContext(new Map);q3.displayName="Fetchers";var K3=f.createContext(null);K3.displayName="Await";var Cn=f.createContext(null);Cn.displayName="Navigation";var cl=f.createContext(null);cl.displayName="Location";var Xn=f.createContext({outlet:null,matches:[],isDataRoute:!1});Xn.displayName="Route";var jh=f.createContext(null);jh.displayName="RouteError";var O0="REACT_ROUTER_ERROR",X3="REDIRECT",Z3="ROUTE_ERROR_RESPONSE";function Q3(e){if(e.startsWith(`${O0}:${X3}:{`))try{let n=JSON.parse(e.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function J3(e){if(e.startsWith(`${O0}:${Z3}:{`))try{let n=JSON.parse(e.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new V3(n.status,n.statusText,n.data)}catch{}}function e4(e,{relative:n}={}){ft(Ms(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(Cn),{hash:i,pathname:c,search:d}=ul(e,{relative:n}),m=c;return a!=="/"&&(m=c==="/"?a:Wn([a,c])),o.createHref({pathname:m,search:d,hash:i})}function Ms(){return f.useContext(cl)!=null}function jn(){return ft(Ms(),"useLocation() may be used only in the context of a component."),f.useContext(cl).location}var D0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function L0(e){f.useContext(Cn).static||f.useLayoutEffect(e)}function mo(){let{isDataRoute:e}=f.useContext(Xn);return e?h4():t4()}function t4(){ft(Ms(),"useNavigate() may be used only in the context of a component.");let e=f.useContext(As),{basename:n,navigator:a}=f.useContext(Cn),{matches:o}=f.useContext(Xn),{pathname:i}=jn(),c=JSON.stringify(Ch(o)),d=f.useRef(!1);return L0(()=>{d.current=!0}),f.useCallback((p,h={})=>{if($n(d.current,D0),!d.current)return;if(typeof p=="number"){a.go(p);return}let y=zu(p,JSON.parse(c),i,h.relative==="path");e==null&&n!=="/"&&(y.pathname=y.pathname==="/"?n:Wn([n,y.pathname])),(h.replace?a.replace:a.push)(y,h.state,h)},[n,a,c,i,e])}var n4=f.createContext(null);function r4(e){let n=f.useContext(Xn).outlet;return f.useMemo(()=>n&&f.createElement(n4.Provider,{value:e},n),[n,e])}function ul(e,{relative:n}={}){let{matches:a}=f.useContext(Xn),{pathname:o}=jn(),i=JSON.stringify(Ch(a));return f.useMemo(()=>zu(e,JSON.parse(i),o,n==="path"),[e,i,o,n])}function a4(e,n){return z0(e,n)}function z0(e,n,a){var N;ft(Ms(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(Cn),{matches:i}=f.useContext(Xn),c=i[i.length-1],d=c?c.params:{},m=c?c.pathname:"/",p=c?c.pathnameBase:"/",h=c&&c.route;{let E=h&&h.path||"";I0(m,!h||E.endsWith("*")||E.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let y=jn(),v;if(n){let E=typeof n=="string"?Rs(n):n;ft(p==="/"||((N=E.pathname)==null?void 0:N.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${E.pathname}" was given in the \`location\` prop.`),v=E}else v=y;let x=v.pathname||"/",S=x;if(p!=="/"){let E=p.replace(/^\//,"").split("/");S="/"+x.replace(/^\//,"").split("/").slice(E.length).join("/")}let j=a&&a.state.matches.length?a.state.matches.map(E=>Object.assign(E,{route:a.manifest[E.route.id]||E.route})):j0(e,{pathname:S});$n(h||j!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),$n(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let C=c4(j&&j.map(E=>Object.assign({},E,{params:Object.assign({},d,E.params),pathname:Wn([p,o.encodeLocation?o.encodeLocation(E.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathname]),pathnameBase:E.pathnameBase==="/"?p:Wn([p,o.encodeLocation?o.encodeLocation(E.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathnameBase])})),i,a);return n&&C?f.createElement(cl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},C):C}function o4(){let e=p4(),n=G3(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",i={padding:"0.5rem",backgroundColor:o},c={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",e),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:c},"ErrorBoundary")," or"," ",f.createElement("code",{style:c},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:i},a):null,d)}var s4=f.createElement(o4,null),P0=class extends f.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){this.props.onError?this.props.onError(e,n):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=J3(e.digest);a&&(e=a)}let n=e!==void 0?f.createElement(Xn.Provider,{value:this.props.routeContext},f.createElement(jh.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?f.createElement(i4,{error:e},n):n}};P0.contextType=M0;var Qm=new WeakMap;function i4({children:e,error:n}){let{basename:a}=f.useContext(Cn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=Q3(n.digest);if(o){let i=Qm.get(n);if(i)throw i;let c=R0(o.location,a);if(T0&&!Qm.get(n))if(c.isExternal||o.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:o.replace}));throw Qm.set(n,d),d}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return e}function l4({routeContext:e,match:n,children:a}){let o=f.useContext(As);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(Xn.Provider,{value:e},a)}function c4(e,n=[],a){let o=a==null?void 0:a.state;if(e==null){if(!o)return null;if(o.errors)e=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)e=o.matches;else return null}let i=e,c=o==null?void 0:o.errors;if(c!=null){let y=i.findIndex(v=>v.route.id&&(c==null?void 0:c[v.route.id])!==void 0);ft(y>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),i=i.slice(0,Math.min(i.length,y+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let y=0;y=0?i=i.slice(0,m+1):i=[i[0]];break}}}}let p=a==null?void 0:a.onError,h=o&&p?(y,v)=>{var x,S;p(y,{location:o.location,params:((S=(x=o.matches)==null?void 0:x[0])==null?void 0:S.params)??{},pattern:F3(o.matches),errorInfo:v})}:void 0;return i.reduceRight((y,v,x)=>{let S,j=!1,C=null,N=null;o&&(S=c&&v.route.id?c[v.route.id]:void 0,C=v.route.errorElement||s4,d&&(m<0&&x===0?(I0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,N=null):m===x&&(j=!0,N=v.route.hydrateFallbackElement||null)));let E=n.concat(i.slice(0,x+1)),k=()=>{let T;return S?T=C:j?T=N:v.route.Component?T=f.createElement(v.route.Component,null):v.route.element?T=v.route.element:T=y,f.createElement(l4,{match:v,routeContext:{outlet:y,matches:E,isDataRoute:o!=null},children:T})};return o&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?f.createElement(P0,{location:o.location,revalidation:o.revalidation,component:C,error:S,children:k(),routeContext:{outlet:null,matches:E,isDataRoute:!0},onError:h}):k()},null)}function Eh(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function u4(e){let n=f.useContext(As);return ft(n,Eh(e)),n}function d4(e){let n=f.useContext(Pu);return ft(n,Eh(e)),n}function f4(e){let n=f.useContext(Xn);return ft(n,Eh(e)),n}function Nh(e){let n=f4(e),a=n.matches[n.matches.length-1];return ft(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function m4(){return Nh("useRouteId")}function p4(){var o;let e=f.useContext(jh),n=d4("useRouteError"),a=Nh("useRouteError");return e!==void 0?e:(o=n.errors)==null?void 0:o[a]}function h4(){let{router:e}=u4("useNavigate"),n=Nh("useNavigate"),a=f.useRef(!1);return L0(()=>{a.current=!0}),f.useCallback(async(i,c={})=>{$n(a.current,D0),a.current&&(typeof i=="number"?await e.navigate(i):await e.navigate(i,{fromRouteId:n,...c}))},[e,n])}var Wx={};function I0(e,n,a){!n&&!Wx[e]&&(Wx[e]=!0,$n(!1,a))}f.memo(g4);function g4({routes:e,manifest:n,future:a,state:o,isStatic:i,onError:c}){return z0(e,void 0,{manifest:n,state:o,isStatic:i,onError:c})}function Lr({to:e,replace:n,state:a,relative:o}){ft(Ms()," may be used only in the context of a component.");let{static:i}=f.useContext(Cn);$n(!i," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:c}=f.useContext(Xn),{pathname:d}=jn(),m=mo(),p=zu(e,Ch(c),d,o==="path"),h=JSON.stringify(p);return f.useEffect(()=>{m(JSON.parse(h),{replace:n,state:a,relative:o})},[m,h,o,n,a]),null}function v4(e){return r4(e.context)}function Yt(e){ft(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function b4({basename:e="/",children:n=null,location:a,navigationType:o="POP",navigator:i,static:c=!1,useTransitions:d}){ft(!Ms(),"You cannot render a inside another . You should never have more than one in your app.");let m=e.replace(/^\/*/,"/"),p=f.useMemo(()=>({basename:m,navigator:i,static:c,useTransitions:d,future:{}}),[m,i,c,d]);typeof a=="string"&&(a=Rs(a));let{pathname:h="/",search:y="",hash:v="",state:x=null,key:S="default",mask:j}=a,C=f.useMemo(()=>{let N=zr(h,m);return N==null?null:{location:{pathname:N,search:y,hash:v,state:x,key:S,mask:j},navigationType:o}},[m,h,y,v,x,S,o,j]);return $n(C!=null,` is not able to match the URL "${h}${y}${v}" because it does not start with the basename, so the won't render anything.`),C==null?null:f.createElement(Cn.Provider,{value:p},f.createElement(cl.Provider,{children:n,value:C}))}function qx({children:e,location:n}){return a4(Dp(e),n)}function Dp(e,n=[]){let a=[];return f.Children.forEach(e,(o,i)=>{if(!f.isValidElement(o))return;let c=[...n,i];if(o.type===f.Fragment){a.push.apply(a,Dp(o.props.children,c));return}ft(o.type===Yt,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),ft(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||c.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=Dp(o.props.children,c)),a.push(d)}),a}var au="get",ou="application/x-www-form-urlencoded";function Iu(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function y4(e){return Iu(e)&&e.tagName.toLowerCase()==="button"}function x4(e){return Iu(e)&&e.tagName.toLowerCase()==="form"}function S4(e){return Iu(e)&&e.tagName.toLowerCase()==="input"}function w4(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function C4(e,n){return e.button===0&&(!n||n==="_self")&&!w4(e)}function Lp(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,a)=>{let o=e[a];return n.concat(Array.isArray(o)?o.map(i=>[a,i]):[[a,o]])},[]))}function j4(e,n){let a=Lp(e);return n&&n.forEach((o,i)=>{a.has(i)||n.getAll(i).forEach(c=>{a.append(i,c)})}),a}var Hc=null;function E4(){if(Hc===null)try{new FormData(document.createElement("form"),0),Hc=!1}catch{Hc=!0}return Hc}var N4=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Jm(e){return e!=null&&!N4.has(e)?($n(!1,`"${e}" is not a valid \`encType\` for \`\`/\`\` and will default to "${ou}"`),null):e}function k4(e,n){let a,o,i,c,d;if(x4(e)){let m=e.getAttribute("action");o=m?zr(m,n):null,a=e.getAttribute("method")||au,i=Jm(e.getAttribute("enctype"))||ou,c=new FormData(e)}else if(y4(e)||S4(e)&&(e.type==="submit"||e.type==="image")){let m=e.form;if(m==null)throw new Error('Cannot submit a `,D=>`${R}-${D.id}`)}const N=x`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${S(n.skinTones,(k,T)=>x`
${k}
`,k=>k)}
${S(n.currentEmojisWithCategories,(k,T)=>x`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,E=(k,T)=>{for(const R of e.querySelectorAll(`[${k}]`))T(R,R.getAttribute(k))};if(p){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(T,R)=>{T.addEventListener(k,o[R])});E("data-ref",(k,T)=>{c[T]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,T)=>{let R=m.get(T);R||m.set(T,R=new WeakSet),R.has(k)||(R.add(k),i[T](k))})}const Ou=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function oP(e){let n=!1,a;const o=new Map,i=new Set;let c;const d=()=>{if(n)return;const h=[...i];i.clear();try{for(const y of h)y()}finally{c=!1,i.size&&(c=!0,Ou(d))}},m=new Proxy({},{get(h,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return h[y]},set(h,y,v){if(h[y]!==v){h[y]=v;const x=o.get(y);if(x){for(const S of x)i.add(S);c||(c=!0,Ou(d))}}return!0}}),p=h=>{const y=()=>{const v=a;a=y;try{return h()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function Tp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{i.disconnect()})),i.observe(e)}}const Rp=[],{assign:eu}=Object;function iP(e,n){const a={},o=new AbortController,i=o.signal,{state:c,createEffect:d}=oP(i),m=new Map;eu(c,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),eu(c,n),eu(c,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Nz,isRtl:!1,currentGroupIndex:0,groups:Cp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{c.currentGroup!==c.groups[c.currentGroupIndex]&&(c.currentGroup=c.groups[c.currentGroupIndex])});const p=W=>{e.getElementById(W).focus()},h=W=>e.getElementById(`emo-${W.id}`),y=(W,ie)=>{a.rootElement.dispatchEvent(new CustomEvent(W,{detail:ie,bubbles:!0,composed:!0}))},v=(W,ie)=>W.id===ie.id,x=(W,ie)=>{const{category:ge,emojis:je}=W,{category:Ae,emojis:tt}=ie;return ge!==Ae?!1:Tp(je,tt,v)},S=W=>{Tp(c.currentEmojis,W,v)||(c.currentEmojis=W)},j=W=>{c.searchMode!==W&&(c.searchMode=W)},C=W=>{Tp(c.currentEmojisWithCategories,W,x)||(c.currentEmojisWithCategories=W)},N=(W,ie)=>ie&&W.skins&&W.skins[ie]||W.unicode,T={labelWithSkin:(W,ie)=>Vz([W.name||N(W,ie),W.annotation,...W.shortcodes||Rp].filter(Boolean)).join(", "),titleForEmoji:W=>W.annotation||(W.shortcodes||Rp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:F,onEmojiClick:_,onNavClick:Z,onNavKeydown:J,onSearchKeydown:$,onSkinToneOptionsClick:V,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ae,onSkinToneOptionsKeyup:ne,onSearchInput:pe},D={calculateEmojiGridStyle:B,updateOnIntersection:H};let P=!0;d(()=>{aP(e,c,T,R,D,a,i,m,P),P=!1}),c.emojiVersion||Ep().then(W=>{W||(c.message=c.i18n.emojiUnsupportedMessage)}),d(()=>{async function W(){let ie=!1;const ge=setTimeout(()=>{ie=!0,c.message=c.i18n.loadingMessage},jz);try{await c.database.ready(),c.databaseLoaded=!0}catch(je){console.error(je),c.message=c.i18n.networkErrorMessage}finally{clearTimeout(ge),ie&&(ie=!1,c.message="")}}c.database&&W()}),d(()=>{c.pickerStyle=` - --num-groups: ${c.groups.length}; - --indicator-opacity: ${c.searchMode?0:1}; - --num-skintones: ${Q1};`}),d(()=>{c.customEmoji&&c.database&&z()}),d(()=>{c.customEmoji&&c.customEmoji.length?c.groups!==vh&&(c.groups=vh):c.groups!==Cp&&(c.currentGroupIndex&&c.currentGroupIndex--,c.groups=Cp)}),d(()=>{async function W(){c.databaseLoaded&&(c.currentSkinTone=await c.database.getPreferredSkinTone())}W()}),d(()=>{c.skinTones=Array(Q1).fill().map((W,ie)=>Pz(c.skinToneEmoji,ie))}),d(()=>{c.skinToneButtonText=c.skinTones[c.currentSkinTone]}),d(()=>{c.skinToneButtonLabel=c.i18n.skinToneLabel.replace("{skinTone}",c.i18n.skinTones[c.currentSkinTone])}),d(()=>{async function W(){const{database:ie}=c,ge=(await Promise.all(kz.map(je=>ie.getEmojiByUnicodeOrName(je)))).filter(Boolean);c.defaultFavoriteEmojis=ge}c.databaseLoaded&&W()});function z(){const{customEmoji:W,database:ie}=c,ge=W||Rp;ie.customEmoji!==ge&&(ie.customEmoji=ge)}d(()=>{async function W(){z();const{database:ie,defaultFavoriteEmojis:ge,numColumns:je}=c,Ae=await ie.getTopFavoriteEmoji(je),tt=await he(D5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));c.currentFavorites=tt}c.databaseLoaded&&c.defaultFavoriteEmojis&&W()});function B(W){Bz(W,i,()=>{{const ie=getComputedStyle(a.rootElement),ge=parseInt(ie.getPropertyValue("--num-columns"),10),je=ie.getPropertyValue("direction")==="rtl";c.numColumns=ge,c.isRtl=je}})}function H(W){sP(W,i,ie=>{for(const{target:ge,isIntersecting:je}of ie)ge.classList.toggle("onscreen",je)})}d(()=>{async function W(){const{searchText:ie,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=c;if(!je)c.currentEmojis=[],c.searchMode=!1;else if(ie.length>=wz){const tt=await O(ie);c.searchText===ie&&(S(tt),j(!0))}else{const{id:tt}=ge;if(tt!==-1||Ae&&Ae.length){const ct=await se(tt);c.currentGroup.id===tt&&(S(ct),j(!1))}}}W()});const Y=()=>{du(()=>Gz(a.tabpanelElement))};d(()=>{const{currentEmojis:W,emojiVersion:ie}=c,ge=W.filter(je=>je.unicode).filter(je=>J1(je)&&!bh.has(je.unicode));if(!ie&&ge.length)S(W),du(()=>Q(ge));else{const je=ie?W:W.filter(fe);S(je),Y()}});function Q(W){Hz(W,a.baselineEmoji,h)?Y():c.currentEmojis=[...c.currentEmojis]}function fe(W){return!W.unicode||!J1(W)||bh.get(W.unicode)}async function de(W){const ie=c.emojiVersion||await Ep();return W.filter(({version:ge})=>!ge||ge<=ie)}async function he(W){return Iz(W,c.emojiVersion||await Ep())}async function se(W){const ie=W===-1?c.customEmoji:await c.database.getEmojiByGroup(W);return he(await de(ie))}async function O(W){return he(await de(await c.database.getEmojiBySearchQuery(W)))}d(()=>{}),d(()=>{function W(){const{searchMode:ge,currentEmojis:je}=c;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const tt of je){const ct=tt.category||"";let kt=Ae.get(ct);kt||(kt=[],Ae.set(ct,kt)),kt.push(tt)}return[...Ae.entries()].map(([tt,ct])=>({category:tt,emojis:ct})).sort((tt,ct)=>c.customCategorySorting(tt.category,ct.category))}const ie=W();C(ie)}),d(()=>{c.activeSearchItemId=c.activeSearchItem!==-1&&c.currentEmojis[c.activeSearchItem].id}),d(()=>{const{rawSearchText:W}=c;_5(()=>{c.searchText=(W||"").trim(),c.activeSearchItem=-1})});function $(W){if(!c.searchMode||!c.currentEmojis.length)return;const ie=ge=>{or(W),c.activeSearchItem=Np(ge,c.activeSearchItem,c.currentEmojis)};switch(W.key){case"ArrowDown":return ie(!1);case"ArrowUp":return ie(!0);case"Enter":if(c.activeSearchItem===-1)c.activeSearchItem=0;else return or(W),M(c.currentEmojis[c.activeSearchItem].id)}}function Z(W){const{target:ie}=W,ge=ie.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",c.rawSearchText="",c.searchText="",c.activeSearchItem=-1,c.currentGroupIndex=c.groups.findIndex(Ae=>Ae.id===je)}function J(W){const{target:ie,key:ge}=W,je=Ae=>{Ae&&(or(W),Ae.focus())};switch(ge){case"ArrowLeft":return je(ie.previousElementSibling);case"ArrowRight":return je(ie.nextElementSibling);case"Home":return je(ie.parentElement.firstElementChild);case"End":return je(ie.parentElement.lastElementChild)}}async function te(W){const ie=await c.database.getEmojiByUnicodeOrName(W),ge=[...c.currentEmojis,...c.currentFavorites].find(Ae=>Ae.id===W),je=ge.unicode&&N(ge,c.currentSkinTone);return await c.database.incrementFavoriteEmojiCount(W),{emoji:ie,skinTone:c.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function M(W){const ie=te(W);y("emoji-click-sync",ie),y("emoji-click",await ie)}function _(W){const{target:ie}=W;if(!ie.classList.contains("emoji"))return;or(W);const ge=ie.id.substring(4);M(ge)}function U(W){c.currentSkinTone=W,c.skinTonePickerExpanded=!1,p("skintone-button"),y("skin-tone-change",{skinTone:W}),c.database.setPreferredSkinTone(W)}function V(W){const{target:{id:ie}}=W,ge=ie&&ie.match(/^skintone-(\d)/);if(!ge)return;or(W);const je=parseInt(ge[1],10);U(je)}function F(W){c.skinTonePickerExpanded=!c.skinTonePickerExpanded,c.activeSkinTone=c.currentSkinTone,c.skinTonePickerExpanded&&(or(W),du(()=>p("skintone-list")))}d(()=>{c.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{c.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):c.skinTonePickerExpandedAfterAnimation=!1});function ae(W){if(!c.skinTonePickerExpanded)return;const ie=async ge=>{or(W),c.activeSkinTone=ge};switch(W.key){case"ArrowUp":return ie(Np(!0,c.activeSkinTone,c.skinTones));case"ArrowDown":return ie(Np(!1,c.activeSkinTone,c.skinTones));case"Home":return ie(0);case"End":return ie(c.skinTones.length-1);case"Enter":return or(W),U(c.activeSkinTone);case"Escape":return or(W),c.skinTonePickerExpanded=!1,p("skintone-button")}}function ne(W){if(c.skinTonePickerExpanded)switch(W.key){case" ":return or(W),U(c.activeSkinTone)}}async function me(W){const{relatedTarget:ie}=W;(!ie||ie.id!=="skintone-list")&&(c.skinTonePickerExpanded=!1)}function pe(W){c.rawSearchText=W.target.value}return{$set(W){eu(c,W)},$destroy(){o.abort()}}}const lP="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",cP="en";var uP={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},dP=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const L5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],fP=`:host{--emoji-font-family:${O5}}`;class Lg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=dP+fP,this.shadowRoot.appendChild(a),this._ctx={locale:cP,dataSource:lP,skinToneEmoji:Ez,customCategorySorting:Tz,customEmoji:null,i18n:uP,emojiVersion:null,...n};for(const o of L5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){s0(this),this._cmp||(this._cmp=iP(this.shadowRoot,this._ctx))}disconnectedCallback(){s0(this),Ou(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(i,c)=>c.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new Sz({locale:n,dataSource:a}))}_dbFlush(){Ou(()=>this._dbCreate())}}const z5={};for(const e of L5)z5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(Lg.prototype,z5);function s0(e){e instanceof Lg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Lg);function mP({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const i=c=>{var p;const d=c.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&e(m)};return o.addEventListener("emoji-click",i),a.appendChild(o),()=>{o.removeEventListener("emoji-click",i),o.remove()}},[e]),l.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const pP=/^<(a?):([^:>]+):(\d{17,20})>$/;function fu(e,n,a=!1){return`${a?"`}function P5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(pP);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function I5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function hP(e,n=[]){const a=P5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(i=>i.id===a.id);if(o)return{kind:"custom",value:fu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(i=>i.id===a.id);if(o&&a.value!==fu(o.name,o.id,o.animated))return{kind:"custom",value:fu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function gP({value:e,guildEmojis:n,size:a="md"}){const o=hP(e,n),i=a==="lg"?"size-10":"size-7",c=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?l.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?l.jsxs("span",{className:"inline-flex items-center gap-3",children:[l.jsx("img",{src:I5(o.id,o.animated),alt:o.name??"custom emoji",className:ce(i,"shrink-0 rounded-md"),loading:"lazy"}),l.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[l.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),l.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):l.jsx("span",{className:ce(c,"leading-none"),title:o.value,children:o.value})}function vP({id:e,label:n,description:a,value:o,onChange:i,readOnly:c}){const[d,m]=f.useState(!1),[p,h]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Y=!1)=>{C(!0),S("");try{const Q=await Ne.getGuildResources(Y);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const T=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Y=N.trim().toLowerCase();return Y?T.filter(Q=>Q.name.toLowerCase().includes(Y)):T},[T,N]),D=String(o??""),P=P5(D);function z(Y){i(Y),m(!1)}function B(Y){i(fu(Y.name,Y.id,Y.animated)),m(!1)}function H(){i("")}return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:e,children:n}),a?l.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,l.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("div",{className:"min-w-0 flex-1",children:l.jsx(gP,{value:o,guildEmojis:T,size:"lg"})}),l.jsxs("div",{className:"flex shrink-0 gap-2",children:[l.jsx(ve,{type:"button",variant:"secondary",size:"sm",disabled:c,onClick:()=>m(!0),children:"Choose emoji"}),D?l.jsx(ve,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:H,children:"Clear"}):null]})]}),l.jsx(gg,{open:d,onOpenChange:m,children:l.jsxs(hd,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[l.jsxs(gd,{className:"space-y-1 border-b border-border px-5 py-4",children:[l.jsx(vd,{children:"Choose emoji"}),l.jsxs(bd,{children:["Server emojis save as"," ",l.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),l.jsxs(v5,{value:p,onValueChange:Y=>h(Y),className:"flex min-h-0 flex-1 flex-col",children:[l.jsxs(Rg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[l.jsx(to,{value:"server",children:"Server"}),l.jsx(to,{value:"unicode",children:"All emojis"})]}),l.jsxs(mh,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[l.jsxs("div",{className:"relative mb-3",children:[l.jsx(ye,{icon:Gu,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Search by name…",value:N,onChange:Y=>E(Y.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?l.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,l.jsx(Sd,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?l.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Y,Q)=>l.jsx(Ve,{className:"aspect-square rounded-lg"},Q))}):x?l.jsxs("div",{className:"space-y-3 p-4 text-center",children:[l.jsx("p",{className:"text-sm text-destructive",children:x}),l.jsx(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?l.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):l.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Y=>{const Q=P.kind==="custom"&&P.id===Y.id;return l.jsx("button",{type:"button",title:`:${Y.name}:`,className:ce("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>B(Y),children:l.jsx("img",{src:Y.url??I5(Y.id,Y.animated),alt:Y.name,className:"size-8 object-contain",loading:"lazy"})},Y.id)})})})]}),l.jsx(mh,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:l.jsx(mP,{onPick:z})})]})]})}),l.jsx(Ue,{value:D,disabled:c,onChange:Y=>i(Y.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const i0="BOT_TOKEN",bP="MODEL_API_KEY";function zg({field:e,value:n,onChange:a,readOnly:o}){const i=e.path.replace(/\./g,"-");if(e.type==="googleFont")return l.jsx(SL,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return l.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[l.jsxs("div",{children:[l.jsx(De,{htmlFor:i,className:"font-medium",children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),l.jsx(dn,{id:i,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(bL,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),l.jsxs(Es,{value:String(n??""),disabled:o,onValueChange:a,children:[l.jsx(lo,{id:i,className:"border-border bg-secondary/30",children:l.jsx(Ns,{placeholder:"Select…"})}),l.jsx(co,{children:e.options.map(d=>l.jsx(Zt,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=cr(String(n??"#000000"));return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsxs("div",{className:"flex gap-2",children:[l.jsx(Ng,{value:d,onChange:a}),l.jsx(Ue,{id:i,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(cr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return l.jsx(vP,{id:i,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return l.jsx(wL,{id:i,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===i0||n===bP||!n?"":"••••••••••••";return l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(Ue,{id:i,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(e.placeholder??i0))},className:"border-border bg-secondary/30"})]})}const c="border-border bg-secondary/30";return e.type==="textarea"?l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),l.jsx(Cd,{id:i,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${c}`})]}):l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:i,children:e.label}),e.description?l.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,l.jsx(Ue,{id:i,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:c})]})}const Ge=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));Ge.displayName="Card";const Ze=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("flex flex-col space-y-1.5 p-6",e),...n}));Ze.displayName="CardHeader";const Qe=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("font-semibold leading-none tracking-tight",e),...n}));Qe.displayName="CardTitle";const ht=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("text-sm text-muted-foreground",e),...n}));ht.displayName="CardDescription";const Fe=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("p-6 pt-0",e),...n}));Fe.displayName="CardContent";const Pg=f.forwardRef(({className:e,...n},a)=>l.jsx("div",{ref:a,className:ce("flex items-center p-6 pt-0",e),...n}));Pg.displayName="CardFooter";function l0(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function yP(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Ig(e,n=""){const a=[];for(const[o,i]of Object.entries(e)){const c=n?`${n}.${o}`:o;if(Array.isArray(i)){if(i.length>0&&typeof i[0]=="object"&&i[0]!==null&&!Array.isArray(i[0]))continue;a.push({path:c,label:l0(o),type:"stringList"});continue}if(i&&typeof i=="object"&&Object.keys(i).length>0){a.push(...Ig(i,c));continue}a.push({path:c,label:l0(o),type:yP(o,i)})}return a}function xP(e){const n=Ig(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function fo(e,n){const a=n.split(".");let o=e;for(const i of a){if(o==null||typeof o!="object")return;o=o[i]}return o}function il(e,n,a){const o=n.split("."),i=structuredClone(e);let c=i;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const wP=e=>{switch(e){case"success":return EP;case"info":return kP;case"warning":return NP;case"error":return TP;default:return null}},CP=Array(12).fill(0),jP=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},CP.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),EP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),NP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),kP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),TP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),RP=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),AP=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let yh=1;class MP{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...i}=n,c=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:yh++,d=this.toasts.find(p=>p.id===c),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),d?this.toasts=this.toasts.map(p=>p.id===c?(this.publish({...p,...n,id:c,title:o}),{...p,...n,id:c,dismissible:m,title:o}):p):this.addToast({title:o,...i,dismissible:m,id:c}),c},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const i=Promise.resolve(n instanceof Function?n():n);let c=o!==void 0,d;const m=i.then(async h=>{if(d=["resolve",h],ue.isValidElement(h))c=!1,this.create({id:o,type:"default",message:h});else if(OP(h)&&!h.ok){c=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${h.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${h.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(h instanceof Error){c=!1;const v=typeof a.error=="function"?await a.error(h):a.error,x=typeof a.description=="function"?await a.description(h):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){c=!1;const v=typeof a.success=="function"?await a.success(h):a.success,x=typeof a.description=="function"?await a.description(h):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async h=>{if(d=["reject",h],a.error!==void 0){c=!1;const y=typeof a.error=="function"?await a.error(h):a.error,v=typeof a.description=="function"?await a.description(h):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{c&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),p=()=>new Promise((h,y)=>m.then(()=>d[0]==="reject"?y(d[1]):h(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:p}:Object.assign(o,{unwrap:p})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||yh++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const un=new MP,_P=(e,n)=>{const a=(n==null?void 0:n.id)||yh++;return un.addToast({title:e,...n,id:a}),a},OP=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",DP=_P,LP=()=>un.toasts,zP=()=>un.getActiveToasts(),Dr=Object.assign(DP,{success:un.success,info:un.info,warning:un.warning,error:un.error,custom:un.custom,message:un.message,promise:un.promise,dismiss:un.dismiss,loading:un.loading},{getHistory:LP,getToasts:zP});SP("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function tu(e){return e.label!==void 0}const PP=3,IP="24px",$P="16px",c0=4e3,BP=356,UP=14,HP=45,VP=200;function sr(...e){return e.filter(Boolean).join(" ")}function GP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const FP=e=>{var n,a,o,i,c,d,m,p,h;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:T,removeToast:R,defaultRichColors:D,closeButton:P,style:z,cancelButtonStyle:B,actionButtonStyle:H,className:Y="",descriptionClassName:Q="",duration:fe,position:de,gap:he,expandByDefault:se,classNames:O,icons:$,closeButtonAriaLabel:Z="Close toast"}=e,[J,te]=ue.useState(null),[M,_]=ue.useState(null),[U,V]=ue.useState(!1),[F,ae]=ue.useState(!1),[ne,me]=ue.useState(!1),[pe,W]=ue.useState(!1),[ie,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[tt,ct]=ue.useState(0),kt=ue.useRef(v.duration||fe||c0),Ra=ue.useRef(null),Tt=ue.useRef(null),Hs=E===0,Vs=E+1<=C,Wt=v.type,Vr=v.dismissible!==!1,qt=v.className||"",_d=v.descriptionClassName||"",Aa=ue.useMemo(()=>N.findIndex(Re=>Re.toastId===v.id)||0,[N,v.id]),Tl=ue.useMemo(()=>{var Re;return(Re=v.closeButton)!=null?Re:P},[v.closeButton,P]),Ma=ue.useMemo(()=>v.duration||fe||c0,[v.duration,fe]),Gs=ue.useRef(0),mr=ue.useRef(0),Rl=ue.useRef(0),Gr=ue.useRef(null),[_a,Kt]=de.split("-"),Un=ue.useMemo(()=>N.reduce((Re,ut,Rt)=>Rt>=Aa?Re:Re+ut.height,0),[N,Aa]),Vt=AP(),Od=v.invert||y,Fs=Wt==="loading";mr.current=ue.useMemo(()=>Aa*he+Un,[Aa,Un]),ue.useEffect(()=>{kt.current=Ma},[Ma]),ue.useEffect(()=>{V(!0)},[]),ue.useEffect(()=>{const Re=Tt.current;if(Re){const ut=Re.getBoundingClientRect().height;return ct(ut),j(Rt=>[{toastId:v.id,height:ut,position:v.position},...Rt]),()=>j(Rt=>Rt.filter(Gt=>Gt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!U)return;const Re=Tt.current,ut=Re.style.height;Re.style.height="auto";const Rt=Re.getBoundingClientRect().height;Re.style.height=ut,ct(Rt),j(Gt=>Gt.find(mt=>mt.toastId===v.id)?Gt.map(mt=>mt.toastId===v.id?{...mt,height:Rt}:mt):[{toastId:v.id,height:Rt,position:v.position},...Gt])},[U,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Qn=ue.useCallback(()=>{ae(!0),Ae(mr.current),j(Re=>Re.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},VP)},[v,R,j,mr]);ue.useEffect(()=>{if(v.promise&&Wt==="loading"||v.duration===1/0||v.type==="loading")return;let Re;return T||S||Vt?(()=>{if(Rl.current{kt.current!==1/0&&(Gs.current=new Date().getTime(),Re=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Qn()},kt.current))})(),()=>clearTimeout(Re)},[T,S,v,Wt,Vt,Qn]),ue.useEffect(()=>{v.delete&&(Qn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Qn,v.delete]);function yo(){var Re;if($!=null&&$.loading){var ut;return ue.createElement("div",{className:sr(O==null?void 0:O.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Wt==="loading"},$.loading)}return ue.createElement(jP,{className:sr(O==null?void 0:O.loader,v==null||(Re=v.classNames)==null?void 0:Re.loader),visible:Wt==="loading"})}const xo=v.icon||($==null?void 0:$[Wt])||wP(Wt);var Oa,Jn;return ue.createElement("li",{tabIndex:0,ref:Tt,className:sr(Y,qt,O==null?void 0:O.toast,v==null||(n=v.classNames)==null?void 0:n.toast,O==null?void 0:O.default,O==null?void 0:O[Wt],v==null||(a=v.classNames)==null?void 0:a[Wt]),"data-sonner-toast":"","data-rich-colors":(Oa=v.richColors)!=null?Oa:D,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":U,"data-promise":!!v.promise,"data-swiped":ie,"data-removed":F,"data-visible":Vs,"data-y-position":_a,"data-x-position":Kt,"data-index":E,"data-front":Hs,"data-swiping":ne,"data-dismissible":Vr,"data-type":Wt,"data-invert":Od,"data-swipe-out":pe,"data-swipe-direction":M,"data-expanded":!!(T||se&&U),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${F?je:mr.current}px`,"--initial-height":se?"auto":`${tt}px`,...z,...v.style},onDragEnd:()=>{me(!1),te(null),Gr.current=null},onPointerDown:Re=>{Re.button!==2&&(Fs||!Vr||(Ra.current=new Date,Ae(mr.current),Re.target.setPointerCapture(Re.pointerId),Re.target.tagName!=="BUTTON"&&(me(!0),Gr.current={x:Re.clientX,y:Re.clientY})))},onPointerUp:()=>{var Re,ut,Rt;if(pe||!Vr)return;Gr.current=null;const Gt=Number(((Re=Tt.current)==null?void 0:Re.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Fr=Number(((ut=Tt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((Rt=Ra.current)==null?void 0:Rt.getTime()),Jt=J==="x"?Gt:Fr,Da=Math.abs(Jt)/mt;if(Math.abs(Jt)>=HP||Da>.11){Ae(mr.current),v.onDismiss==null||v.onDismiss.call(v,v),_(J==="x"?Gt>0?"right":"left":Fr>0?"down":"up"),Qn(),W(!0);return}else{var en,tn;(en=Tt.current)==null||en.style.setProperty("--swipe-amount-x","0px"),(tn=Tt.current)==null||tn.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),te(null)},onPointerMove:Re=>{var ut,Rt,Gt;if(!Gr.current||!Vr||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Re.clientY-Gr.current.y,Jt=Re.clientX-Gr.current.x;var Da;const en=(Da=e.swipeDirections)!=null?Da:GP(de);!J&&(Math.abs(Jt)>1||Math.abs(mt)>1)&&te(Math.abs(Jt)>Math.abs(mt)?"x":"y");let tn={x:0,y:0};const So=Hn=>1/(1.5+Math.abs(Hn)/20);if(J==="y"){if(en.includes("top")||en.includes("bottom"))if(en.includes("top")&&mt<0||en.includes("bottom")&&mt>0)tn.y=mt;else{const Hn=mt*So(mt);tn.y=Math.abs(Hn)0)tn.x=Jt;else{const Hn=Jt*So(Jt);tn.x=Math.abs(Hn)0||Math.abs(tn.y)>0)&&ge(!0),(Rt=Tt.current)==null||Rt.style.setProperty("--swipe-amount-x",`${tn.x}px`),(Gt=Tt.current)==null||Gt.style.setProperty("--swipe-amount-y",`${tn.y}px`)}},Tl&&!v.jsx&&Wt!=="loading"?ue.createElement("button",{"aria-label":Z,"data-disabled":Fs,"data-close-button":!0,onClick:Fs||!Vr?()=>{}:()=>{Qn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:sr(O==null?void 0:O.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Jn=$==null?void 0:$.close)!=null?Jn:RP):null,(Wt||v.icon||v.promise)&&v.icon!==null&&(($==null?void 0:$[Wt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:sr(O==null?void 0:O.icon,v==null||(i=v.classNames)==null?void 0:i.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||yo():null,v.type!=="loading"?xo:null):null,ue.createElement("div",{"data-content":"",className:sr(O==null?void 0:O.content,v==null||(c=v.classNames)==null?void 0:c.content)},ue.createElement("div",{"data-title":"",className:sr(O==null?void 0:O.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:sr(Q,_d,O==null?void 0:O.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&tu(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||B,onClick:Re=>{tu(v.cancel)&&Vr&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Re),Qn())},className:sr(O==null?void 0:O.cancelButton,v==null||(p=v.classNames)==null?void 0:p.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&tu(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||H,onClick:Re=>{tu(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Re),!Re.defaultPrevented&&Qn())},className:sr(O==null?void 0:O.actionButton,v==null||(h=v.classNames)==null?void 0:h.actionButton)},v.action.label):null)};function u0(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function YP(e,n){const a={};return[e,n].forEach((o,i)=>{const c=i===1,d=c?"--mobile-offset":"--offset",m=c?$P:IP;function p(h){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof h=="number"?`${h}px`:h})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(h=>{o[h]===void 0?a[`${d}-${h}`]=m:a[`${d}-${h}`]=typeof o[h]=="number"?`${o[h]}px`:o[h]}):p(m)}),a}const WP=ue.forwardRef(function(n,a){const{id:o,invert:i,position:c="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:h,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=PP,toastOptions:E,dir:k=u0(),gap:T=UP,icons:R,containerAriaLabel:D="Notifications"}=n,[P,z]=ue.useState([]),B=ue.useMemo(()=>o?P.filter(U=>U.toasterId===o):P.filter(U=>!U.toasterId),[P,o]),H=ue.useMemo(()=>Array.from(new Set([c].concat(B.filter(U=>U.position).map(U=>U.position)))),[B,c]),[Y,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[he,se]=ue.useState(!1),[O,$]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),Z=ue.useRef(null),J=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),te=ue.useRef(null),M=ue.useRef(!1),_=ue.useCallback(U=>{z(V=>{var F;return(F=V.find(ae=>ae.id===U.id))!=null&&F.delete||un.dismiss(U.id),V.filter(({id:ae})=>ae!==U.id)})},[]);return ue.useEffect(()=>un.subscribe(U=>{if(U.dismiss){requestAnimationFrame(()=>{z(V=>V.map(F=>F.id===U.id?{...F,delete:!0}:F))});return}setTimeout(()=>{H0.flushSync(()=>{z(V=>{const F=V.findIndex(ae=>ae.id===U.id);return F!==-1?[...V.slice(0,F),{...V[F],...U},...V.slice(F+1)]:[U,...V]})})})}),[P]),ue.useEffect(()=>{if(x!=="system"){$(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?$("dark"):$("light")),typeof window>"u")return;const U=window.matchMedia("(prefers-color-scheme: dark)");try{U.addEventListener("change",({matches:V})=>{$(V?"dark":"light")})}catch{U.addListener(({matches:F})=>{try{$(F?"dark":"light")}catch(ae){console.error(ae)}})}},[x]),ue.useEffect(()=>{P.length<=1&&de(!1)},[P]),ue.useEffect(()=>{const U=V=>{var F;if(d.every(me=>V[me]||V.code===me)){var ne;de(!0),(ne=Z.current)==null||ne.focus()}V.code==="Escape"&&(document.activeElement===Z.current||(F=Z.current)!=null&&F.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[d]),ue.useEffect(()=>{if(Z.current)return()=>{te.current&&(te.current.focus({preventScroll:!0}),te.current=null,M.current=!1)}},[Z.current]),ue.createElement("section",{ref:a,"aria-label":`${D} ${J}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},H.map((U,V)=>{var F;const[ae,ne]=U.split("-");return B.length?ue.createElement("ol",{key:U,dir:k==="auto"?u0():k,tabIndex:-1,ref:Z,className:h,"data-sonner-toaster":!0,"data-sonner-theme":O,"data-y-position":ae,"data-x-position":ne,style:{"--front-toast-height":`${((F=Y[0])==null?void 0:F.height)||0}px`,"--width":`${BP}px`,"--gap":`${T}px`,...C,...YP(y,v)},onBlur:me=>{M.current&&!me.currentTarget.contains(me.relatedTarget)&&(M.current=!1,te.current&&(te.current.focus({preventScroll:!0}),te.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||M.current||(M.current=!0,te.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{he||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||se(!0)},onPointerUp:()=>se(!1)},B.filter(me=>!me.position&&V===0||me.position===U).map((me,pe)=>{var W,ie;return ue.createElement(FP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(W=E==null?void 0:E.duration)!=null?W:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:i,visibleToasts:N,closeButton:(ie=E==null?void 0:E.closeButton)!=null?ie:p,interacting:he,position:U,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:_,toasts:B.filter(ge=>ge.position==me.position),heights:Y.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:T,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function mu(e){const n=Dr.loading("Saving changes…");try{const a=await e();if(Dr.success("Changes saved",{id:n}),a.botRestart){const o=Dr.loading("Restarting bot…");a.botRestart.success?Dr.success("Bot started",{id:o}):Dr.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Dr.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function qP({filename:e}){const{canEditConfig:n}=Lt(),a=!n("supportbot"),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{p(!0),x(""),j("");try{const D=(await Ne.getAddonConfigJson(e)).data??{};i(D),d(structuredClone(D))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?xP(o):null;function E(R,D){i(P=>P&&il(P,R,D))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await mu(()=>Ne.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-24 w-full rounded-xl"}),l.jsx(Ve,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load"})});const T=c&&JSON.stringify(o)!==JSON.stringify(c);return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,l.jsx(ve,{variant:"outline",size:"sm",onClick:C,disabled:m||h,children:"Reload"}),a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:k,disabled:h||!T,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]}),v?l.jsxs(Ye,{variant:"destructive",children:[l.jsx(ye,{icon:_h,size:18}),l.jsx(We,{children:v})]}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,N.map(R=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:R.title}),R.description?l.jsx(ht,{children:R.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(D=>l.jsx("div",{className:D.type==="textarea"||D.type==="stringList"?"sm:col-span-2":"",children:l.jsx(zg,{field:D,value:fo(o,D.path),readOnly:a,onChange:P=>E(D.path,P)})},D.path))})]},R.title))]})}function KP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function XP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=Ig(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const i=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",p=i.get(m)??[];p.push(d),i.set(m,p)}const c=[...i.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:KP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((p,h)=>p.path.localeCompare(h.path))}));return[...e,...c]}function d0(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,o=Array(n);a=e.length?e.apply(this,i):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};nu.initial(e),nu.handler(n);var a={current:e},o=Vi(xI)(a,n),i=Vi(yI)(a),c=Vi(nu.changes)(e),d=Vi(bI)(a);function m(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(y){return y};return nu.selector(h),h(a.current)}function p(h){lI(o,i,c,d)(h)}return[m,p]}function bI(e,n){return ll(n)?n(e.current):n}function yI(e,n){return e.current=h0(h0({},e.current),n),n}function xI(e,n,a){return ll(n)?n(e.current):Object.keys(a).forEach(function(o){var i;return(i=n[o])===null||i===void 0?void 0:i.call(n,e.current[o])}),a}var SI={create:vI},wI={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function CI(e){return function n(){for(var a=this,o=arguments.length,i=new Array(o),c=0;c=e.length?e.apply(this,i):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:e,n)}var xn=KI;function qi(){}function ms(e,n,a,o){return XI(e,o)||ZI(e,n,a,o)}function XI(e,n){return e.editor.getModel(Y5(e,n))}function ZI(e,n,a,o){return e.editor.createModel(n,a,o?Y5(e,o):void 0)}function Y5(e,n){return e.Uri.parse(n)}function QI({original:e,modified:n,language:a,originalLanguage:o,modifiedLanguage:i,originalModelPath:c,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:h="light",loading:y="Loading...",options:v={},height:x="100%",width:S="100%",className:j,wrapperProps:C={},beforeMount:N=qi,onMount:E=qi}){let[k,T]=f.useState(!1),[R,D]=f.useState(!0),P=f.useRef(null),z=f.useRef(null),B=f.useRef(null),H=f.useRef(E),Y=f.useRef(N),Q=f.useRef(!1);F5(()=>{let se=V5.init();return se.then(O=>(z.current=O)&&D(!1)).catch(O=>(O==null?void 0:O.type)!=="cancelation"&&console.error("Monaco initialization: error:",O)),()=>P.current?he():se.cancel()}),xn(()=>{if(P.current&&z.current){let se=P.current.getOriginalEditor(),O=ms(z.current,e||"",o||a||"text",c||"");O!==se.getModel()&&se.setModel(O)}},[c],k),xn(()=>{if(P.current&&z.current){let se=P.current.getModifiedEditor(),O=ms(z.current,n||"",i||a||"text",d||"");O!==se.getModel()&&se.setModel(O)}},[d],k),xn(()=>{let se=P.current.getModifiedEditor();se.getOption(z.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],k),xn(()=>{var se,O;(O=(se=P.current)==null?void 0:se.getModel())==null||O.original.setValue(e||"")},[e],k),xn(()=>{let{original:se,modified:O}=P.current.getModel();z.current.editor.setModelLanguage(se,o||a||"text"),z.current.editor.setModelLanguage(O,i||a||"text")},[a,o,i],k),xn(()=>{var se;(se=z.current)==null||se.editor.setTheme(h)},[h],k),xn(()=>{var se;(se=P.current)==null||se.updateOptions(v)},[v],k);let fe=f.useCallback(()=>{var $;if(!z.current)return;Y.current(z.current);let se=ms(z.current,e||"",o||a||"text",c||""),O=ms(z.current,n||"",i||a||"text",d||"");($=P.current)==null||$.setModel({original:se,modified:O})},[a,n,i,e,o,c,d]),de=f.useCallback(()=>{var se;!Q.current&&B.current&&(P.current=z.current.editor.createDiffEditor(B.current,{automaticLayout:!0,...v}),fe(),(se=z.current)==null||se.editor.setTheme(h),T(!0),Q.current=!0)},[v,h,fe]);f.useEffect(()=>{k&&H.current(P.current,z.current)},[k]),f.useEffect(()=>{!R&&!k&&de()},[R,k,de]);function he(){var O,$,Z,J;let se=(O=P.current)==null?void 0:O.getModel();m||(($=se==null?void 0:se.original)==null||$.dispose()),p||((Z=se==null?void 0:se.modified)==null||Z.dispose()),(J=P.current)==null||J.dispose()}return ue.createElement(G5,{width:S,height:x,isEditorReady:k,loading:y,_ref:B,className:j,wrapperProps:C})}var JI=QI;f.memo(JI);function e$(e){let n=f.useRef();return f.useEffect(()=>{n.current=e},[e]),n.current}var t$=e$,ru=new Map;function n$({defaultValue:e,defaultLanguage:n,defaultPath:a,value:o,language:i,path:c,theme:d="light",line:m,loading:p="Loading...",options:h={},overrideServices:y={},saveViewState:v=!0,keepCurrentModel:x=!1,width:S="100%",height:j="100%",className:C,wrapperProps:N={},beforeMount:E=qi,onMount:k=qi,onChange:T,onValidate:R=qi}){let[D,P]=f.useState(!1),[z,B]=f.useState(!0),H=f.useRef(null),Y=f.useRef(null),Q=f.useRef(null),fe=f.useRef(k),de=f.useRef(E),he=f.useRef(),se=f.useRef(o),O=t$(c),$=f.useRef(!1),Z=f.useRef(!1);F5(()=>{let M=V5.init();return M.then(_=>(H.current=_)&&B(!1)).catch(_=>(_==null?void 0:_.type)!=="cancelation"&&console.error("Monaco initialization: error:",_)),()=>Y.current?te():M.cancel()}),xn(()=>{var _,U,V,F;let M=ms(H.current,e||o||"",n||i||"",c||a||"");M!==((_=Y.current)==null?void 0:_.getModel())&&(v&&ru.set(O,(U=Y.current)==null?void 0:U.saveViewState()),(V=Y.current)==null||V.setModel(M),v&&((F=Y.current)==null||F.restoreViewState(ru.get(c))))},[c],D),xn(()=>{var M;(M=Y.current)==null||M.updateOptions(h)},[h],D),xn(()=>{!Y.current||o===void 0||(Y.current.getOption(H.current.editor.EditorOption.readOnly)?Y.current.setValue(o):o!==Y.current.getValue()&&(Z.current=!0,Y.current.executeEdits("",[{range:Y.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),Y.current.pushUndoStop(),Z.current=!1))},[o],D),xn(()=>{var _,U;let M=(_=Y.current)==null?void 0:_.getModel();M&&i&&((U=H.current)==null||U.editor.setModelLanguage(M,i))},[i],D),xn(()=>{var M;m!==void 0&&((M=Y.current)==null||M.revealLine(m))},[m],D),xn(()=>{var M;(M=H.current)==null||M.editor.setTheme(d)},[d],D);let J=f.useCallback(()=>{var M;if(!(!Q.current||!H.current)&&!$.current){de.current(H.current);let _=c||a,U=ms(H.current,o||e||"",n||i||"",_||"");Y.current=(M=H.current)==null?void 0:M.editor.create(Q.current,{model:U,automaticLayout:!0,...h},y),v&&Y.current.restoreViewState(ru.get(_)),H.current.editor.setTheme(d),m!==void 0&&Y.current.revealLine(m),P(!0),$.current=!0}},[e,n,a,o,i,c,h,y,v,d,m]);f.useEffect(()=>{D&&fe.current(Y.current,H.current)},[D]),f.useEffect(()=>{!z&&!D&&J()},[z,D,J]),se.current=o,f.useEffect(()=>{var M,_;D&&T&&((M=he.current)==null||M.dispose(),he.current=(_=Y.current)==null?void 0:_.onDidChangeModelContent(U=>{Z.current||T(Y.current.getValue(),U)}))},[D,T]),f.useEffect(()=>{if(D){let M=H.current.editor.onDidChangeMarkers(_=>{var V;let U=(V=Y.current.getModel())==null?void 0:V.uri;if(U&&_.find(F=>F.path===U.path)){let F=H.current.editor.getModelMarkers({resource:U});R==null||R(F)}});return()=>{M==null||M.dispose()}}return()=>{}},[D,R]);function te(){var M,_;(M=he.current)==null||M.dispose(),x?v&&ru.set(c,Y.current.saveViewState()):(_=Y.current.getModel())==null||_.dispose(),Y.current.dispose()}return ue.createElement(G5,{width:S,height:j,isEditorReady:D,loading:p,_ref:Q,className:C,wrapperProps:N})}var r$=n$,a$=f.memo(r$),o$=a$;function s$(e){return e!==null&&typeof e=="object"&&"Command"in e}function i$(e){return Object.entries(e).filter(([,n])=>s$(n)).map(([n,a])=>({key:n,...a}))}function l$({data:e,onChange:n}){const a=i$(e);function o(i,c){const d=e[i];n({...e,[i]:{...d,...c}})}return a.length===0?l.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(i=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[l.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:l.jsx(ye,{icon:xa,size:18})}),l.jsx(Qe,{className:"text-base",children:i.key})]}),l.jsxs(Fe,{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx(De,{htmlFor:`${i.key}-enabled`,children:"Enabled"}),l.jsx(dn,{id:`${i.key}-enabled`,checked:i.Enabled!==!1,onCheckedChange:c=>o(i.key,{Enabled:c})})]}),l.jsxs("div",{className:"space-y-1.5",children:[l.jsx(De,{children:"Slash command"}),l.jsx(Ue,{value:i.Command??"",onChange:c=>o(i.key,{Command:c.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),l.jsxs("div",{className:"space-y-1.5",children:[l.jsx(De,{children:"Description"}),l.jsx(Ue,{value:i.Description??"",onChange:c=>o(i.key,{Description:c.target.value}),className:"border-border bg-secondary/30"})]})]})]},i.key))})}function c$(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=fo(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=il(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=fo(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=il(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function u$(e,n,a,o){const i={};for(const c of n)for(const d of c.fields){const m=fo(a,d.path),p=fo(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(i[`${e}:${d.path}`]=m)}return i}function d$({configFile:e}){const{canEditConfig:n}=Lt(),a=!n(e),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[T,R]=f.useState(""),[D]=$u(),[P,z]=f.useState(()=>D.get("tab")||null),B=C_(e),H=f.useMemo(()=>!B||B==="commands"||!o?B:XP(B,o),[B,o]);f.useEffect(()=>{var $;if(H&&H!=="commands"){const Z=D.get("tab");if(Z&&H.find(J=>J.title.toLowerCase()===Z.toLowerCase())){const J=H.find(te=>te.title.toLowerCase()===Z.toLowerCase());J&&J.title!==P&&z(J.title)}else(!P||!H.find(J=>J.title===P))&&z((($=H[0])==null?void 0:$.title)||null)}},[H,P,D]);const Y=f.useCallback(async()=>{p(!0),x(""),j("");try{const Z=(await Ne.getConfigJson(e)).data??{},J=c$(e,Z);i(J),d(J);const M=(await Ne.getConfigRaw(e)).data??"",_=m8(M,e);k(_),R(_)}catch($){x($ instanceof Error?$.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{Y()},[Y]);function Q($,Z){i(J=>J&&il(J,$,Z))}async function fe(){if(!(a||E===T)){y(!0),x(""),j("");try{const $=await mu(()=>Ne.saveConfigRaw(e,E));j($.message||"Config saved."),await Y()}catch($){x($ instanceof Error?$.message:"Save failed")}finally{y(!1)}}}async function de(){if(!(a||!o||!c)){if(C==="yaml"){await fe();return}y(!0),x(""),j("");try{if(B==="commands"){const $={};for(const J of Object.keys(o))JSON.stringify(o[J])!==JSON.stringify(c[J])&&($[`${e}:${J}`]=o[J]);if(Object.keys($).length===0){j("No changes to save.");return}const Z=await mu(()=>Ne.updateConfigFields($));j(Z.message||"")}else if(H&&H!=="commands"){const $=u$(e,H,o,c);if(Object.keys($).length===0){j("No changes to save.");return}const Z=await mu(()=>Ne.updateConfigFields($));j(Z.message||"")}await Y()}catch($){x($ instanceof Error?$.message:"Save failed")}finally{y(!1)}}}if(B===null)return l.jsx(Ye,{children:l.jsx(We,{children:"No visual editor available for this file."})});if(m)return l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-24 w-full rounded-xl"}),l.jsx(Ve,{className:"h-48 w-full rounded-xl"})]});if(!o)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load"})});const he=c&&JSON.stringify(o)!==JSON.stringify(c),O=C==="yaml"?E!==T:he;return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsx(ve,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),l.jsx(ve,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[O?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,l.jsx(ve,{variant:"outline",size:"sm",onClick:Y,disabled:m||h,children:"Reload"}),a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:de,disabled:h||!O,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]})]}),v?l.jsxs(Ye,{variant:"destructive",children:[l.jsx(ye,{icon:_h,size:18}),l.jsx(We,{children:v})]}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,C==="yaml"?l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:"Raw YAML"}),l.jsx(ht,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),l.jsx(Fe,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:l.jsx(o$,{height:"100%",language:"yaml",theme:"vs-dark",value:E,onChange:$=>k($||""),options:{readOnly:a,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):B==="commands"?l.jsx(l$,{data:o,onChange:$=>i($)}):H&&H!=="commands"?l.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[l.jsx("nav",{className:"flex flex-col gap-1",children:H.map($=>l.jsx("button",{onClick:()=>z($.title),className:ce("text-left px-3 py-2 text-sm rounded-md transition-colors",P===$.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:$.title},$.title))}),l.jsx("div",{className:"min-w-0",children:H.filter($=>$.title===P).map($=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:$.title}),$.description?l.jsx(ht,{children:$.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:$.fields.map(Z=>l.jsx("div",{className:Z.type==="textarea"||Z.type==="stringList"?"sm:col-span-2":"",children:l.jsx(zg,{field:Z,value:fo(o,Z.path),readOnly:a,onChange:J=>Q(Z.path,J)})},Z.path))})]},$.title))})]}):null]})}const f$=Ne.listConfigs(),m$={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function p$(){var T,R;const{permissions:e,canViewConfig:n}=Lt(),{files:a}=t2(),[o,i]=$u(),c=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>f$.filter(D=>n(D)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),h=f.useMemo(()=>[...m,...p.map(D=>Gi(D))],[m,p]),y=h[0]??"",[v,x]=f.useState(()=>c&&h.includes(c)?c:y);if(f.useEffect(()=>{c&&h.includes(c)?x(c):h.includes(v)||(x(y),y&&i({file:y}))},[c,h,v,y,i]),h.length===0)return l.jsx(Lr,{to:Bh(e),replace:!0});const S=S8(v),j=(S==null?void 0:S.type)==="addon",C=j?S.file:null,N=j?n2(C):m$[v]??"Configuration",E=j?!!((T=e==null?void 0:e.configs.supportbot)!=null&&T.edit):e?!!((R=e.configs[v])!=null&&R.edit):!1,k=j?C:`${v}.yml`;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:N}),l.jsx("p",{className:"text-muted-foreground",children:E?`Edit ${k} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${k} — you do not have permission to save changes.`})]}),l.jsx("div",{className:"mt-6",children:j&&C?l.jsx(qP,{filename:C},C):l.jsx(d$,{configFile:v},v)})]})}const h$={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function g$(e){return e?h$[e]||"Sign-in failed. Please try again.":""}function v$(){const{branding:e}=Fu(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Lt(),[i]=$u(),c=f.useMemo(()=>g$(i.get("error")),[i]);return!a&&n?l.jsx(Lr,{to:"/",replace:!0}):l.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:l.jsxs(Ge,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[l.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),l.jsxs(Ze,{className:"space-y-6 pt-10 pb-4 text-center",children:[l.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:l.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),l.jsxs("div",{children:[l.jsx(Qe,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:e.title||"SupportBot"}),l.jsx(ht,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),l.jsxs(Fe,{className:"space-y-6 pb-10",children:[l.jsxs("div",{className:"text-center space-y-1",children:[l.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),l.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",l.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),c?l.jsx(Ye,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:l.jsx(We,{className:"font-medium",children:c})}):null,l.jsxs(ve,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[l.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),l.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[l.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:l.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const bs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:Dh},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:u8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:Xx},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:Vu},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:Pp},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:Xx}];function b$(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function y$({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:i}){return l.jsx("div",{className:"min-h-svh bg-background",children:l.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[l.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?l.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):l.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:l.jsx(ye,{icon:Dh,size:24})}),l.jsxs("div",{children:[l.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),l.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),i]})})}function x$({currentIndex:e,validation:n}){const a=(e+1)/bs.length*100;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[l.jsxs("span",{children:["Step ",e+1," of ",bs.length]}),l.jsxs("span",{children:[Math.round(a),"%"]})]}),l.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:l.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),l.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:bs.map((o,i)=>{var h;const c=b$(o.id),d=(h=n[c])==null?void 0:h.ok,m=i===e,p=il.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx(ye,{icon:Bu,size:14}),o.globalName||o.username,l.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?l.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:e.error})}):null}function w$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",l.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",l.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"botToken",children:"Bot token"}),l.jsx(Ue,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:c=>n({...e,botToken:c.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.botToken}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:i,children:o?"Checking with Discord…":"Verify bot token"})})]})}function C$({values:e,setValues:n,validation:a,validating:o,onValidate:i,onGenerate:c}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"secretKey",children:"Session secret"}),l.jsx(Ue,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.secretKey}),l.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[l.jsx(ve,{type:"button",variant:"outline",onClick:c,children:"Generate secure secret"}),l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:i,children:o?"Checking…":"Validate"})]})]})}function j$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",l.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{htmlFor:"clientId",children:"Client ID"}),l.jsx(Ue,{id:"clientId",value:e.clientId,onChange:c=>n({...e,clientId:c.target.value}),className:"h-11 font-mono text-sm"})]}),l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{htmlFor:"clientSecret",children:"Client Secret"}),l.jsx(Ue,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:c=>n({...e,clientSecret:c.target.value}),className:"h-11 font-mono text-sm"})]})]}),l.jsx(Us,{result:a.oauth}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:i,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function E$({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",l.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"redirectUri",children:"Redirect URI"}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(Ue,{id:"redirectUri",value:e.redirectUri,onChange:i=>n({...e,redirectUri:i.target.value}),className:"h-11 flex-1 font-mono text-xs"}),l.jsx(ve,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:l.jsx(ye,{icon:Y0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?l.jsx(Us,{result:a.redirectUri}):l.jsx(Ye,{className:"border-border bg-secondary",children:l.jsx(We,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function N$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",l.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",l.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"owners",children:"Owner user IDs"}),l.jsx(Cd,{id:"owners",value:e.ownerUserIds,onChange:c=>n({...e,ownerUserIds:c.target.value}),placeholder:`829112572816130058 -987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),l.jsx(Us,{result:a.owners}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:i,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function k$({onContinue:e}){return l.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:l.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[l.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:l.jsx(ye,{icon:Bu,size:40})}),l.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),l.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",l.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),l.jsx(Ye,{className:"mt-6 text-left",children:l.jsx(We,{children:"After restarting, sign in with Discord to open the dashboard."})}),l.jsx(ve,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function T$({currentIndex:e,validating:n,saving:a,onBack:o,onNext:i,onFinish:c}){const d=e===bs.length-1;return l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[l.jsxs(ve,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[l.jsx(ye,{icon:G0,size:18,className:"mr-1"}),"Back"]}),l.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?l.jsx(ve,{type:"button",size:"lg",disabled:a||n,onClick:c,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):l.jsxs(ve,{type:"button",size:"lg",disabled:n||a,onClick:i,children:["Continue",l.jsx(ye,{icon:Oh,size:18,className:"ml-1"})]})})]})}function R$({values:e,setValues:n,validation:a,validating:o,onValidate:i}){return l.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[l.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",l.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),l.jsx(Ue,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:e.emeraldApiKey,onChange:c=>n({...e,emeraldApiKey:c.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),l.jsx(Us,{result:a.emeraldApi}),l.jsx("div",{className:"mt-auto",children:l.jsx(ve,{type:"button",variant:"secondary",disabled:o,onClick:i,children:o?"Checking…":e.emeraldApiKey?"Verify key":"Skip step"})})]})}function A$(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function M$(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function v0(e){return e==="oauth"?"oauth":e==="owners"?"owners":e==="emeraldApi"?"emeraldApi":e}function _$(){const e=mo(),{branding:n}=Fu(),{loading:a,error:o,refresh:i,status:c}=GC(),[d,m]=f.useState(0),[p,h]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,T]=f.useState(!1),R=bs[d];f.useEffect(()=>{c!=null&&c.suggestedRedirectUri&&!p.redirectUri&&h(Q=>({...Q,redirectUri:c.suggestedRedirectUri}))},[c==null?void 0:c.suggestedRedirectUri,p.redirectUri]);const D=f.useMemo(()=>({botToken:p.botToken,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:M$(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function P(){S(!0),E("");try{const Q=await Ne.validateSetup(D);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function z(){var de,he;const Q=v0(R.id),fe=await P();return!!((he=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&he.ok)}async function B(){const Q=v0(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await z()||m(de=>Math.min(de+1,bs.length-1))}async function H(){C(!0),E("");try{const Q=await P();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await Ne.completeSetup(D),T(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Y(){const Q={values:p,setValues:h,validation:y,validating:x};switch(R.id){case"botToken":return l.jsx(w$,{...Q,onValidate:()=>void z()});case"secretKey":return l.jsx(C$,{...Q,onGenerate:()=>h(fe=>({...fe,secretKey:A$()})),onValidate:()=>void z()});case"oauth":return l.jsx(j$,{...Q,onValidate:()=>void z()});case"redirectUri":return l.jsx(E$,{values:p,setValues:h,validation:y});case"owners":return l.jsx(N$,{...Q,onValidate:()=>void z()});case"emeraldApi":return l.jsx(R$,{...Q,onValidate:()=>void z()})}}return a?l.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:l.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[l.jsx(Ve,{className:"h-14 w-64"}),l.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[l.jsx(Ve,{className:"hidden h-80 lg:block"}),l.jsx(Ve,{className:"h-[520px] rounded-2xl"})]})]})}):l.jsxs(y$,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?l.jsx(Ye,{variant:"destructive",className:"mb-6",children:l.jsx(We,{children:o})}):null,N?l.jsx(Ye,{variant:"destructive",className:"mb-6",children:l.jsx(We,{children:N})}):null,k?l.jsx(k$,{onContinue:async()=>{await i(),e("/login",{replace:!0})}}):l.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[l.jsx(x$,{currentIndex:d,validation:y}),l.jsx(S$,{step:R,footer:l.jsx(T$,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void B(),onFinish:()=>void H()}),children:Y()})]})]})}const O$={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function D$({title:e,icon:n,href:a,badge:o="Configured",status:i="done"}){return l.jsxs(_t,{to:a,className:ce("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[l.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:l.jsx(ye,{icon:n,size:20})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("p",{className:"truncate font-semibold",children:e}),l.jsx("span",{className:ce("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",O$[i]),children:o})]})]})}function L$({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:i="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),p=d-m/100*d;return l.jsxs("div",{className:ce("relative inline-flex",a),children:[l.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[l.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),l.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:i})]}),l.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[l.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),l.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const z$={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function P$({title:e,subtitle:n,icon:a,href:o,status:i,meta:c="Open in dashboard"}){const d=z$[i];return l.jsxs(_t,{to:o,className:ce("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[l.jsxs("div",{className:"flex items-start justify-between gap-2",children:[l.jsx("span",{className:ce("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),l.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),l.jsxs("div",{children:[l.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),l.jsx("span",{className:ce("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),l.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:l.jsx(ye,{icon:a,size:16})}),l.jsx("span",{className:"text-xs text-muted-foreground",children:c})]}),l.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[l.jsx(ye,{icon:Vu,size:14,className:"opacity-60"}),l.jsx(ye,{icon:no,size:14,className:"opacity-60 group-hover:text-primary"}),l.jsx(ye,{icon:Oh,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function I$({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:Ih(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return l.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[l.jsxs(Qe,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),l.jsx(ve,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:l.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),l.jsxs(Fe,{className:"pt-0",children:[l.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>l.jsxs(Ss,{className:"size-9 border-2 border-card ring-0",children:[l.jsx(ws,{src:e.bot.avatar,alt:""}),l.jsx(Cs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?l.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),l.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),l.jsx(Ge,{className:"overflow-hidden border-border bg-secondary",children:l.jsx(Fe,{className:"p-5",children:l.jsxs("div",{className:"space-y-3",children:[l.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:l.jsx(ye,{icon:c8,size:22})}),l.jsxs("div",{children:[l.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),l.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),l.jsx(ve,{asChild:!0,size:"sm",className:"w-full",children:l.jsxs(_t,{to:"/settings",children:[l.jsx(ye,{icon:Uu,size:16,className:"mr-2"}),"Open settings"]})})]})})}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[l.jsx(Qe,{className:"text-sm font-semibold",children:"System activity"}),l.jsx(ve,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:l.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),l.jsxs(Fe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>l.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[l.jsxs(Ss,{className:"size-9",children:[l.jsx(ws,{src:e.bot.avatar,alt:e.bot.username}),l.jsx(Cs,{className:"bg-secondary text-xs",children:"SB"})]}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),l.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),l.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),l.jsx(ve,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:l.jsxs(_t,{to:"/system",children:["All system details",l.jsx(ye,{icon:Oh,size:14})]})})]})]}),l.jsx(Ge,{className:"border-border bg-card",children:l.jsxs(Fe,{className:"flex items-center gap-3 p-4",children:[l.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:l.jsx(ye,{icon:no,size:18})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),l.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const W5={todo:"Needs setup",progress:"In progress",done:"Active"};function xh(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function $$(){return l.jsxs("div",{className:"flex gap-6",children:[l.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-44 rounded-2xl"}),l.jsx(Ve,{className:"h-44 rounded-2xl"})]}),l.jsx(Ve,{className:"h-8 w-48"}),l.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>l.jsx(Ve,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),l.jsx(Ve,{className:"h-8 w-56"}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>l.jsx(Ve,{className:"h-20 rounded-2xl"},n))})]}),l.jsx(Ve,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function B$(){const{stats:e,loading:n,error:a}=Yu(),[o,i]=f.useState("all"),c=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?fs.filter(y=>y.category==="tickets"):o==="all"?fs:fs.filter(y=>y.category===o),[o]);if(n)return l.jsx($$,{});if(a||!e)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:a||"No stats available"})});const m=e.tickets.open,p=e.tickets.closed,h=e.tickets.total;return l.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[l.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ge,{className:"overflow-hidden border-border bg-card",children:l.jsxs(Fe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[l.jsxs("div",{className:"space-y-3",children:[l.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",l.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),l.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),l.jsx(ve,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:l.jsx(_t,{to:"/transcripts",children:"Review"})})]}),l.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[l.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),l.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),l.jsx(Ge,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:l.jsxs(Fe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[l.jsxs("div",{className:"space-y-3",children:[l.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),l.jsxs("ul",{className:"space-y-1.5 text-sm",children:[l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[h," total"]})]}),l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),l.jsxs("li",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),l.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),l.jsx(L$,{percent:c,size:120})]})})]}),l.jsxs("section",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),l.jsx(v5,{value:o,onValueChange:y=>i(y),children:l.jsxs(Rg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[l.jsx(to,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),l.jsx(to,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),l.jsx(to,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),j_.filter(y=>y.id!=="all").map(y=>l.jsx(to,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),l.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:Qi,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:Bu,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=xh(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>l.jsx(P$,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),l.jsxs("section",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),l.jsx(_t,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:fs.slice(0,4).map(y=>{const v=xh(y.id,e.modules);return l.jsx(D$,{title:y.title,icon:y.icon,href:y.href,badge:W5[v.status],status:v.status},y.id)})})]})]}),l.jsx(I$,{stats:e})]})}function U$(){const{permissions:e}=Lt();return Pn(e,"overview")?l.jsx(B$,{}):l.jsx(Lr,{to:Bh(e),replace:!0})}function va({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:i}=Lt();return a?l.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Pn(i,e)?l.jsx(l.Fragment,{children:n}):l.jsx(Lr,{to:Bh(i),replace:!0}):l.jsx(Lr,{to:"/login",replace:!0})}function H$(){const{hasPermission:e}=Lt(),n=e("settings.update"),a=mo(),[o,i]=f.useState([]),[c,d]=f.useState(""),[m,p]=f.useState(!0),[h,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{p(!0),y("");try{const E=await Ne.getAddonsCatalog();E.data&&(i(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await Ne.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const T=E.configFiles[0];T&&a(`/configs?file=${Gi(T)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),l.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",l.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),l.jsxs(ve,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[l.jsx(ye,{icon:q0,size:16,className:ce("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),h?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:h})}):null,v?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:v})}):null,l.jsxs("section",{className:"space-y-4",children:[l.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[l.jsx(Ve,{className:"h-40 rounded-xl"}),l.jsx(Ve,{className:"h-40 rounded-xl"}),l.jsx(Ve,{className:"h-40 rounded-xl"})]}):l.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-2",children:[l.jsxs("div",{className:"flex items-start justify-between gap-2",children:[l.jsxs(Qe,{className:"flex items-center gap-2 text-lg",children:[l.jsx(ye,{icon:Ph,size:20,className:"text-primary"}),E.name]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx(gs,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:E.price===0||!E.price?"Free":`$${E.price}`}),E.installed?l.jsxs(gs,{variant:"secondary",className:"shrink-0 gap-1",children:[l.jsx(ye,{icon:f8,size:14}),"Installed"]}):null]})]}),l.jsx(ht,{children:E.description})]}),l.jsxs(Fe,{className:"space-y-2 text-xs text-muted-foreground",children:[E.is_external?l.jsxs("p",{children:["Available on: ",l.jsx("span",{className:"font-medium text-foreground",children:E.external_store||"External Store"})]}):null,E.configFiles&&E.configFiles.length>0?l.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,T)=>l.jsxs("span",{children:[T>0?", ":null,l.jsx(_t,{to:`/configs?file=${Gi(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),l.jsxs(Pg,{className:"flex flex-wrap gap-2",children:[E.is_external?l.jsx(ve,{variant:"outline",size:"sm",asChild:!0,children:l.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,E.installed&&E.configFiles&&E.configFiles[0]?l.jsx(ve,{size:"sm",variant:"secondary",asChild:!0,children:l.jsx(_t,{to:`/configs?file=${Gi(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?l.jsx(ve,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):E.is_external?null:l.jsxs(ve,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[l.jsx(ye,{icon:Uu,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function V$(){const{permissions:e}=Lt(),[n,a]=f.useState(!1),[o,i]=f.useState(!1),[c,d]=f.useState(""),[m,p]=f.useState(""),[h,y]=f.useState(""),[v,x]=f.useState("Administrator"),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState("General"),T=X0(e,"supportbot"),R=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Dr.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),i(!1);try{const D=await Ne.buildAddon({name:m.toLowerCase(),description:h||"A custom command",permission:v,embed:{title:S,description:C||"Hello from your custom command!",color:E}});i(!0),d(D.message||"Restart required."),Dr.success(`Addon ${m}.js created successfully!`)}catch(D){Dr.error(D instanceof Error?D.message:"Failed to build addon")}finally{a(!1)}};return T?l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),l.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?l.jsxs(Ye,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[l.jsx(D1,{className:"h-4 w-4"}),l.jsxs(We,{className:"ml-2",children:["Successfully built ",l.jsxs("strong",{children:[m,".js"]}),"! ",c]})]}):null,l.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[l.jsxs("div",{className:"space-y-6",children:[l.jsxs(Ge,{children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Command Details"}),l.jsx(ht,{children:"Configure how users trigger the command."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Command Name"}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"text-muted-foreground",children:"/"}),l.jsx(Ue,{placeholder:"ping",value:m,onChange:D=>p(D.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Description"}),l.jsx(Ue,{placeholder:"Replies with a custom embed",value:h,onChange:D=>y(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Required Permission"}),l.jsxs(Es,{value:v,onValueChange:x,children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsxs(co,{children:[l.jsx(Zt,{value:"none",children:"@everyone"}),l.jsx(Zt,{value:"Administrator",children:"Administrator"}),l.jsx(Zt,{value:"ManageMessages",children:"Manage Messages"}),l.jsx(Zt,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),l.jsxs(Ge,{children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Response Embed"}),l.jsx(ht,{children:"What the bot will reply with."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Title (Optional)"}),l.jsx(Ue,{placeholder:"Hello!",value:S,onChange:D=>j(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Description"}),l.jsx(Cd,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:C,onChange:D=>N(D.target.value)})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Embed Color"}),l.jsxs(Es,{value:E,onValueChange:k,children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsxs(co,{children:[l.jsx(Zt,{value:"General",children:"Theme General"}),l.jsx(Zt,{value:"Success",children:"Theme Success"}),l.jsx(Zt,{value:"Warning",children:"Theme Warning"}),l.jsx(Zt,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),l.jsx("div",{className:"space-y-6",children:l.jsxs(Ge,{className:"sticky top-6 border-primary/20",children:[l.jsx(Ze,{children:l.jsxs(Qe,{className:"text-sm font-medium flex items-center gap-2",children:[l.jsx(ye,{icon:d8,size:16,className:"text-primary"}),"Live Preview"]})}),l.jsx(Fe,{children:l.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:l.jsxs("div",{className:"flex gap-4",children:[l.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),l.jsxs("div",{className:"flex-1 space-y-1",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),l.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[l.jsx(D1,{size:10})," BOT"]}),l.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),l.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[S&&l.jsx("div",{className:"mb-1 font-semibold text-white",children:S}),l.jsx("div",{className:"whitespace-pre-wrap",children:C||"Hello from your custom command!"})]})]})]})})}),l.jsx(Pg,{children:l.jsxs(ve,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:R,children:[l.jsx(ye,{icon:xa,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):l.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const $g="supportbot-dashboard-accent",Ki="#45b46c",G$=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function F$(e){const n=cr(e,Ki),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,i=parseInt(n.slice(5,7),16)/255,c=Math.max(a,o,i),d=Math.min(a,o,i),m=(c+d)/2;let p=0,h=0;if(c!==d){const y=c-d;switch(h=m>.5?y/(2-c-d):y/(c+d),c){case a:p=((o-i)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function X$({canEdit:e}){const[n,a]=f.useState(!1),[o,i]=f.useState(""),[c,d]=f.useState(!1);async function m(){if(e){a(!0),i("");try{const p=await Ne.resetDashboard();i(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){i(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return e?l.jsxs("div",{className:"space-y-4",children:[l.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),l.jsxs(gg,{open:c,onOpenChange:d,children:[l.jsx(s_,{asChild:!0,children:l.jsx(ve,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),l.jsxs(hd,{children:[l.jsxs(gd,{children:[l.jsx(vd,{children:"Are you absolutely sure?"}),l.jsx(bd,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&l.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),l.jsxs(vg,{children:[l.jsx(ve,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),l.jsx(ve,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function Z$({canEdit:e}){const{branding:n,setBrandingLocal:a}=Fu(),o=f.useRef(null),[i,c]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,h]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{c(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){h(!0),S("");try{const T=await Ne.updateBranding({title:i,pageTitle:d});T.data&&a(T.data),S(T.message||"Branding saved.")}catch(T){S(T instanceof Error?T.message:"Save failed")}finally{h(!1)}}}async function N(T){if(!(!e||!T)){v(!0),S("");try{const R=await K$(T),D=await Ne.uploadBrandingFavicon(R);D.data&&a(D.data),S(D.message||"Favicon uploaded.")}catch(R){S(R instanceof Error?R.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const T=await Ne.removeBrandingFavicon();T.data&&a(T.data),S(T.message||"Favicon removed.")}catch(T){S(T instanceof Error?T.message:"Remove failed")}finally{v(!1)}}}const k=i.trim()!==n.title||d.trim()!==n.pageTitle;return l.jsxs("div",{className:"space-y-8",children:[l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"brand-title",children:"Sidebar title"}),l.jsx(Ue,{id:"brand-title",value:i,disabled:!e,maxLength:64,onChange:T=>c(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"brand-page-title",children:"Browser tab title"}),l.jsx(Ue,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),e?l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(ve,{type:"button",disabled:p||!k,onClick:()=>void C(),children:p?"Saving…":"Save titles"}),x&&k?l.jsx("span",{className:"text-xs text-muted-foreground",children:x}):null]}):null]}),l.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[l.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?l.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-2"}):l.jsx(ye,{icon:r8,size:24,className:"text-muted-foreground/50"})}),l.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:T=>{var R;return void N(((R=T.target.files)==null?void 0:R[0])??null)}}),l.jsxs("div",{className:"flex flex-col gap-2",children:[e?l.jsxs("div",{className:"flex gap-2",children:[l.jsx(ve,{type:"button",variant:"secondary",disabled:y,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:y?"Uploading…":"Upload Favicon"}),n.hasFavicon?l.jsx(ve,{type:"button",variant:"destructive",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!k&&x?l.jsx("span",{className:"text-xs text-muted-foreground",children:x}):null]})]})]})]})}function Q$(){var v,x,S,j,C,N,E,k,T,R,D;const{hasPermission:e}=Lt(),n=e("settings.update"),[a,o]=f.useState(!0),[i,c]=f.useState(!1),[d,m]=f.useState(""),[p,h]=f.useState(null);f.useEffect(()=>{Ne.getConfigJson("api").then(P=>{P.data&&h(P.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function y(){var P,z,B,H,Y,Q,fe,de,he,se,O;if(!(!n||!p)){c(!0),m("");try{const $={"api:API.Port":(P=p.API)==null?void 0:P.Port,"api:API.EmeraldAPIKey":(z=p.API)==null?void 0:z.EmeraldAPIKey,"api:API.TrustProxy":(B=p.API)==null?void 0:B.TrustProxy,"api:API.OAuth.Enabled":(Y=(H=p.API)==null?void 0:H.OAuth)==null?void 0:Y.Enabled,"api:API.OAuth.ClientId":(fe=(Q=p.API)==null?void 0:Q.OAuth)==null?void 0:fe.ClientId,"api:API.OAuth.ClientSecret":(he=(de=p.API)==null?void 0:de.OAuth)==null?void 0:he.ClientSecret,"api:API.OAuth.RedirectUri":(O=(se=p.API)==null?void 0:se.OAuth)==null?void 0:O.RedirectUri};await Ne.updateConfigFields($),m("API settings saved and backend restarted.")}catch($){m($ instanceof Error?$.message:"Save failed")}finally{c(!1)}}}return a?l.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?l.jsxs("div",{className:"space-y-8",children:[l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"API Port"}),l.jsx(Ue,{type:"number",value:((v=p.API)==null?void 0:v.Port)||"",disabled:!n,onChange:P=>h({...p,API:{...p.API,Port:parseInt(P.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Emerald API Key"}),l.jsx(Ue,{type:"password",value:((x=p.API)==null?void 0:x.EmeraldAPIKey)||"",disabled:!n,onChange:P=>h({...p,API:{...p.API,EmeraldAPIKey:P.target.value}}),className:"border-border bg-secondary/30"})]})]}),l.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[l.jsx(dn,{checked:((S=p.API)==null?void 0:S.TrustProxy)||!1,disabled:!n,onCheckedChange:P=>h({...p,API:{...p.API,TrustProxy:P}})}),l.jsx(De,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),l.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[l.jsxs("div",{children:[l.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),l.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),l.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[l.jsx(dn,{checked:((C=(j=p.API)==null?void 0:j.OAuth)==null?void 0:C.Enabled)||!1,disabled:!n,onCheckedChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,Enabled:P}}})}}),l.jsx(De,{className:"text-sm",children:"Enable OAuth"})]}),l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Client ID"}),l.jsx(Ue,{value:((E=(N=p.API)==null?void 0:N.OAuth)==null?void 0:E.ClientId)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientId:P.target.value}}})},className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Client Secret"}),l.jsx(Ue,{type:"password",value:((T=(k=p.API)==null?void 0:k.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientSecret:P.target.value}}})},className:"border-border bg-secondary/30"})]}),l.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[l.jsx(De,{children:"Redirect URI"}),l.jsx(Ue,{value:((D=(R=p.API)==null?void 0:R.OAuth)==null?void 0:D.RedirectUri)||"",disabled:!n,onChange:P=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,RedirectUri:P.target.value}}})},className:"border-border bg-secondary/30"}),l.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?l.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[l.jsx(ve,{type:"button",disabled:i,onClick:()=>void y(),children:i?"Saving…":"Save API Config"}),d?l.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function J$(){const{hasPermission:e}=Lt(),n=e("settings.update"),[a,o]=f.useState(null),[i,c]=f.useState(!0),[d,m]=f.useState(!1),[p,h]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>K5()??Ki),[j,C]=f.useState(""),[N,E]=f.useState("appearance"),k=f.useCallback(async()=>{c(!0),h("");try{const R=await Ne.checkForUpdates();R.data&&o(R.data)}catch(R){h(R instanceof Error?R.message:"Could not check for updates")}finally{c(!1)}},[]);f.useEffect(()=>{k()},[k]);async function T(R){if(R.updateAvailable){m(!0),h(""),v("");try{const D=await Ne.runUpdate(R.id,R.latest,R.zipUrl);v(D.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await k()}catch(D){h(D instanceof Error?D.message:"Update failed")}finally{m(!1)}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),l.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),l.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[l.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:l.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[l.jsx(ve,{variant:N==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("appearance"),children:"Appearance"}),l.jsx(ve,{variant:N==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("api"),children:"API Config"}),l.jsx(ve,{variant:N==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("updates"),children:"Update Checker"}),n&&l.jsx(ve,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${N==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>E("danger"),children:"Danger Zone"})]})}),l.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[N==="appearance"&&l.jsx("div",{className:"space-y-6",children:l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Dashboard appearance"}),l.jsx(ht,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsx(Z$,{canEdit:n}),l.jsxs("div",{className:"border-t border-border pt-4",children:[l.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),l.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),l.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(Ng,{value:x,onChange:R=>{S(R),b0(R),C("Accent updated.")}}),l.jsx(Ue,{id:"accent-colour",value:x,onChange:R=>S(R.target.value),onBlur:()=>{const R=cr(x,Ki);S(R),b0(R),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),l.jsx(ve,{type:"button",variant:"outline",onClick:()=>{W$(),S(Ki),C("Reset to default purple.")},children:"Reset to default"})]}),l.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[l.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),l.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),l.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?l.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]})}),N==="danger"&&n&&l.jsxs(Ge,{className:"border-destructive/50 bg-destructive/5",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg text-destructive",children:"Danger Zone"}),l.jsx(ht,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),l.jsx(Fe,{children:l.jsx(X$,{canEdit:n})})]}),N==="api"&&l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"API Configuration"}),l.jsx(ht,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),l.jsx(Fe,{children:l.jsx(Q$,{})})]}),N==="updates"&&l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Software updates"}),l.jsx(ht,{children:"Manage updates for the bot and dashboard."})]}),l.jsxs(Fe,{className:"space-y-4",children:[i?l.jsx(Ve,{className:"h-24 w-full"}):a&&a.length>0?l.jsx("div",{className:"space-y-4",children:a.map(R=>l.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("p",{className:"font-medium text-sm",children:[l.jsx("a",{href:R.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:R.name})," ","(",R.branch," branch)"]}),l.jsxs("div",{className:"flex gap-x-4 text-sm",children:[l.jsxs("p",{children:[l.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),l.jsxs("span",{className:"font-mono font-medium",children:["v",R.current]})]}),l.jsxs("p",{children:[l.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),l.jsxs("span",{className:"font-mono font-medium",children:["v",R.latest]})]})]})]}),l.jsxs("div",{className:"flex items-center justify-between",children:[R.updateAvailable?l.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):l.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),R.updateAvailable&&n?l.jsxs(ve,{type:"button",size:"sm",onClick:()=>void T(R),disabled:d,children:[d?l.jsx(ye,{icon:q0,size:16,className:"mr-2 animate-spin"}):l.jsx(ye,{icon:Uu,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,R.updateAvailable&&!n?l.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},R.id))}):null,p?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:p})}):null,y?l.jsx(Ye,{children:l.jsx(We,{children:y})}):null,l.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:l.jsxs(ve,{type:"button",variant:"outline",onClick:k,disabled:i||d,children:[l.jsx(ye,{icon:_s,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return l.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[l.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),l.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const eB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function tB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function nB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Yu(),[i,c]=f.useState(null),[d,m]=f.useState(null),[p,h]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([Ne.getGuildStatus().catch(()=>null),Ne.health().catch(()=>null)]);j!=null&&j.data&&c(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){h(!0);try{await Promise.all([o(),y()])}finally{h(!1)}}if(n&&!e)return l.jsxs("div",{className:"space-y-6",children:[l.jsx(Ve,{className:"h-10 w-64"}),l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-56 rounded-2xl"}),l.jsx(Ve,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(ve,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:l.jsxs(_t,{to:"/",children:[l.jsx(ye,{icon:G0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),l.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),l.jsxs(ve,{type:"button",variant:"outline",disabled:p,onClick:()=>void v(),children:[l.jsx(ye,{icon:_s,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Discord bot"}),l.jsx(ht,{children:"Connection and identity"})]}),l.jsxs(Fe,{children:[l.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[l.jsxs(Ss,{className:"size-12",children:[l.jsx(ws,{src:e.bot.avatar,alt:e.bot.username}),l.jsx(Cs,{children:"SB"})]}),l.jsxs("div",{children:[l.jsx("p",{className:"font-semibold",children:e.bot.username}),l.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),l.jsxs("dl",{children:[l.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),l.jsx(pt,{label:"Gateway latency",value:l.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),l.jsx(pt,{label:"Process uptime",value:Ih(e.bot.uptime)}),l.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),l.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?l.jsx(pt,{label:"Invite link",value:l.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Host machine"}),l.jsx(ht,{children:"Server resources running this instance"})]}),l.jsx(Fe,{children:l.jsxs("dl",{children:[l.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),l.jsx(pt,{label:"Memory usage",value:l.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),l.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),l.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Tickets"}),l.jsx(ht,{children:"Database snapshot"})]}),l.jsx(Fe,{children:l.jsxs("dl",{children:[l.jsx(pt,{label:"Total tickets",value:e.tickets.total}),l.jsx(pt,{label:"Open",value:l.jsx("span",{className:"text-primary",children:e.tickets.open})}),l.jsx(pt,{label:"Closed",value:e.tickets.closed}),l.jsx(pt,{label:"Transcripts",value:l.jsx(_t,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Guild health"}),l.jsx(ht,{children:"Configured server and membership"})]}),l.jsx(Fe,{children:i?l.jsxs("dl",{children:[l.jsx(pt,{label:"Status",value:l.jsx("span",{className:tB(i.status),children:eB[i.status]})}),l.jsx(pt,{label:"Configured guild ID",value:i.configuredGuildId||"Not set",mono:!0}),i.configuredGuild?l.jsx(pt,{label:"Configured server",value:`${i.configuredGuild.name} (${((S=i.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,i.message?l.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:i.message}):null,i.extraGuilds.length>0?l.jsxs("div",{className:"mt-3 space-y-2",children:[l.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),l.jsx("ul",{className:"space-y-1 text-sm",children:i.extraGuilds.map(j=>l.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):l.jsx(Ve,{className:"h-24 w-full"})})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Dashboard services"}),l.jsx(ht,{children:"API and authentication"})]}),l.jsx(Fe,{children:d?l.jsxs("dl",{className:"max-w-xl",children:[l.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),l.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),l.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),l.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),l.jsx(pt,{label:"Software updates",value:l.jsx(_t,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),l.jsx(pt,{label:"Logs",value:l.jsx(_t,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):l.jsx(Ve,{className:"h-32 w-full max-w-xl"})})]}),e.modules?l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-lg",children:"Module setup status"}),l.jsx(ht,{children:"Which features are configured and active"})]}),l.jsx(Fe,{children:l.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:fs.map(j=>{const C=xh(j.id,e.modules);return l.jsxs(_t,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("p",{className:"text-sm font-medium",children:j.title}),l.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),l.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:W5[C.status]})]},j.id)})})})]}):null]})}function rB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const aB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],oB=["Output","Warn","Error"],sB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},iB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},y0=2e3,lB=2e3;function Sh(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function cB(e,n,a){const o=a?[]:e,i=new Set(o.map((m,p)=>Sh(m,p))),c=[];for(let m=0;my0?d.slice(d.length-y0):d}function uB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[i,c]=f.useState(""),[d,m]=f.useState(!1),[p,h]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),T=f.useRef(null),R=f.useRef(d);R.current=d;const D=f.useMemo(()=>y==="all"?oB:[y],[y]),P=f.useCallback(async H=>{var fe,de;const Y=await Ne.getLogs({types:D,cursor:H?void 0:k.current??void 0,tail:H?500:0}),Q=((fe=Y.data)==null?void 0:fe.entries)??[];return k.current=((de=Y.data)==null?void 0:de.cursor)??{},n(he=>cB(he,Q,H)),Q.length},[D]),z=f.useCallback(async()=>{var H;o(!0),c(""),k.current=null;try{const fe=(((H=(await Ne.getLogsMeta()).data)==null?void 0:H.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await P(!0),C(!0)}catch(Y){c(Y instanceof Error?Y.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[P]);f.useEffect(()=>{z()},[z]),f.useEffect(()=>{if(d||a)return;const H=window.setInterval(async()=>{if(!R.current)try{await P(!1),C(!0),c("")}catch(Y){C(!1),c(Y instanceof Error?Y.message:"Live update failed")}},lB);return()=>window.clearInterval(H)},[d,a,P]),f.useEffect(()=>{if(!p||d)return;const H=T.current;H&&(H.scrollTop=H.scrollHeight)},[e,p,d]);const B=f.useMemo(()=>e.filter(H=>{var Q;if(y!=="all"&&H.type!==y)return!1;if(!x.trim())return!0;const Y=x.toLowerCase();return H.message.toLowerCase().includes(Y)||(((Q=H.timestamp)==null?void 0:Q.toLowerCase().includes(Y))??!1)}),[e,y,x]);return l.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),l.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?l.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:ce("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),l.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),i?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:i})}):null,l.jsxs(Ge,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[l.jsxs(Ze,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[l.jsxs(Qe,{className:"text-base font-medium",children:["Console",a?null:l.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[B.length," line",B.length===1?"":"s"]})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[l.jsx(dn,{id:"auto-scroll",checked:p,onCheckedChange:h}),l.jsx(De,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>m(H=>!H),children:[l.jsx(ye,{icon:d?l8:i8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),z()},disabled:a,children:[l.jsx(ye,{icon:_s,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),l.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[l.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:aB.map(H=>l.jsx(ve,{type:"button",variant:y===H.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(H.id),children:H.label},H.id))}),l.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[l.jsx(ye,{icon:Gu,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Filter lines…",value:x,onChange:H=>S(H.target.value),className:"h-9 pl-9"})]})]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-0",children:a?l.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((H,Y)=>l.jsx(Ve,{className:"h-4 w-full"},Y))}):l.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:B.length===0?l.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):l.jsx("ul",{className:"space-y-1",children:B.map((H,Y)=>l.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[l.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:rB(H.timestamp)}),l.jsx("span",{className:ce("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",iB[H.type]),children:H.type}),l.jsx("span",{className:ce("min-w-0 flex-1 whitespace-pre-wrap break-words",sB[H.type]),children:H.message||" "})]},Sh(H,Y)))})})})]})]})}const dB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],fB=450;function mB(e,n){return n&&e!=="viewer"}function pB(){const{user:e,hasPermission:n}=Lt(),a=!mB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),T=f.useRef(null),R=f.useCallback(async()=>{var H;p(!0),x(""),j("");try{const Q=(await Ne.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:r5((H=Q.Typography)==null?void 0:H.FontFamily)}};i(fe),d(structuredClone(fe))}}catch(Y){x(Y instanceof Error?Y.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{R()},[R]);const D=f.useCallback(async H=>{k(!0);try{const Y=await Ne.previewTranscriptTemplate(H);N(Y)}catch{N("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{D(o)},fB),()=>{T.current&&clearTimeout(T.current)}},[o,D]);function P(H,Y){i(Q=>Q&&il(Q,H,Y))}async function z(){if(!(a||!o)){y(!0),x(""),j("");try{const H=await Ne.saveTranscriptTemplate(o);j(H.message||"Saved."),d(structuredClone(o))}catch(H){x(H instanceof Error?H.message:"Save failed")}finally{y(!1)}}}const B=o&&c&&JSON.stringify(o)!==JSON.stringify(c);return m?l.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[l.jsx(Ve,{className:"h-96 rounded-xl"}),l.jsx(Ve,{className:"h-96 rounded-xl"})]}):o?l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[l.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),l.jsxs("div",{className:"flex items-center gap-2",children:[B?l.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?l.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):l.jsxs(ve,{size:"sm",onClick:z,disabled:h||!B,children:[l.jsx(ye,{icon:Hu,size:16,className:"mr-1.5"}),h?"Saving…":"Save appearance"]})]})]}),v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,S?l.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:l.jsx(We,{children:S})}):null,l.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[l.jsx(hB,{data:o,readOnly:a,onPatch:P}),l.jsxs(Ge,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[l.jsxs(Ze,{className:"pb-2",children:[l.jsx(Qe,{className:"text-base",children:"Live preview"}),l.jsxs(ht,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-4 pt-0",children:l.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ce("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v||"Failed to load template"})})}function hB({data:e,readOnly:n,onPatch:a}){return l.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:dB.map(o=>l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{className:"pb-3",children:[l.jsx(Qe,{className:"text-base",children:o.title}),o.description?l.jsx(ht,{children:o.description}):null]}),l.jsx(Fe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(i=>l.jsx("div",{className:i.type==="textarea"?"sm:col-span-2":"",children:l.jsx(zg,{field:i,value:fo(e,i.path),readOnly:n,onChange:c=>a(i.path,c)})},i.path))})]},o.title))})}function gB(e,n){return n&&e!=="viewer"}function vB(){const{user:e,hasPermission:n}=Lt(),a=!gB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState(null),[c,d]=f.useState(!0),[m,p]=f.useState(!1),[h,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,T,R;d(!0),x(""),j("");try{const P=(await Ne.getTranscriptSettings()).data;P&&i({autoDelete:{enabled:!!((k=P.autoDelete)!=null&&k.enabled),afterDays:((T=P.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((R=P.publicAccess)!=null&&R.enabled)}})}catch(D){x(D instanceof Error?D.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){p(!0),x(""),j("");try{const k=await Ne.updateTranscriptSettings(o);k.data&&i({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{p(!1)}}}async function E(){var k,T;if(!a){y(!0),x(""),j("");try{const R=await Ne.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((T=R.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return c?l.jsxs("div",{className:"space-y-4",children:[l.jsx(Ve,{className:"h-40 w-full rounded-xl"}),l.jsx(Ve,{className:"h-40 w-full rounded-xl"})]}):o?l.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?l.jsx(Ye,{children:l.jsx(We,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,S?l.jsx(Ye,{children:l.jsx(We,{children:S})}):null,l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Auto-delete"}),l.jsx(ht,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),l.jsxs(Fe,{className:"space-y-4",children:[l.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[l.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>i(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:k.target.checked}})}),l.jsxs("span",{className:"text-sm",children:[l.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),l.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),l.jsx(Ue,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>i(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),l.jsxs(ve,{type:"button",variant:"outline",size:"sm",disabled:a||h,onClick:()=>void E(),children:[l.jsx(ye,{icon:_s,size:16,className:ce(h&&"animate-spin")}),"Run cleanup now"]})]})]}),l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Public transcripts"}),l.jsxs(ht,{children:["When enabled, anyone with the link can view a transcript at"," ",l.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),l.jsx(Fe,{children:l.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[l.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>i(T=>T&&{...T,publicAccess:{enabled:k.target.checked}})}),l.jsxs("span",{className:"text-sm",children:[l.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),l.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:l.jsxs(ve,{type:"button",disabled:m,onClick:()=>void N(),children:[l.jsx(ye,{icon:Hu,size:16}),m?"Saving…":"Save settings"]})]}):l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:"Could not load transcript settings."})})}function bB(e,n){return n&&e!=="viewer"}function x0(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function S0(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function yB(){var U;const{user:e,hasPermission:n}=Lt(),a=bB(e==null?void 0:e.role,n("transcripts")),[o,i]=f.useState("browse"),[c,d]=f.useState([]),[m,p]=f.useState(null),[h,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[T,R]=f.useState(!1),[D,P]=f.useState(!1),[z,B]=f.useState(!1),[H,Y]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const F=(await Ne.listTranscripts()).data??[];d(F),p(ae=>{var ne;return ae&&F.some(me=>me.id===ae)?ae:((ne=F[0])==null?void 0:ne.id)??null})}catch(V){j(V instanceof Error?V.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&Ne.getTranscriptSettings().then(V=>{var F,ae;B(!!((ae=(F=V.data)==null?void 0:F.publicAccess)!=null&&ae.enabled))}).catch(()=>B(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return c;const V=C.toLowerCase();return c.filter(F=>F.id.includes(V)||F.filename.toLowerCase().includes(V)||F.ticketName&&F.ticketName.toLowerCase().includes(V))},[c,C]),de=f.useMemo(()=>c.find(V=>V.id===m)??null,[c,m]),he=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,O=m&&z?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function $(V){x(""),p(V),k(F=>F+1)}function Z(){he&&window.open(he,"_blank","noopener,noreferrer")}function J(){O&&window.open(O,"_blank","noopener,noreferrer")}async function te(){if(O)try{await navigator.clipboard.writeText(O),Y(!0),window.setTimeout(()=>Y(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function M(){var F;if(!m||!a)return;const V=((F=de==null?void 0:de.ticketName)==null?void 0:F.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${V}? This cannot be undone.`)){P(!0),x("");try{await Ne.deleteTranscript(m),await Q()}catch(ae){x(ae instanceof Error?ae.message:"Failed to delete transcript")}finally{P(!1)}}}async function _(){if(!(!se||!de)){R(!0),x("");try{const V=await fetch(se,{credentials:"include"});if(!V.ok){const me=await V.json().catch(()=>({}));throw new Error(me.error||`Download failed (${V.status})`)}const F=await V.blob(),ae=URL.createObjectURL(F),ne=document.createElement("a");ne.href=ae,ne.download=de.filename,ne.click(),URL.revokeObjectURL(ae)}catch(V){x(V instanceof Error?V.message:"Failed to download transcript")}finally{R(!1)}}}return l.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),l.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsx(ve,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("browse"),children:"Library"}),l.jsx(ve,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("appearance"),children:"Appearance"}),l.jsx(ve,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>i("settings"),children:"Settings"})]}),o==="browse"?l.jsxs(ve,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:h,children:[l.jsx(ye,{icon:_s,size:16,className:ce(h&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?l.jsx(pB,{}):o==="settings"?l.jsx(vB,{}):l.jsxs(l.Fragment,{children:[S?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:S})}):null,l.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[l.jsxs(Ge,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[l.jsxs(Ze,{className:"space-y-3 pb-3",children:[l.jsxs(Qe,{className:"text-base font-medium",children:["Saved transcripts",!h&&c.length>0?l.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",c.length,")"]}):null]}),l.jsxs("div",{className:"relative",children:[l.jsx(ye,{icon:Gu,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),l.jsx(Ue,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:V=>N(V.target.value),className:"pl-9"})]})]}),l.jsx(Fe,{className:"min-h-0 flex-1 p-0 pb-4",children:l.jsx(Sd,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:h?l.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((V,F)=>l.jsx(Ve,{className:"h-16 w-full rounded-lg"},F))}):fe.length===0?l.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[l.jsx(ye,{icon:Zi,size:32,className:"opacity-40"}),l.jsx("p",{children:c.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):l.jsx("ul",{className:"space-y-1.5",children:fe.map(V=>{var ne;const F=V.id===m,ae=((ne=V.ticketName)==null?void 0:ne.trim())||`Channel ${V.id}`;return l.jsx("li",{children:l.jsxs("button",{type:"button",onClick:()=>$(V.id),className:ce("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",F?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[l.jsx("p",{className:"truncate text-sm font-medium",children:ae}),l.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[S0(V.createdAt),V.size!=null?` · ${x0(V.size)}`:""]})]})},V.id)})})})})]}),l.jsxs(Ge,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[l.jsxs(Ze,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx(Qe,{className:"truncate text-base font-medium",children:de?((U=de.ticketName)==null?void 0:U.trim())||`Channel ${de.id}`:"Preview"}),de?l.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[S0(de.createdAt),de.size!=null?` · ${x0(de.size)}`:""]}):null]}),l.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[O?l.jsxs(l.Fragment,{children:[l.jsxs(ve,{variant:"outline",size:"sm",onClick:()=>void te(),children:[l.jsx(ye,{icon:Y0,size:16}),H?"Copied":"Copy link"]}),l.jsxs(ve,{variant:"outline",size:"sm",onClick:J,children:[l.jsx(ye,{icon:Vu,size:16}),"Public page"]})]}):null,l.jsxs(ve,{variant:"outline",size:"sm",disabled:!he,onClick:Z,children:[l.jsx(ye,{icon:J4,size:16}),"Open tab"]}),l.jsxs(ve,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void _(),children:[l.jsx(ye,{icon:Uu,size:16}),T?"Saving…":"Download"]}),a?l.jsxs(ve,{variant:"outline",size:"sm",disabled:!m||D,className:"text-destructive hover:text-destructive",onClick:()=>void M(),children:[l.jsx(ye,{icon:Lh,size:16}),D?"Deleting…":"Delete"]}):null]})]}),l.jsxs(Fe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:v})}):null,de&&he?l.jsx("iframe",{title:`Transcript ${de.id}`,src:he,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):l.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[l.jsx(ye,{icon:Zi,size:40,className:"opacity-30"}),l.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function xB(){const[e,n]=f.useState([]),[a,o]=f.useState(""),[i,c]=f.useState(!0),[d,m]=f.useState(""),p=f.useCallback(async()=>{c(!0),m("");try{const y=await Ne.listOpenTickets();y.data&&(o(y.data.guildId),n(y.data.tickets.sort((v,x)=>x.created_at-v.created_at)))}catch(y){m(y instanceof Error?y.message:"Failed to load open tickets")}finally{c(!1)}},[]);f.useEffect(()=>{p()},[p]);const h=y=>{const v=Math.floor((Date.now()-y)/1e3);return Ih(v)};return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),l.jsx("p",{className:"text-muted-foreground",children:"View live tickets currently active in Discord."})]}),l.jsxs(ve,{onClick:()=>void p(),disabled:i,variant:"outline",size:"sm",children:[l.jsx(ye,{icon:_s,size:16,className:i?"animate-spin mr-2":"mr-2"}),"Refresh"]})]}),l.jsx(Ge,{className:"border-border bg-card",children:l.jsx(Fe,{className:"p-0",children:i?l.jsxs("div",{className:"space-y-4 p-6",children:[l.jsx(Ve,{className:"h-12 w-full"}),l.jsx(Ve,{className:"h-12 w-full"}),l.jsx(Ve,{className:"h-12 w-full"})]}):d?l.jsx("div",{className:"p-6",children:l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:d})})}):e.length===0?l.jsx("div",{className:"p-12 text-center text-muted-foreground",children:"No open tickets at the moment!"}):l.jsx("div",{className:"divide-y divide-border",children:e.map(y=>l.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[l.jsxs("div",{className:"space-y-1",children:[l.jsxs("p",{className:"font-medium text-primary",children:[y.subject||"Untitled Ticket",l.jsxs("span",{className:"ml-2 text-xs font-mono text-muted-foreground",children:["#",y.ticket_id]})]}),l.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",y.user_id," • Dept: ",y.department," • Priority: ",y.priority]})]}),l.jsxs("div",{className:"flex items-center gap-4",children:[l.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap",children:[l.jsx(ye,{icon:t8,size:14,className:"mr-1.5"}),h(y.created_at)]}),a&&l.jsx(ve,{variant:"secondary",size:"sm",asChild:!0,children:l.jsxs("a",{href:`https://discord.com/channels/${a}/${y.ticket_id}`,target:"_blank",rel:"noreferrer",children:[l.jsx(ye,{icon:Vu,size:16,className:"mr-2"}),"View"]})})]})]},y.ticket_id))})})})]})}const SB=["admin","moderator","editor","viewer","custom"];function wB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Ji("viewer"),yamlOwner:!1}}function CB({permissions:e,onChange:n,disabled:a}){const o=i=>n({...e,...i});return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([i,c])=>l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:i}),l.jsx(dn,{checked:e[c],disabled:a,onCheckedChange:d=>o({[c]:d})})]},c)),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Settings — view"}),l.jsx(dn,{checked:e.settings.view,disabled:a,onCheckedChange:i=>o({settings:{...e.settings,view:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Settings — install updates"}),l.jsx(dn,{checked:e.settings.update,disabled:a,onCheckedChange:i=>o({settings:{...e.settings,update:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Users — view"}),l.jsx(dn,{checked:e.users.view,disabled:a,onCheckedChange:i=>o({users:{...e.users,view:i}})})]}),l.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Users — manage"}),l.jsx(dn,{checked:e.users.manage,disabled:a,onCheckedChange:i=>o({users:{...e.users,manage:i}})})]})]}),l.jsxs("div",{className:"space-y-3",children:[l.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),l.jsx("div",{className:"space-y-2",children:$h.map(i=>l.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:h8[i]}),l.jsxs("div",{className:"flex items-center gap-4",children:[l.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",l.jsx(dn,{checked:e.configs[i].view,disabled:a,onCheckedChange:c=>n({...e,configs:{...e.configs,[i]:{...e.configs[i],view:c}}})})]}),l.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",l.jsx(dn,{checked:e.configs[i].edit,disabled:a,onCheckedChange:c=>n({...e,configs:{...e.configs,[i]:{...e.configs[i],edit:c,view:c?!0:e.configs[i].view}}})})]})]})]},i))})]})]})}function jB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function EB(){const{user:e,hasPermission:n}=Lt(),a=n("users.manage"),[o,i]=f.useState([]),[c,d]=f.useState(!0),[m,p]=f.useState(""),[h,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),p("");try{const R=await Ne.listDashboardUsers();R.data&&i(R.data.users)}catch(R){p(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,D)=>R.yamlOwner!==D.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(D.username||D.id)),[o]);function C(){y(wB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Ji(R.role),yamlOwner:R.yamlOwner})}function E(R){h&&y({...h,role:R,permissions:Ji(R,h.permissions)})}async function k(){if(!(!h||!a)){x(!0),p("");try{h.mode==="add"?await Ne.addDashboardUser({id:h.id.trim(),role:h.role,username:h.username||void 0,globalName:h.globalName||void 0,enabled:h.enabled,permissions:h.role==="custom"?h.permissions:void 0}):await Ne.updateDashboardUser(h.id,{role:h.yamlOwner?void 0:h.role,enabled:h.enabled,username:h.username||void 0,globalName:h.globalName||void 0,permissions:h.role==="custom"?h.permissions:void 0}),y(null),await S()}catch(R){p(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function T(R){if(a&&window.confirm("Remove this user from the dashboard?")){p("");try{await Ne.removeDashboardUser(R),await S()}catch(D){p(D instanceof Error?D.message:"Could not remove user")}}}return l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),l.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",l.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?l.jsxs(ve,{onClick:C,children:[l.jsx(ye,{icon:Q4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?l.jsx(Ye,{variant:"destructive",children:l.jsx(We,{children:m})}):null,l.jsxs(Ge,{className:"border-border bg-card",children:[l.jsxs(Ze,{children:[l.jsx(Qe,{className:"text-base",children:"Dashboard access"}),l.jsxs(ht,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),l.jsx(Fe,{children:c?l.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):l.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>l.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[l.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[l.jsxs(Ss,{className:"size-9",children:[l.jsx(ws,{src:R.avatar,alt:R.username}),l.jsx(Cs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),l.jsxs("div",{className:"min-w-0",children:[l.jsxs("p",{className:"truncate font-medium",children:[Z0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),l.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),l.jsx(gs,{variant:"secondary",children:Zx[R.yamlOwner?"owner":R.role]}),l.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:jB(R)}),R.enabled?l.jsx(gs,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):l.jsx(gs,{variant:"outline",children:"Disabled"}),a?l.jsxs("div",{className:"ml-auto flex gap-1",children:[l.jsx(ve,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:l.jsx(ye,{icon:n8,size:16})}),R.yamlOwner?null:l.jsx(ve,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>T(R.id),"aria-label":"Remove user",children:l.jsx(ye,{icon:Lh,size:16})})]}):null]},R.id))})})]}),l.jsx(gg,{open:!!h,onOpenChange:R=>!R&&y(null),children:l.jsxs(hd,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[l.jsxs(gd,{children:[l.jsx(vd,{children:(h==null?void 0:h.mode)==="add"?"Add dashboard user":"Edit user"}),l.jsx(bd,{children:h!=null&&h.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":p8[(h==null?void 0:h.role)??"viewer"]})]}),h?l.jsxs("div",{className:"space-y-4",children:[h.mode==="add"?l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{htmlFor:"discord-id",children:"Discord user ID"}),l.jsx(Ue,{id:"discord-id",value:h.id,onChange:R=>y({...h,id:R.target.value}),placeholder:"829112572816130058"})]}):null,l.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Display name (optional)"}),l.jsx(Ue,{value:h.globalName,onChange:R=>y({...h,globalName:R.target.value})})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Username (optional)"}),l.jsx(Ue,{value:h.username,onChange:R=>y({...h,username:R.target.value})})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(De,{children:"Role"}),l.jsxs(Es,{value:h.role,disabled:h.yamlOwner,onValueChange:R=>E(R),children:[l.jsx(lo,{children:l.jsx(Ns,{})}),l.jsx(co,{children:h.yamlOwner?l.jsx(Zt,{value:"owner",children:"Owner"}):SB.map(R=>l.jsx(Zt,{value:R,children:Zx[R]},R))})]})]}),l.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[l.jsx("span",{className:"text-sm",children:"Account enabled"}),l.jsx(dn,{checked:h.enabled,disabled:h.yamlOwner,onCheckedChange:R=>y({...h,enabled:R})})]}),h.role==="custom"&&!h.yamlOwner?l.jsx(CB,{permissions:h.permissions,onChange:R=>y({...h,permissions:R})}):null]}):null,l.jsxs(vg,{children:[l.jsx(ve,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),l.jsx(ve,{disabled:v||!a||(h==null?void 0:h.mode)==="add"&&!/^\d{17,20}$/.test(h.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function NB({children:e}){const{isAuthenticated:n,loading:a}=Lt();return a?l.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?l.jsx(l.Fragment,{children:e}):l.jsx(Lr,{to:"/login",replace:!0})}function kB(){const{complete:e,loading:n}=GC(),a=jn();return n?l.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?l.jsx(Lr,{to:"/login",replace:!0}):l.jsxs(qx,{children:[l.jsx(Yt,{path:"/login",element:l.jsx(v$,{})}),l.jsxs(Yt,{element:l.jsx(NB,{children:l.jsx(AO,{})}),children:[l.jsx(Yt,{index:!0,element:l.jsx(U$,{})}),l.jsx(Yt,{path:"system",element:l.jsx(va,{permission:"overview",children:l.jsx(nB,{})})}),l.jsx(Yt,{path:"settings",element:l.jsx(va,{permission:"settings.view",children:l.jsx(J$,{})})}),l.jsx(Yt,{path:"configs",element:l.jsx(p$,{})}),l.jsx(Yt,{path:"logs",element:l.jsx(va,{permission:"logs",children:l.jsx(uB,{})})}),l.jsx(Yt,{path:"tickets",element:l.jsx(va,{permission:"transcripts",children:l.jsx(xB,{})})}),l.jsx(Yt,{path:"transcripts",element:l.jsx(va,{permission:"transcripts",children:l.jsx(yB,{})})}),l.jsx(Yt,{path:"users",element:l.jsx(va,{permission:"users.view",children:l.jsx(EB,{})})}),l.jsx(Yt,{path:"addons",element:l.jsx(va,{permission:"settings.view",children:l.jsx(H$,{})})}),l.jsx(Yt,{path:"addons/builder",element:l.jsx(va,{permission:"settings.update",children:l.jsx(V$,{})})})]}),l.jsx(Yt,{path:"*",element:l.jsx(Lr,{to:"/",replace:!0})})]}):l.jsxs(qx,{children:[l.jsx(Yt,{path:"/setup",element:l.jsx(_$,{})}),l.jsx(Yt,{path:"*",element:l.jsx(Lr,{to:"/setup",replace:!0})})]})}function TB({...e}){return l.jsx(WP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}q$();b3.createRoot(document.getElementById("root")).render(l.jsx(f.StrictMode,{children:l.jsx(V4,{children:l.jsx(Ww,{children:l.jsx(y8,{children:l.jsx(MO,{children:l.jsxs(b8,{children:[l.jsx(kB,{}),l.jsx(TB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-BpDEEtaJ.js b/public/dashboard/assets/index-BpDEEtaJ.js new file mode 100644 index 0000000..05bdc74 --- /dev/null +++ b/public/dashboard/assets/index-BpDEEtaJ.js @@ -0,0 +1,206 @@ +var h3=Object.defineProperty;var g3=(e,n,a)=>n in e?h3(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var $b=(e,n,a)=>g3(e,typeof n!="symbol"?n+"":n,a);function x3(e,n){for(var a=0;ao[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const c of l)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(l){const c={};return l.integrity&&(c.integrity=l.integrity),l.referrerPolicy&&(c.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?c.credentials="include":l.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(l){if(l.ep)return;l.ep=!0;const c=a(l);fetch(l.href,c)}})();function A0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Jm={exports:{}},Fi={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Bb;function v3(){if(Bb)return Fi;Bb=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,l,c){var d=null;if(c!==void 0&&(d=""+c),l.key!==void 0&&(d=""+l.key),"key"in l){c={};for(var m in l)m!=="key"&&(c[m]=l[m])}else c=l;return l=c.ref,{$$typeof:e,type:o,key:d,ref:l!==void 0?l:null,props:c}}return Fi.Fragment=n,Fi.jsx=a,Fi.jsxs=a,Fi}var Ub;function b3(){return Ub||(Ub=1,Jm.exports=v3()),Jm.exports}var s=b3(),ep={exports:{}},Pe={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Hb;function y3(){if(Hb)return Pe;Hb=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function w(_){return _===null||typeof _!="object"?null:(_=y&&_[y]||_["@@iterator"],typeof _=="function"?_:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,E={};function N(_,D,G){this.props=_,this.context=D,this.refs=E,this.updater=G||j}N.prototype.isReactComponent={},N.prototype.setState=function(_,D){if(typeof _!="object"&&typeof _!="function"&&_!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,_,D,"setState")},N.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function k(){}k.prototype=N.prototype;function T(_,D,G){this.props=_,this.context=D,this.refs=E,this.updater=G||j}var A=T.prototype=new k;A.constructor=T,S(A,N.prototype),A.isPureReactComponent=!0;var O=Array.isArray;function M(){}var z={H:null,A:null,T:null,S:null},B=Object.prototype.hasOwnProperty;function K(_,D,G){var V=G.ref;return{$$typeof:e,type:_,key:D,ref:V!==void 0?V:null,props:G}}function U(_,D){return K(_.type,D,_.props)}function q(_){return typeof _=="object"&&_!==null&&_.$$typeof===e}function ue(_){var D={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(G){return D[G]})}var pe=/\/+/g;function xe(_,D){return typeof _=="object"&&_!==null&&_.key!=null?ue(""+_.key):D.toString(36)}function se(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(M,M):(_.status="pending",_.then(function(D){_.status==="pending"&&(_.status="fulfilled",_.value=D)},function(D){_.status==="pending"&&(_.status="rejected",_.reason=D)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function L(_,D,G,V,F){var oe=typeof _;(oe==="undefined"||oe==="boolean")&&(_=null);var ae=!1;if(_===null)ae=!0;else switch(oe){case"bigint":case"string":case"number":ae=!0;break;case"object":switch(_.$$typeof){case e:case n:ae=!0;break;case b:return ae=_._init,L(ae(_._payload),D,G,V,F)}}if(ae)return F=F(_),ae=V===""?"."+xe(_,0):V,O(F)?(G="",ae!=null&&(G=ae.replace(pe,"$&/")+"/"),L(F,D,G,"",function(Y){return Y})):F!=null&&(q(F)&&(F=U(F,G+(F.key==null||_&&_.key===F.key?"":(""+F.key).replace(pe,"$&/")+"/")+ae)),D.push(F)),1;ae=0;var be=V===""?".":V+":";if(O(_))for(var ve=0;ve<_.length;ve++)V=_[ve],oe=be+xe(V,ve),ae+=L(V,D,G,oe,F);else if(ve=w(_),typeof ve=="function")for(_=ve.call(_),ve=0;!(V=_.next()).done;)V=V.value,oe=be+xe(V,ve++),ae+=L(V,D,G,oe,F);else if(oe==="object"){if(typeof _.then=="function")return L(se(_),D,G,V,F);throw D=String(_),Error("Objects are not valid as a React child (found: "+(D==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":D)+"). If you meant to render a collection of children, use an array instead.")}return ae}function I(_,D,G){if(_==null)return _;var V=[],F=0;return L(_,V,"","",function(oe){return D.call(G,oe,F++)}),V}function H(_){if(_._status===-1){var D=_._result;D=D(),D.then(function(G){(_._status===0||_._status===-1)&&(_._status=1,_._result=G)},function(G){(_._status===0||_._status===-1)&&(_._status=2,_._result=G)}),_._status===-1&&(_._status=0,_._result=D)}if(_._status===1)return _._result.default;throw _._result}var Z=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var D=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(D))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},te={map:I,forEach:function(_,D,G){I(_,function(){D.apply(this,arguments)},G)},count:function(_){var D=0;return I(_,function(){D++}),D},toArray:function(_){return I(_,function(D){return D})||[]},only:function(_){if(!q(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return Pe.Activity=g,Pe.Children=te,Pe.Component=N,Pe.Fragment=a,Pe.Profiler=l,Pe.PureComponent=T,Pe.StrictMode=o,Pe.Suspense=p,Pe.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=z,Pe.__COMPILER_RUNTIME={__proto__:null,c:function(_){return z.H.useMemoCache(_)}},Pe.cache=function(_){return function(){return _.apply(null,arguments)}},Pe.cacheSignal=function(){return null},Pe.cloneElement=function(_,D,G){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var V=S({},_.props),F=_.key;if(D!=null)for(oe in D.key!==void 0&&(F=""+D.key),D)!B.call(D,oe)||oe==="key"||oe==="__self"||oe==="__source"||oe==="ref"&&D.ref===void 0||(V[oe]=D[oe]);var oe=arguments.length-2;if(oe===1)V.children=G;else if(1>>1,te=L[Z];if(0>>1;Z<_;){var D=2*(Z+1)-1,G=L[D],V=D+1,F=L[V];if(0>l(G,H))Vl(F,G)?(L[Z]=F,L[V]=H,Z=V):(L[Z]=G,L[D]=H,Z=D);else if(Vl(F,H))L[Z]=F,L[V]=H,Z=V;else break e}}return I}function l(L,I){var H=L.sortIndex-I.sortIndex;return H!==0?H:L.id-I.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;e.unstable_now=function(){return c.now()}}else{var d=Date,m=d.now();e.unstable_now=function(){return d.now()-m}}var p=[],h=[],b=1,g=null,y=3,w=!1,j=!1,S=!1,E=!1,N=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function A(L){for(var I=a(h);I!==null;){if(I.callback===null)o(h);else if(I.startTime<=L)o(h),I.sortIndex=I.expirationTime,n(p,I);else break;I=a(h)}}function O(L){if(S=!1,A(L),!j)if(a(p)!==null)j=!0,M||(M=!0,ue());else{var I=a(h);I!==null&&se(O,I.startTime-L)}}var M=!1,z=-1,B=5,K=-1;function U(){return E?!0:!(e.unstable_now()-KL&&U());){var Z=g.callback;if(typeof Z=="function"){g.callback=null,y=g.priorityLevel;var te=Z(g.expirationTime<=L);if(L=e.unstable_now(),typeof te=="function"){g.callback=te,A(L),I=!0;break t}g===a(p)&&o(p),A(L)}else o(p);g=a(p)}if(g!==null)I=!0;else{var _=a(h);_!==null&&se(O,_.startTime-L),I=!1}}break e}finally{g=null,y=H,w=!1}I=void 0}}finally{I?ue():M=!1}}}var ue;if(typeof T=="function")ue=function(){T(q)};else if(typeof MessageChannel<"u"){var pe=new MessageChannel,xe=pe.port2;pe.port1.onmessage=q,ue=function(){xe.postMessage(null)}}else ue=function(){N(q,0)};function se(L,I){z=N(function(){L(e.unstable_now())},I)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(L){L.callback=null},e.unstable_forceFrameRate=function(L){0>L||125Z?(L.sortIndex=H,n(h,L),a(p)===null&&L===a(h)&&(S?(k(z),z=-1):S=!0,se(O,H-Z))):(L.sortIndex=te,n(p,L),j||w||(j=!0,M||(M=!0,ue()))),L},e.unstable_shouldYield=U,e.unstable_wrapCallback=function(L){var I=y;return function(){var H=y;y=I;try{return L.apply(this,arguments)}finally{y=H}}}})(rp)),rp}var Fb;function C3(){return Fb||(Fb=1,np.exports=w3()),np.exports}var ap={exports:{}},ln={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Wb;function S3(){if(Wb)return ln;Wb=1;var e=Ku();function n(p){var h="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),ap.exports=S3(),ap.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var qb;function j3(){if(qb)return Wi;qb=1;var e=C3(),n=Ku(),a=M0();function o(t){var r="https://react.dev/errors/"+t;if(1te||(t.current=Z[te],Z[te]=null,te--)}function G(t,r){te++,Z[te]=t.current,t.current=r}var V=_(null),F=_(null),oe=_(null),ae=_(null);function be(t,r){switch(G(oe,r),G(F,t),G(V,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?lb(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=lb(r),t=cb(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}D(V),G(V,t)}function ve(){D(V),D(F),D(oe)}function Y(t){t.memoizedState!==null&&G(ae,t);var r=V.current,i=cb(r,t.type);r!==i&&(G(F,t),G(V,i))}function le(t){F.current===t&&(D(V),D(F)),ae.current===t&&(D(ae),Ui._currentValue=H)}var ye,Te;function Le(t){if(ye===void 0)try{throw Error()}catch(i){var r=i.stack.trim().match(/\n( *(at )?)/);ye=r&&r[1]||"",Te=-1)":-1x||P[u]!==Q[x]){var ie=` +`+P[u].replace(" at new "," at ");return t.displayName&&ie.includes("")&&(ie=ie.replace("",t.displayName)),ie}while(1<=u&&0<=x);break}}}finally{rt=!1,Error.prepareStackTrace=i}return(i=t?t.displayName||t.name:"")?Le(i):""}function Mt(t,r){switch(t.tag){case 26:case 27:case 5:return Le(t.type);case 16:return Le("Lazy");case 13:return t.child!==r&&r!==null?Le("Suspense Fallback"):Le("Suspense");case 19:return Le("SuspenseList");case 0:case 15:return ht(t.type,!1);case 11:return ht(t.type.render,!1);case 1:return ht(t.type,!0);case 31:return Le("Activity");default:return""}}function Tr(t){try{var r="",i=null;do r+=Mt(t,i),i=t,t=t.return;while(t);return r}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var _t=Object.prototype.hasOwnProperty,Ya=e.unstable_scheduleCallback,qa=e.unstable_cancelCallback,qt=e.unstable_shouldYield,dr=e.unstable_requestPaint,Kt=e.unstable_now,ti=e.unstable_getCurrentPriorityLevel,fr=e.unstable_ImmediatePriority,Lo=e.unstable_UserBlockingPriority,Rr=e.unstable_NormalPriority,Xt=e.unstable_LowPriority,Qn=e.unstable_IdlePriority,zo=e.log,mr=e.unstable_setDisableYieldValue,pr=null,Ht=null;function ee(t){if(typeof zo=="function"&&mr(t),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(pr,t)}catch{}}var re=Math.clz32?Math.clz32:De,ke=Math.log,we=Math.LN2;function De(t){return t>>>=0,t===0?32:31-(ke(t)/we|0)|0}var at=256,ct=262144,mt=4194304;function Zt(t){var r=t&42;if(r!==0)return r;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Me(t,r,i){var u=t.pendingLanes;if(u===0)return 0;var x=0,v=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var R=u&134217727;return R!==0?(u=R&~v,u!==0?x=Zt(u):(C&=R,C!==0?x=Zt(C):i||(i=R&~t,i!==0&&(x=Zt(i))))):(R=u&~v,R!==0?x=Zt(R):C!==0?x=Zt(C):i||(i=u&~t,i!==0&&(x=Zt(i)))),x===0?0:r!==0&&r!==x&&(r&v)===0&&(v=x&-x,i=r&-r,v>=i||v===32&&(i&4194048)!==0)?r:x}function Je(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function St(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function kt(){var t=mt;return mt<<=1,(mt&62914560)===0&&(mt=4194304),t}function Jn(t){for(var r=[],i=0;31>i;i++)r.push(t);return r}function wt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function dn(t,r,i,u,x,v){var C=t.pendingLanes;t.pendingLanes=i,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=i,t.entangledLanes&=i,t.errorRecoveryDisabledLanes&=i,t.shellSuspendCounter=0;var R=t.entanglements,P=t.expirationTimes,Q=t.hiddenUpdates;for(i=C&~i;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var cN=/[\n"\\]/g;function $n(t){return t.replace(cN,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function Wd(t,r,i,u,x,v,C,R){t.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?t.type=C:t.removeAttribute("type"),r!=null?C==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+In(r)):t.value!==""+In(r)&&(t.value=""+In(r)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),r!=null?Yd(t,C,In(r)):i!=null?Yd(t,C,In(i)):u!=null&&t.removeAttribute("value"),x==null&&v!=null&&(t.defaultChecked=!!v),x!=null&&(t.checked=x&&typeof x!="function"&&typeof x!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?t.name=""+In(R):t.removeAttribute("name")}function nx(t,r,i,u,x,v,C,R){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(t.type=v),r!=null||i!=null){if(!(v!=="submit"&&v!=="reset"||r!=null)){Fd(t);return}i=i!=null?""+In(i):"",r=r!=null?""+In(r):i,R||r===t.value||(t.value=r),t.defaultValue=r}u=u??x,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=R?t.checked:!!u,t.defaultChecked=!!u,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C),Fd(t)}function Yd(t,r,i){r==="number"&&Gl(t.ownerDocument)===t||t.defaultValue===""+i||(t.defaultValue=""+i)}function Vo(t,r,i,u){if(t=t.options,r){r={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qd=!1;if(_r)try{var oi={};Object.defineProperty(oi,"passive",{get:function(){Qd=!0}}),window.addEventListener("test",oi,oi),window.removeEventListener("test",oi,oi)}catch{Qd=!1}var ia=null,Jd=null,Wl=null;function cx(){if(Wl)return Wl;var t,r=Jd,i=r.length,u,x="value"in ia?ia.value:ia.textContent,v=x.length;for(t=0;t=li),hx=" ",gx=!1;function xx(t,r){switch(t){case"keyup":return PN.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function vx(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Yo=!1;function $N(t,r){switch(t){case"compositionend":return vx(r);case"keypress":return r.which!==32?null:(gx=!0,hx);case"textInput":return t=r.data,t===hx&&gx?null:t;default:return null}}function BN(t,r){if(Yo)return t==="compositionend"||!af&&xx(t,r)?(t=cx(),Wl=Jd=ia=null,Yo=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:i,offset:r-t};t=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=Ex(i)}}function Tx(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?Tx(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function Rx(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=Gl(t.document);r instanceof t.HTMLIFrameElement;){try{var i=typeof r.contentWindow.location.href=="string"}catch{i=!1}if(i)t=r.contentWindow;else break;r=Gl(t.document)}return r}function lf(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var qN=_r&&"documentMode"in document&&11>=document.documentMode,qo=null,cf=null,fi=null,uf=!1;function Ax(t,r,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;uf||qo==null||qo!==Gl(u)||(u=qo,"selectionStart"in u&&lf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),fi&&di(fi,u)||(fi=u,u=$c(cf,"onSelect"),0>=C,x-=C,hr=1<<32-re(r)+x|i<Ue?(Ke=Re,Re=null):Ke=Re.sibling;var tt=J(W,Re,X[Ue],ce);if(tt===null){Re===null&&(Re=Ke);break}t&&Re&&tt.alternate===null&&r(W,Re),$=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt,Re=Ke}if(Ue===X.length)return i(W,Re),Qe&&Dr(W,Ue),_e;if(Re===null){for(;UeUe?(Ke=Re,Re=null):Ke=Re.sibling;var Ra=J(W,Re,tt.value,ce);if(Ra===null){Re===null&&(Re=Ke);break}t&&Re&&Ra.alternate===null&&r(W,Re),$=v(Ra,$,Ue),et===null?_e=Ra:et.sibling=Ra,et=Ra,Re=Ke}if(tt.done)return i(W,Re),Qe&&Dr(W,Ue),_e;if(Re===null){for(;!tt.done;Ue++,tt=X.next())tt=de(W,tt.value,ce),tt!==null&&($=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt);return Qe&&Dr(W,Ue),_e}for(Re=u(Re);!tt.done;Ue++,tt=X.next())tt=ne(Re,W,Ue,tt.value,ce),tt!==null&&(t&&tt.alternate!==null&&Re.delete(tt.key===null?Ue:tt.key),$=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt);return t&&Re.forEach(function(p3){return r(W,p3)}),Qe&&Dr(W,Ue),_e}function ft(W,$,X,ce){if(typeof X=="object"&&X!==null&&X.type===S&&X.key===null&&(X=X.props.children),typeof X=="object"&&X!==null){switch(X.$$typeof){case w:e:{for(var _e=X.key;$!==null;){if($.key===_e){if(_e=X.type,_e===S){if($.tag===7){i(W,$.sibling),ce=x($,X.props.children),ce.return=W,W=ce;break e}}else if($.elementType===_e||typeof _e=="object"&&_e!==null&&_e.$$typeof===B&&so(_e)===$.type){i(W,$.sibling),ce=x($,X.props),vi(ce,X),ce.return=W,W=ce;break e}i(W,$);break}else r(W,$);$=$.sibling}X.type===S?(ce=to(X.props.children,W.mode,ce,X.key),ce.return=W,W=ce):(ce=nc(X.type,X.key,X.props,null,W.mode,ce),vi(ce,X),ce.return=W,W=ce)}return C(W);case j:e:{for(_e=X.key;$!==null;){if($.key===_e)if($.tag===4&&$.stateNode.containerInfo===X.containerInfo&&$.stateNode.implementation===X.implementation){i(W,$.sibling),ce=x($,X.children||[]),ce.return=W,W=ce;break e}else{i(W,$);break}else r(W,$);$=$.sibling}ce=xf(X,W.mode,ce),ce.return=W,W=ce}return C(W);case B:return X=so(X),ft(W,$,X,ce)}if(se(X))return Ne(W,$,X,ce);if(ue(X)){if(_e=ue(X),typeof _e!="function")throw Error(o(150));return X=_e.call(X),Oe(W,$,X,ce)}if(typeof X.then=="function")return ft(W,$,cc(X),ce);if(X.$$typeof===T)return ft(W,$,oc(W,X),ce);uc(W,X)}return typeof X=="string"&&X!==""||typeof X=="number"||typeof X=="bigint"?(X=""+X,$!==null&&$.tag===6?(i(W,$.sibling),ce=x($,X),ce.return=W,W=ce):(i(W,$),ce=gf(X,W.mode,ce),ce.return=W,W=ce),C(W)):i(W,$)}return function(W,$,X,ce){try{xi=0;var _e=ft(W,$,X,ce);return os=null,_e}catch(Re){if(Re===as||Re===ic)throw Re;var et=jn(29,Re,null,W.mode);return et.lanes=ce,et.return=W,et}finally{}}}var lo=Jx(!0),ev=Jx(!1),fa=!1;function Rf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Af(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function ma(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function pa(t,r,i){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(nt&2)!==0){var x=u.pending;return x===null?r.next=r:(r.next=x.next,x.next=r),u.pending=r,r=tc(t),Px(t,null,i),r}return ec(t,u,r,i),tc(t)}function bi(t,r,i){if(r=r.updateQueue,r!==null&&(r=r.shared,(i&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,i|=u,r.lanes=i,fn(t,i)}}function Mf(t,r){var i=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var x=null,v=null;if(i=i.firstBaseUpdate,i!==null){do{var C={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};v===null?x=v=C:v=v.next=C,i=i.next}while(i!==null);v===null?x=v=r:v=v.next=r}else x=v=r;i={baseState:u.baseState,firstBaseUpdate:x,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},t.updateQueue=i;return}t=i.lastBaseUpdate,t===null?i.firstBaseUpdate=r:t.next=r,i.lastBaseUpdate=r}var _f=!1;function yi(){if(_f){var t=rs;if(t!==null)throw t}}function wi(t,r,i,u){_f=!1;var x=t.updateQueue;fa=!1;var v=x.firstBaseUpdate,C=x.lastBaseUpdate,R=x.shared.pending;if(R!==null){x.shared.pending=null;var P=R,Q=P.next;P.next=null,C===null?v=Q:C.next=Q,C=P;var ie=t.alternate;ie!==null&&(ie=ie.updateQueue,R=ie.lastBaseUpdate,R!==C&&(R===null?ie.firstBaseUpdate=Q:R.next=Q,ie.lastBaseUpdate=P))}if(v!==null){var de=x.baseState;C=0,ie=Q=P=null,R=v;do{var J=R.lane&-536870913,ne=J!==R.lane;if(ne?(qe&J)===J:(u&J)===J){J!==0&&J===ns&&(_f=!0),ie!==null&&(ie=ie.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});e:{var Ne=t,Oe=R;J=r;var ft=i;switch(Oe.tag){case 1:if(Ne=Oe.payload,typeof Ne=="function"){de=Ne.call(ft,de,J);break e}de=Ne;break e;case 3:Ne.flags=Ne.flags&-65537|128;case 0:if(Ne=Oe.payload,J=typeof Ne=="function"?Ne.call(ft,de,J):Ne,J==null)break e;de=g({},de,J);break e;case 2:fa=!0}}J=R.callback,J!==null&&(t.flags|=64,ne&&(t.flags|=8192),ne=x.callbacks,ne===null?x.callbacks=[J]:ne.push(J))}else ne={lane:J,tag:R.tag,payload:R.payload,callback:R.callback,next:null},ie===null?(Q=ie=ne,P=de):ie=ie.next=ne,C|=J;if(R=R.next,R===null){if(R=x.shared.pending,R===null)break;ne=R,R=ne.next,ne.next=null,x.lastBaseUpdate=ne,x.shared.pending=null}}while(!0);ie===null&&(P=de),x.baseState=P,x.firstBaseUpdate=Q,x.lastBaseUpdate=ie,v===null&&(x.shared.lanes=0),ba|=C,t.lanes=C,t.memoizedState=de}}function tv(t,r){if(typeof t!="function")throw Error(o(191,t));t.call(r)}function nv(t,r){var i=t.callbacks;if(i!==null)for(t.callbacks=null,t=0;tv?v:8;var C=L.T,R={};L.T=R,Zf(t,!1,r,i);try{var P=x(),Q=L.S;if(Q!==null&&Q(R,P),P!==null&&typeof P=="object"&&typeof P.then=="function"){var ie=r4(P,u);ji(t,r,ie,Rn(t))}else ji(t,r,u,Rn(t))}catch(de){ji(t,r,{then:function(){},status:"rejected",reason:de},Rn())}finally{I.p=v,C!==null&&R.types!==null&&(C.types=R.types),L.T=C}}function c4(){}function Kf(t,r,i,u){if(t.tag!==5)throw Error(o(476));var x=Dv(t).queue;Ov(t,x,r,H,i===null?c4:function(){return Lv(t),i(u)})}function Dv(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:H,baseState:H,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:H},next:null};var i={};return r.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:i},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function Lv(t){var r=Dv(t);r.next===null&&(r=t.alternate.memoizedState),ji(t,r.next.queue,{},Rn())}function Xf(){return en(Ui)}function zv(){return Rt().memoizedState}function Pv(){return Rt().memoizedState}function u4(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var i=Rn();t=ma(i);var u=pa(r,t,i);u!==null&&(yn(u,r,i),bi(u,r,i)),r={cache:Nf()},t.payload=r;return}r=r.return}}function d4(t,r,i){var u=Rn();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},yc(t)?$v(r,i):(i=pf(t,r,i,u),i!==null&&(yn(i,t,u),Bv(i,r,u)))}function Iv(t,r,i){var u=Rn();ji(t,r,i,u)}function ji(t,r,i,u){var x={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(yc(t))$v(r,x);else{var v=t.alternate;if(t.lanes===0&&(v===null||v.lanes===0)&&(v=r.lastRenderedReducer,v!==null))try{var C=r.lastRenderedState,R=v(C,i);if(x.hasEagerState=!0,x.eagerState=R,Sn(R,C))return ec(t,r,x,0),pt===null&&Jl(),!1}catch{}finally{}if(i=pf(t,r,x,u),i!==null)return yn(i,t,u),Bv(i,r,u),!0}return!1}function Zf(t,r,i,u){if(u={lane:2,revertLane:Rm(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},yc(t)){if(r)throw Error(o(479))}else r=pf(t,i,u,2),r!==null&&yn(r,t,2)}function yc(t){var r=t.alternate;return t===$e||r!==null&&r===$e}function $v(t,r){is=mc=!0;var i=t.pending;i===null?r.next=r:(r.next=i.next,i.next=r),t.pending=r}function Bv(t,r,i){if((i&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,i|=u,r.lanes=i,fn(t,i)}}var Ni={readContext:en,use:gc,useCallback:jt,useContext:jt,useEffect:jt,useImperativeHandle:jt,useLayoutEffect:jt,useInsertionEffect:jt,useMemo:jt,useReducer:jt,useRef:jt,useState:jt,useDebugValue:jt,useDeferredValue:jt,useTransition:jt,useSyncExternalStore:jt,useId:jt,useHostTransitionStatus:jt,useFormState:jt,useActionState:jt,useOptimistic:jt,useMemoCache:jt,useCacheRefresh:jt};Ni.useEffectEvent=jt;var Uv={readContext:en,use:gc,useCallback:function(t,r){return cn().memoizedState=[t,r===void 0?null:r],t},useContext:en,useEffect:jv,useImperativeHandle:function(t,r,i){i=i!=null?i.concat([t]):null,vc(4194308,4,Tv.bind(null,r,t),i)},useLayoutEffect:function(t,r){return vc(4194308,4,t,r)},useInsertionEffect:function(t,r){vc(4,2,t,r)},useMemo:function(t,r){var i=cn();r=r===void 0?null:r;var u=t();if(co){ee(!0);try{t()}finally{ee(!1)}}return i.memoizedState=[u,r],u},useReducer:function(t,r,i){var u=cn();if(i!==void 0){var x=i(r);if(co){ee(!0);try{i(r)}finally{ee(!1)}}}else x=r;return u.memoizedState=u.baseState=x,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:x},u.queue=t,t=t.dispatch=d4.bind(null,$e,t),[u.memoizedState,t]},useRef:function(t){var r=cn();return t={current:t},r.memoizedState=t},useState:function(t){t=Gf(t);var r=t.queue,i=Iv.bind(null,$e,r);return r.dispatch=i,[t.memoizedState,i]},useDebugValue:Yf,useDeferredValue:function(t,r){var i=cn();return qf(i,t,r)},useTransition:function(){var t=Gf(!1);return t=Ov.bind(null,$e,t.queue,!0,!1),cn().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,i){var u=$e,x=cn();if(Qe){if(i===void 0)throw Error(o(407));i=i()}else{if(i=r(),pt===null)throw Error(o(349));(qe&127)!==0||lv(u,r,i)}x.memoizedState=i;var v={value:i,getSnapshot:r};return x.queue=v,jv(uv.bind(null,u,v,t),[t]),u.flags|=2048,cs(9,{destroy:void 0},cv.bind(null,u,v,i,r),null),i},useId:function(){var t=cn(),r=pt.identifierPrefix;if(Qe){var i=gr,u=hr;i=(u&~(1<<32-re(u)-1)).toString(32)+i,r="_"+r+"R_"+i,i=pc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?C.createElement("select",{is:u.is}):C.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?C.createElement(x,{is:u.is}):C.createElement(x)}}v[Qt]=r,v[pn]=u;e:for(C=r.child;C!==null;){if(C.tag===5||C.tag===6)v.appendChild(C.stateNode);else if(C.tag!==4&&C.tag!==27&&C.child!==null){C.child.return=C,C=C.child;continue}if(C===r)break e;for(;C.sibling===null;){if(C.return===null||C.return===r)break e;C=C.return}C.sibling.return=C.return,C=C.sibling}r.stateNode=v;e:switch(nn(v,x,u),x){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&Br(r)}}return vt(r),dm(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,i),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&Br(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(t=oe.current,es(r)){if(t=r.stateNode,i=r.memoizedProps,u=null,x=Jt,x!==null)switch(x.tag){case 27:case 5:u=x.memoizedProps}t[Qt]=r,t=!!(t.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||sb(t.nodeValue,i)),t||ua(r,!0)}else t=Bc(t).createTextNode(u),t[Qt]=r,r.stateNode=t}return vt(r),null;case 31:if(i=r.memoizedState,t===null||t.memoizedState!==null){if(u=es(r),i!==null){if(t===null){if(!u)throw Error(o(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(o(557));t[Qt]=r}else no(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;vt(r),t=!1}else i=wf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=i),t=!0;if(!t)return r.flags&256?(En(r),r):(En(r),null);if((r.flags&128)!==0)throw Error(o(558))}return vt(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(x=es(r),u!==null&&u.dehydrated!==null){if(t===null){if(!x)throw Error(o(318));if(x=r.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(o(317));x[Qt]=r}else no(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;vt(r),x=!1}else x=wf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=x),x=!0;if(!x)return r.flags&256?(En(r),r):(En(r),null)}return En(r),(r.flags&128)!==0?(r.lanes=i,r):(i=u!==null,t=t!==null&&t.memoizedState!==null,i&&(u=r.child,x=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(x=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==x&&(u.flags|=2048)),i!==t&&i&&(r.child.flags|=8192),Nc(r,r.updateQueue),vt(r),null);case 4:return ve(),t===null&&Om(r.stateNode.containerInfo),vt(r),null;case 10:return zr(r.type),vt(r),null;case 19:if(D(Tt),u=r.memoizedState,u===null)return vt(r),null;if(x=(r.flags&128)!==0,v=u.rendering,v===null)if(x)ki(u,!1);else{if(Nt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(v=fc(t),v!==null){for(r.flags|=128,ki(u,!1),t=v.updateQueue,r.updateQueue=t,Nc(r,t),r.subtreeFlags=0,t=i,i=r.child;i!==null;)Ix(i,t),i=i.sibling;return G(Tt,Tt.current&1|2),Qe&&Dr(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&Kt()>Ac&&(r.flags|=128,x=!0,ki(u,!1),r.lanes=4194304)}else{if(!x)if(t=fc(v),t!==null){if(r.flags|=128,x=!0,t=t.updateQueue,r.updateQueue=t,Nc(r,t),ki(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!Qe)return vt(r),null}else 2*Kt()-u.renderingStartTime>Ac&&i!==536870912&&(r.flags|=128,x=!0,ki(u,!1),r.lanes=4194304);u.isBackwards?(v.sibling=r.child,r.child=v):(t=u.last,t!==null?t.sibling=v:r.child=v,u.last=v)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=Kt(),t.sibling=null,i=Tt.current,G(Tt,x?i&1|2:i&1),Qe&&Dr(r,u.treeForkCount),t):(vt(r),null);case 22:case 23:return En(r),Df(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(i&536870912)!==0&&(r.flags&128)===0&&(vt(r),r.subtreeFlags&6&&(r.flags|=8192)):vt(r),i=r.updateQueue,i!==null&&Nc(r,i.retryQueue),i=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==i&&(r.flags|=2048),t!==null&&D(oo),null;case 24:return i=null,t!==null&&(i=t.memoizedState.cache),r.memoizedState.cache!==i&&(r.flags|=2048),zr(Ot),vt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function g4(t,r){switch(bf(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return zr(Ot),ve(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return le(r),null;case 31:if(r.memoizedState!==null){if(En(r),r.alternate===null)throw Error(o(340));no()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(En(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(o(340));no()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return D(Tt),null;case 4:return ve(),null;case 10:return zr(r.type),null;case 22:case 23:return En(r),Df(),t!==null&&D(oo),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return zr(Ot),null;case 25:return null;default:return null}}function d1(t,r){switch(bf(r),r.tag){case 3:zr(Ot),ve();break;case 26:case 27:case 5:le(r);break;case 4:ve();break;case 31:r.memoizedState!==null&&En(r);break;case 13:En(r);break;case 19:D(Tt);break;case 10:zr(r.type);break;case 22:case 23:En(r),Df(),t!==null&&D(oo);break;case 24:zr(Ot)}}function Ti(t,r){try{var i=r.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var x=u.next;i=x;do{if((i.tag&t)===t){u=void 0;var v=i.create,C=i.inst;u=v(),C.destroy=u}i=i.next}while(i!==x)}}catch(R){st(r,r.return,R)}}function xa(t,r,i){try{var u=r.updateQueue,x=u!==null?u.lastEffect:null;if(x!==null){var v=x.next;u=v;do{if((u.tag&t)===t){var C=u.inst,R=C.destroy;if(R!==void 0){C.destroy=void 0,x=r;var P=i,Q=R;try{Q()}catch(ie){st(x,P,ie)}}}u=u.next}while(u!==v)}}catch(ie){st(r,r.return,ie)}}function f1(t){var r=t.updateQueue;if(r!==null){var i=t.stateNode;try{nv(r,i)}catch(u){st(t,t.return,u)}}}function m1(t,r,i){i.props=uo(t.type,t.memoizedProps),i.state=t.memoizedState;try{i.componentWillUnmount()}catch(u){st(t,r,u)}}function Ri(t,r){try{var i=t.ref;if(i!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof i=="function"?t.refCleanup=i(u):i.current=u}}catch(x){st(t,r,x)}}function xr(t,r){var i=t.ref,u=t.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(x){st(t,r,x)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(x){st(t,r,x)}else i.current=null}function p1(t){var r=t.type,i=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break e;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(x){st(t,t.return,x)}}function fm(t,r,i){try{var u=t.stateNode;I4(u,t.type,i,r),u[pn]=r}catch(x){st(t,t.return,x)}}function h1(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&ja(t.type)||t.tag===4}function mm(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||h1(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&ja(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function pm(t,r,i){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(t,r):(r=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,r.appendChild(t),i=i._reactRootContainer,i!=null||r.onclick!==null||(r.onclick=Mr));else if(u!==4&&(u===27&&ja(t.type)&&(i=t.stateNode,r=null),t=t.child,t!==null))for(pm(t,r,i),t=t.sibling;t!==null;)pm(t,r,i),t=t.sibling}function Ec(t,r,i){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?i.insertBefore(t,r):i.appendChild(t);else if(u!==4&&(u===27&&ja(t.type)&&(i=t.stateNode),t=t.child,t!==null))for(Ec(t,r,i),t=t.sibling;t!==null;)Ec(t,r,i),t=t.sibling}function g1(t){var r=t.stateNode,i=t.memoizedProps;try{for(var u=t.type,x=r.attributes;x.length;)r.removeAttributeNode(x[0]);nn(r,u,i),r[Qt]=t,r[pn]=i}catch(v){st(t,t.return,v)}}var Ur=!1,zt=!1,hm=!1,x1=typeof WeakSet=="function"?WeakSet:Set,Gt=null;function x4(t,r){if(t=t.containerInfo,zm=Yc,t=Rx(t),lf(t)){if("selectionStart"in t)var i={start:t.selectionStart,end:t.selectionEnd};else e:{i=(i=t.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var x=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{i.nodeType,v.nodeType}catch{i=null;break e}var C=0,R=-1,P=-1,Q=0,ie=0,de=t,J=null;t:for(;;){for(var ne;de!==i||x!==0&&de.nodeType!==3||(R=C+x),de!==v||u!==0&&de.nodeType!==3||(P=C+u),de.nodeType===3&&(C+=de.nodeValue.length),(ne=de.firstChild)!==null;)J=de,de=ne;for(;;){if(de===t)break t;if(J===i&&++Q===x&&(R=C),J===v&&++ie===u&&(P=C),(ne=de.nextSibling)!==null)break;de=J,J=de.parentNode}de=ne}i=R===-1||P===-1?null:{start:R,end:P}}else i=null}i=i||{start:0,end:0}}else i=null;for(Pm={focusedElem:t,selectionRange:i},Yc=!1,Gt=r;Gt!==null;)if(r=Gt,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Gt=t;else for(;Gt!==null;){switch(r=Gt,v=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(i=0;i title"))),nn(v,u,i),v[Qt]=t,Vt(v),u=v;break e;case"link":var C=Sb("link","href",x).get(u+(i.href||""));if(C){for(var R=0;Rft&&(C=ft,ft=Oe,Oe=C);var W=kx(R,Oe),$=kx(R,ft);if(W&&$&&(ne.rangeCount!==1||ne.anchorNode!==W.node||ne.anchorOffset!==W.offset||ne.focusNode!==$.node||ne.focusOffset!==$.offset)){var X=de.createRange();X.setStart(W.node,W.offset),ne.removeAllRanges(),Oe>ft?(ne.addRange(X),ne.extend($.node,$.offset)):(X.setEnd($.node,$.offset),ne.addRange(X))}}}}for(de=[],ne=R;ne=ne.parentNode;)ne.nodeType===1&&de.push({element:ne,left:ne.scrollLeft,top:ne.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Ri?32:i,L.T=null,i=Cm,Cm=null;var v=wa,C=Wr;if(It=0,ps=wa=null,Wr=0,(nt&6)!==0)throw Error(o(331));var R=nt;if(nt|=4,T1(v.current),N1(v,v.current,C,i),nt=R,Li(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(pr,v)}catch{}return!0}finally{I.p=x,L.T=u,W1(t,r)}}function q1(t,r,i){r=Un(i,r),r=tm(t.stateNode,r,2),t=pa(t,r,2),t!==null&&(wt(t,2),vr(t))}function st(t,r,i){if(t.tag===3)q1(t,t,i);else for(;r!==null;){if(r.tag===3){q1(r,t,i);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(ya===null||!ya.has(u))){t=Un(i,t),i=Kv(2),u=pa(r,i,2),u!==null&&(Xv(i,u,r,t),wt(u,2),vr(u));break}}r=r.return}}function Em(t,r,i){var u=t.pingCache;if(u===null){u=t.pingCache=new y4;var x=new Set;u.set(r,x)}else x=u.get(r),x===void 0&&(x=new Set,u.set(r,x));x.has(i)||(vm=!0,x.add(i),t=N4.bind(null,t,r,i),r.then(t,t))}function N4(t,r,i){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&i,t.warmLanes&=~i,pt===t&&(qe&i)===i&&(Nt===4||Nt===3&&(qe&62914560)===qe&&300>Kt()-Rc?(nt&2)===0&&hs(t,0):bm|=i,ms===qe&&(ms=0)),vr(t)}function K1(t,r){r===0&&(r=kt()),t=eo(t,r),t!==null&&(wt(t,r),vr(t))}function E4(t){var r=t.memoizedState,i=0;r!==null&&(i=r.retryLane),K1(t,i)}function k4(t,r){var i=0;switch(t.tag){case 31:case 13:var u=t.stateNode,x=t.memoizedState;x!==null&&(i=x.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),K1(t,i)}function T4(t,r){return Ya(t,r)}var zc=null,xs=null,km=!1,Pc=!1,Tm=!1,Sa=0;function vr(t){t!==xs&&t.next===null&&(xs===null?zc=xs=t:xs=xs.next=t),Pc=!0,km||(km=!0,A4())}function Li(t,r){if(!Tm&&Pc){Tm=!0;do for(var i=!1,u=zc;u!==null;){if(t!==0){var x=u.pendingLanes;if(x===0)var v=0;else{var C=u.suspendedLanes,R=u.pingedLanes;v=(1<<31-re(42|t)+1)-1,v&=x&~(C&~R),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(i=!0,J1(u,v))}else v=qe,v=Me(u,u===pt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||Je(u,v)||(i=!0,J1(u,v));u=u.next}while(i);Tm=!1}}function R4(){X1()}function X1(){Pc=km=!1;var t=0;Sa!==0&&B4()&&(t=Sa);for(var r=Kt(),i=null,u=zc;u!==null;){var x=u.next,v=Z1(u,r);v===0?(u.next=null,i===null?zc=x:i.next=x,x===null&&(xs=i)):(i=u,(t!==0||(v&3)!==0)&&(Pc=!0)),u=x}It!==0&&It!==5||Li(t),Sa!==0&&(Sa=0)}function Z1(t,r){for(var i=t.suspendedLanes,u=t.pingedLanes,x=t.expirationTimes,v=t.pendingLanes&-62914561;0R)break;var ie=P.transferSize,de=P.initiatorType;ie&&ib(de)&&(P=P.responseEnd,C+=ie*(P"u"?null:document;function bb(t,r,i){var u=vs;if(u&&typeof r=="string"&&r){var x=$n(r);x='link[rel="'+t+'"][href="'+x+'"]',typeof i=="string"&&(x+='[crossorigin="'+i+'"]'),vb.has(x)||(vb.add(x),t={rel:t,crossOrigin:i,href:r},u.querySelector(x)===null&&(r=u.createElement("link"),nn(r,"link",t),Vt(r),u.head.appendChild(r)))}}function K4(t){Yr.D(t),bb("dns-prefetch",t,null)}function X4(t,r){Yr.C(t,r),bb("preconnect",t,r)}function Z4(t,r,i){Yr.L(t,r,i);var u=vs;if(u&&t&&r){var x='link[rel="preload"][as="'+$n(r)+'"]';r==="image"&&i&&i.imageSrcSet?(x+='[imagesrcset="'+$n(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(x+='[imagesizes="'+$n(i.imageSizes)+'"]')):x+='[href="'+$n(t)+'"]';var v=x;switch(r){case"style":v=bs(t);break;case"script":v=ys(t)}Yn.has(v)||(t=g({rel:"preload",href:r==="image"&&i&&i.imageSrcSet?void 0:t,as:r},i),Yn.set(v,t),u.querySelector(x)!==null||r==="style"&&u.querySelector($i(v))||r==="script"&&u.querySelector(Bi(v))||(r=u.createElement("link"),nn(r,"link",t),Vt(r),u.head.appendChild(r)))}}function Q4(t,r){Yr.m(t,r);var i=vs;if(i&&t){var u=r&&typeof r.as=="string"?r.as:"script",x='link[rel="modulepreload"][as="'+$n(u)+'"][href="'+$n(t)+'"]',v=x;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=ys(t)}if(!Yn.has(v)&&(t=g({rel:"modulepreload",href:t},r),Yn.set(v,t),i.querySelector(x)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(Bi(v)))return}u=i.createElement("link"),nn(u,"link",t),Vt(u),i.head.appendChild(u)}}}function J4(t,r,i){Yr.S(t,r,i);var u=vs;if(u&&t){var x=Uo(u).hoistableStyles,v=bs(t);r=r||"default";var C=x.get(v);if(!C){var R={loading:0,preload:null};if(C=u.querySelector($i(v)))R.loading=5;else{t=g({rel:"stylesheet",href:t,"data-precedence":r},i),(i=Yn.get(v))&&Gm(t,i);var P=C=u.createElement("link");Vt(P),nn(P,"link",t),P._p=new Promise(function(Q,ie){P.onload=Q,P.onerror=ie}),P.addEventListener("load",function(){R.loading|=1}),P.addEventListener("error",function(){R.loading|=2}),R.loading|=4,Hc(C,r,u)}C={type:"stylesheet",instance:C,count:1,state:R},x.set(v,C)}}}function e3(t,r){Yr.X(t,r);var i=vs;if(i&&t){var u=Uo(i).hoistableScripts,x=ys(t),v=u.get(x);v||(v=i.querySelector(Bi(x)),v||(t=g({src:t,async:!0},r),(r=Yn.get(x))&&Fm(t,r),v=i.createElement("script"),Vt(v),nn(v,"link",t),i.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function t3(t,r){Yr.M(t,r);var i=vs;if(i&&t){var u=Uo(i).hoistableScripts,x=ys(t),v=u.get(x);v||(v=i.querySelector(Bi(x)),v||(t=g({src:t,async:!0,type:"module"},r),(r=Yn.get(x))&&Fm(t,r),v=i.createElement("script"),Vt(v),nn(v,"link",t),i.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function yb(t,r,i,u){var x=(x=oe.current)?Uc(x):null;if(!x)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(r=bs(i.href),i=Uo(x).hoistableStyles,u=i.get(r),u||(u={type:"style",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){t=bs(i.href);var v=Uo(x).hoistableStyles,C=v.get(t);if(C||(x=x.ownerDocument||x,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(t,C),(v=x.querySelector($i(t)))&&!v._p&&(C.instance=v,C.state.loading=5),Yn.has(t)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},Yn.set(t,i),v||n3(x,t,i,C.state))),r&&u===null)throw Error(o(528,""));return C}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=i.async,i=i.src,typeof i=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=ys(i),i=Uo(x).hoistableScripts,u=i.get(r),u||(u={type:"script",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function bs(t){return'href="'+$n(t)+'"'}function $i(t){return'link[rel="stylesheet"]['+t+"]"}function wb(t){return g({},t,{"data-precedence":t.precedence,precedence:null})}function n3(t,r,i,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),nn(r,"link",i),Vt(r),t.head.appendChild(r))}function ys(t){return'[src="'+$n(t)+'"]'}function Bi(t){return"script[async]"+t}function Cb(t,r,i){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+$n(i.href)+'"]');if(u)return r.instance=u,Vt(u),u;var x=g({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),Vt(u),nn(u,"style",x),Hc(u,i.precedence,t),r.instance=u;case"stylesheet":x=bs(i.href);var v=t.querySelector($i(x));if(v)return r.state.loading|=4,r.instance=v,Vt(v),v;u=wb(i),(x=Yn.get(x))&&Gm(u,x),v=(t.ownerDocument||t).createElement("link"),Vt(v);var C=v;return C._p=new Promise(function(R,P){C.onload=R,C.onerror=P}),nn(v,"link",u),r.state.loading|=4,Hc(v,i.precedence,t),r.instance=v;case"script":return v=ys(i.src),(x=t.querySelector(Bi(v)))?(r.instance=x,Vt(x),x):(u=i,(x=Yn.get(v))&&(u=g({},i),Fm(u,x)),t=t.ownerDocument||t,x=t.createElement("script"),Vt(x),nn(x,"link",u),t.head.appendChild(x),r.instance=x);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,Hc(u,i.precedence,t));return r.instance}function Hc(t,r,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=u.length?u[u.length-1]:null,v=x,C=0;C title"):null)}function r3(t,r,i){if(i===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function Nb(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function a3(t,r,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var x=bs(u.href),v=r.querySelector($i(x));if(v){r=v._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=Gc.bind(t),r.then(t,t)),i.state.loading|=4,i.instance=v,Vt(v);return}v=r.ownerDocument||r,u=wb(u),(x=Yn.get(x))&&Gm(u,x),v=v.createElement("link"),Vt(v);var C=v;C._p=new Promise(function(R,P){C.onload=R,C.onerror=P}),nn(v,"link",u),i.instance=v}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(i,r),(r=i.state.preload)&&(i.state.loading&3)===0&&(t.count++,i=Gc.bind(t),r.addEventListener("load",i),r.addEventListener("error",i))}}var Wm=0;function o3(t,r){return t.stylesheets&&t.count===0&&Wc(t,t.stylesheets),0Wm?50:800)+r);return t.unsuspend=i,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(x)}}:null}function Gc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Fc=null;function Wc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Fc=new Map,r.forEach(s3,t),Fc=null,Gc.call(t))}function s3(t,r){if(!(r.state.loading&4)){var i=Fc.get(t);if(i)var u=i.get(null);else{i=new Map,Fc.set(t,i);for(var x=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),tp.exports=j3(),tp.exports}var E3=N3();/** + * react-router v7.15.1 + * + * 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 + */var Xb="popstate";function Zb(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function k3(e={}){function n(o,l){var h;let c=(h=l.state)==null?void 0:h.masked,{pathname:d,search:m,hash:p}=c||o.location;return Up("",{pathname:d,search:m,hash:p},l.state&&l.state.usr||null,l.state&&l.state.key||"default",c?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,l){return typeof l=="string"?l:sl(l)}return R3(n,a,null,e)}function yt(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function Xn(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function T3(){return Math.random().toString(36).substring(2,10)}function Qb(e,n){return{usr:e.state,key:e.key,idx:n,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Up(e,n,a=null,o,l){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof n=="string"?$s(n):n,state:a,key:n&&n.key||o||T3(),mask:l}}function sl({pathname:e="/",search:n="",hash:a=""}){return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function $s(e){let n={};if(e){let a=e.indexOf("#");a>=0&&(n.hash=e.substring(a),e=e.substring(0,a));let o=e.indexOf("?");o>=0&&(n.search=e.substring(o),e=e.substring(0,o)),e&&(n.pathname=e)}return n}function R3(e,n,a,o={}){let{window:l=document.defaultView,v5Compat:c=!1}=o,d=l.history,m="POP",p=null,h=b();h==null&&(h=0,d.replaceState({...d.state,idx:h},""));function b(){return(d.state||{idx:null}).idx}function g(){m="POP";let E=b(),N=E==null?null:E-h;h=E,p&&p({action:m,location:S.location,delta:N})}function y(E,N){m="PUSH";let k=Zb(E)?E:Up(S.location,E,N);h=b()+1;let T=Qb(k,h),A=S.createHref(k.mask||k);try{d.pushState(T,"",A)}catch(O){if(O instanceof DOMException&&O.name==="DataCloneError")throw O;l.location.assign(A)}c&&p&&p({action:m,location:S.location,delta:1})}function w(E,N){m="REPLACE";let k=Zb(E)?E:Up(S.location,E,N);h=b();let T=Qb(k,h),A=S.createHref(k.mask||k);d.replaceState(T,"",A),c&&p&&p({action:m,location:S.location,delta:0})}function j(E){return A3(E)}let S={get action(){return m},get location(){return e(l,d)},listen(E){if(p)throw new Error("A history only accepts one active listener");return l.addEventListener(Xb,g),p=E,()=>{l.removeEventListener(Xb,g),p=null}},createHref(E){return n(l,E)},createURL:j,encodeLocation(E){let N=j(E);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:y,replace:w,go(E){return d.go(E)}};return S}function A3(e,n=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),yt(a,"No window.location.(origin|href) available to create URL");let o=typeof e=="string"?e:sl(e);return o=o.replace(/ $/,"%20"),!n&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function _0(e,n,a="/"){return M3(e,n,a,!1)}function M3(e,n,a,o,l){let c=typeof n=="string"?$s(n):n,d=Jr(c.pathname||"/",a);if(d==null)return null;let m=_3(e),p=null,h=G3(d);for(let b=0;p==null&&b{let b={relativePath:h===void 0?d.path||"":h,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&p)return;yt(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let g=sr([o,b.relativePath]),y=a.concat(b);d.children&&d.children.length>0&&(yt(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${g}".`),O0(d.children,n,y,g,p)),!(d.path==null&&!d.index)&&n.push({path:g,score:B3(g,d.index),routesMeta:y})};return e.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))c(d,m);else for(let h of D0(d.path))c(d,m,!0,h)}),n}function D0(e){let n=e.split("/");if(n.length===0)return[];let[a,...o]=n,l=a.endsWith("?"),c=a.replace(/\?$/,"");if(o.length===0)return l?[c,""]:[c];let d=D0(o.join("/")),m=[];return m.push(...d.map(p=>p===""?c:[c,p].join("/"))),l&&m.push(...d),m.map(p=>e.startsWith("/")&&p===""?"/":p)}function O3(e){e.sort((n,a)=>n.score!==a.score?a.score-n.score:U3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var D3=/^:[\w-]+$/,L3=3,z3=2,P3=1,I3=10,$3=-2,Jb=e=>e==="*";function B3(e,n){let a=e.split("/"),o=a.length;return a.some(Jb)&&(o+=$3),n&&(o+=z3),a.filter(l=>!Jb(l)).reduce((l,c)=>l+(D3.test(c)?L3:c===""?P3:I3),o)}function U3(e,n){return e.length===n.length&&e.slice(0,-1).every((o,l)=>o===n[l])?e[e.length-1]-n[n.length-1]:0}function H3(e,n,a=!1){let{routesMeta:o}=e,l={},c="/",d=[];for(let m=0;m{if(b==="*"){let j=m[y]||"";d=c.slice(0,c.length-j.length).replace(/(.)\/+$/,"$1")}const w=m[y];return g&&!w?h[b]=void 0:h[b]=(w||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:d,pattern:e}}function V3(e,n=!1,a=!0){Xn(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 o=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,h,b)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let g=b.charAt(h+d.length);return g&&g!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(o.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,n?void 0:"i"),o]}function G3(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return Xn(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),e}}function Jr(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=e.charAt(a);return o&&o!=="/"?null:e.slice(a)||"/"}var F3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function W3(e,n="/"){let{pathname:a,search:o="",hash:l=""}=typeof e=="string"?$s(e):e,c;return a?(a=L0(a),a.startsWith("/")?c=ey(a.substring(1),"/"):c=ey(a,n)):c=n,{pathname:c,search:K3(o),hash:X3(l)}}function ey(e,n){let a=Ru(n).split("/");return e.split("/").forEach(l=>{l===".."?a.length>1&&a.pop():l!=="."&&a.push(l)}),a.length>1?a.join("/"):"/"}function op(e,n,a,o){return`Cannot include a '${e}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Y3(e){return e.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Mh(e){let n=Y3(e);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function Xu(e,n,a,o=!1){let l;typeof e=="string"?l=$s(e):(l={...e},yt(!l.pathname||!l.pathname.includes("?"),op("?","pathname","search",l)),yt(!l.pathname||!l.pathname.includes("#"),op("#","pathname","hash",l)),yt(!l.search||!l.search.includes("#"),op("#","search","hash",l)));let c=e===""||l.pathname==="",d=c?"/":l.pathname,m;if(d==null)m=a;else{let g=n.length-1;if(!o&&d.startsWith("..")){let y=d.split("/");for(;y[0]==="..";)y.shift(),g-=1;l.pathname=y.join("/")}m=g>=0?n[g]:"/"}let p=W3(l,m),h=d&&d!=="/"&&d.endsWith("/"),b=(c||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(h||b)&&(p.pathname+="/"),p}var L0=e=>e.replace(/\/\/+/g,"/"),sr=e=>L0(e.join("/")),Ru=e=>e.replace(/\/+$/,""),q3=e=>Ru(e).replace(/^\/*/,"/"),K3=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,X3=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,Z3=class{constructor(e,n,a,o=!1){this.status=e,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function Q3(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function J3(e){let n=e.map(a=>a.route.path).filter(Boolean);return sr(n)||"/"}var z0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function P0(e,n){let a=e;if(typeof a!="string"||!F3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,l=!1;if(z0)try{let c=new URL(window.location.href),d=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=Jr(d.pathname,n);d.origin===c.origin&&m!=null?a=m+d.search+d.hash:l=!0}catch{Xn(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:l,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var I0=["POST","PUT","PATCH","DELETE"];new Set(I0);var eE=["GET",...I0];new Set(eE);var Bs=f.createContext(null);Bs.displayName="DataRouter";var Zu=f.createContext(null);Zu.displayName="DataRouterState";var $0=f.createContext(!1);function tE(){return f.useContext($0)}var B0=f.createContext({isTransitioning:!1});B0.displayName="ViewTransition";var nE=f.createContext(new Map);nE.displayName="Fetchers";var rE=f.createContext(null);rE.displayName="Await";var Dn=f.createContext(null);Dn.displayName="Navigation";var bl=f.createContext(null);bl.displayName="Location";var cr=f.createContext({outlet:null,matches:[],isDataRoute:!1});cr.displayName="Route";var _h=f.createContext(null);_h.displayName="RouteError";var U0="REACT_ROUTER_ERROR",aE="REDIRECT",oE="ROUTE_ERROR_RESPONSE";function sE(e){if(e.startsWith(`${U0}:${aE}:{`))try{let n=JSON.parse(e.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function iE(e){if(e.startsWith(`${U0}:${oE}:{`))try{let n=JSON.parse(e.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new Z3(n.status,n.statusText,n.data)}catch{}}function lE(e,{relative:n}={}){yt(Us(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(Dn),{hash:l,pathname:c,search:d}=yl(e,{relative:n}),m=c;return a!=="/"&&(m=c==="/"?a:sr([a,c])),o.createHref({pathname:m,search:d,hash:l})}function Us(){return f.useContext(bl)!=null}function Ln(){return yt(Us(),"useLocation() may be used only in the context of a component."),f.useContext(bl).location}var H0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function V0(e){f.useContext(Dn).static||f.useLayoutEffect(e)}function Ro(){let{isDataRoute:e}=f.useContext(cr);return e?SE():cE()}function cE(){yt(Us(),"useNavigate() may be used only in the context of a component.");let e=f.useContext(Bs),{basename:n,navigator:a}=f.useContext(Dn),{matches:o}=f.useContext(cr),{pathname:l}=Ln(),c=JSON.stringify(Mh(o)),d=f.useRef(!1);return V0(()=>{d.current=!0}),f.useCallback((p,h={})=>{if(Xn(d.current,H0),!d.current)return;if(typeof p=="number"){a.go(p);return}let b=Xu(p,JSON.parse(c),l,h.relative==="path");e==null&&n!=="/"&&(b.pathname=b.pathname==="/"?n:sr([n,b.pathname])),(h.replace?a.replace:a.push)(b,h.state,h)},[n,a,c,l,e])}var uE=f.createContext(null);function dE(e){let n=f.useContext(cr).outlet;return f.useMemo(()=>n&&f.createElement(uE.Provider,{value:e},n),[n,e])}function yl(e,{relative:n}={}){let{matches:a}=f.useContext(cr),{pathname:o}=Ln(),l=JSON.stringify(Mh(a));return f.useMemo(()=>Xu(e,JSON.parse(l),o,n==="path"),[e,l,o,n])}function fE(e,n){return G0(e,n)}function G0(e,n,a){var E;yt(Us(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(Dn),{matches:l}=f.useContext(cr),c=l[l.length-1],d=c?c.params:{},m=c?c.pathname:"/",p=c?c.pathnameBase:"/",h=c&&c.route;{let N=h&&h.path||"";W0(m,!h||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let b=Ln(),g;if(n){let N=typeof n=="string"?$s(n):n;yt(p==="/"||((E=N.pathname)==null?void 0:E.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${N.pathname}" was given in the \`location\` prop.`),g=N}else g=b;let y=g.pathname||"/",w=y;if(p!=="/"){let N=p.replace(/^\//,"").split("/");w="/"+y.replace(/^\//,"").split("/").slice(N.length).join("/")}let j=a&&a.state.matches.length?a.state.matches.map(N=>Object.assign(N,{route:a.manifest[N.route.id]||N.route})):_0(e,{pathname:w});Xn(h||j!=null,`No routes matched location "${g.pathname}${g.search}${g.hash}" `),Xn(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${g.pathname}${g.search}${g.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let S=xE(j&&j.map(N=>Object.assign({},N,{params:Object.assign({},d,N.params),pathname:sr([p,o.encodeLocation?o.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?p:sr([p,o.encodeLocation?o.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),l,a);return n&&S?f.createElement(bl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...g},navigationType:"POP"}},S):S}function mE(){let e=CE(),n=Q3(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",l={padding:"0.5rem",backgroundColor:o},c={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",e),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:c},"ErrorBoundary")," or"," ",f.createElement("code",{style:c},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:l},a):null,d)}var pE=f.createElement(mE,null),F0=class extends f.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){this.props.onError?this.props.onError(e,n):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=iE(e.digest);a&&(e=a)}let n=e!==void 0?f.createElement(cr.Provider,{value:this.props.routeContext},f.createElement(_h.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?f.createElement(hE,{error:e},n):n}};F0.contextType=$0;var sp=new WeakMap;function hE({children:e,error:n}){let{basename:a}=f.useContext(Dn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=sE(n.digest);if(o){let l=sp.get(n);if(l)throw l;let c=P0(o.location,a);if(z0&&!sp.get(n))if(c.isExternal||o.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:o.replace}));throw sp.set(n,d),d}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return e}function gE({routeContext:e,match:n,children:a}){let o=f.useContext(Bs);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(cr.Provider,{value:e},a)}function xE(e,n=[],a){let o=a==null?void 0:a.state;if(e==null){if(!o)return null;if(o.errors)e=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)e=o.matches;else return null}let l=e,c=o==null?void 0:o.errors;if(c!=null){let b=l.findIndex(g=>g.route.id&&(c==null?void 0:c[g.route.id])!==void 0);yt(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),l=l.slice(0,Math.min(l.length,b+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let b=0;b=0?l=l.slice(0,m+1):l=[l[0]];break}}}}let p=a==null?void 0:a.onError,h=o&&p?(b,g)=>{var y,w;p(b,{location:o.location,params:((w=(y=o.matches)==null?void 0:y[0])==null?void 0:w.params)??{},pattern:J3(o.matches),errorInfo:g})}:void 0;return l.reduceRight((b,g,y)=>{let w,j=!1,S=null,E=null;o&&(w=c&&g.route.id?c[g.route.id]:void 0,S=g.route.errorElement||pE,d&&(m<0&&y===0?(W0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,E=null):m===y&&(j=!0,E=g.route.hydrateFallbackElement||null)));let N=n.concat(l.slice(0,y+1)),k=()=>{let T;return w?T=S:j?T=E:g.route.Component?T=f.createElement(g.route.Component,null):g.route.element?T=g.route.element:T=b,f.createElement(gE,{match:g,routeContext:{outlet:b,matches:N,isDataRoute:o!=null},children:T})};return o&&(g.route.ErrorBoundary||g.route.errorElement||y===0)?f.createElement(F0,{location:o.location,revalidation:o.revalidation,component:S,error:w,children:k(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:h}):k()},null)}function Oh(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function vE(e){let n=f.useContext(Bs);return yt(n,Oh(e)),n}function bE(e){let n=f.useContext(Zu);return yt(n,Oh(e)),n}function yE(e){let n=f.useContext(cr);return yt(n,Oh(e)),n}function Dh(e){let n=yE(e),a=n.matches[n.matches.length-1];return yt(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function wE(){return Dh("useRouteId")}function CE(){var o;let e=f.useContext(_h),n=bE("useRouteError"),a=Dh("useRouteError");return e!==void 0?e:(o=n.errors)==null?void 0:o[a]}function SE(){let{router:e}=vE("useNavigate"),n=Dh("useNavigate"),a=f.useRef(!1);return V0(()=>{a.current=!0}),f.useCallback(async(l,c={})=>{Xn(a.current,H0),a.current&&(typeof l=="number"?await e.navigate(l):await e.navigate(l,{fromRouteId:n,...c}))},[e,n])}var ty={};function W0(e,n,a){!n&&!ty[e]&&(ty[e]=!0,Xn(!1,a))}f.memo(jE);function jE({routes:e,manifest:n,future:a,state:o,isStatic:l,onError:c}){return G0(e,void 0,{manifest:n,state:o,isStatic:l,onError:c})}function Qr({to:e,replace:n,state:a,relative:o}){yt(Us()," may be used only in the context of a component.");let{static:l}=f.useContext(Dn);Xn(!l," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:c}=f.useContext(cr),{pathname:d}=Ln(),m=Ro(),p=Xu(e,Mh(c),d,o==="path"),h=JSON.stringify(p);return f.useEffect(()=>{m(JSON.parse(h),{replace:n,state:a,relative:o})},[m,h,o,n,a]),null}function NE(e){return dE(e.context)}function rn(e){yt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function EE({basename:e="/",children:n=null,location:a,navigationType:o="POP",navigator:l,static:c=!1,useTransitions:d}){yt(!Us(),"You cannot render a inside another . You should never have more than one in your app.");let m=e.replace(/^\/*/,"/"),p=f.useMemo(()=>({basename:m,navigator:l,static:c,useTransitions:d,future:{}}),[m,l,c,d]);typeof a=="string"&&(a=$s(a));let{pathname:h="/",search:b="",hash:g="",state:y=null,key:w="default",mask:j}=a,S=f.useMemo(()=>{let E=Jr(h,m);return E==null?null:{location:{pathname:E,search:b,hash:g,state:y,key:w,mask:j},navigationType:o}},[m,h,b,g,y,w,o,j]);return Xn(S!=null,` is not able to match the URL "${h}${b}${g}" because it does not start with the basename, so the won't render anything.`),S==null?null:f.createElement(Dn.Provider,{value:p},f.createElement(bl.Provider,{children:n,value:S}))}function ny({children:e,location:n}){return fE(Hp(e),n)}function Hp(e,n=[]){let a=[];return f.Children.forEach(e,(o,l)=>{if(!f.isValidElement(o))return;let c=[...n,l];if(o.type===f.Fragment){a.push.apply(a,Hp(o.props.children,c));return}yt(o.type===rn,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),yt(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||c.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=Hp(o.props.children,c)),a.push(d)}),a}var xu="get",vu="application/x-www-form-urlencoded";function Qu(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function kE(e){return Qu(e)&&e.tagName.toLowerCase()==="button"}function TE(e){return Qu(e)&&e.tagName.toLowerCase()==="form"}function RE(e){return Qu(e)&&e.tagName.toLowerCase()==="input"}function AE(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function ME(e,n){return e.button===0&&(!n||n==="_self")&&!AE(e)}function Vp(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,a)=>{let o=e[a];return n.concat(Array.isArray(o)?o.map(l=>[a,l]):[[a,o]])},[]))}function _E(e,n){let a=Vp(e);return n&&n.forEach((o,l)=>{a.has(l)||n.getAll(l).forEach(c=>{a.append(l,c)})}),a}var eu=null;function OE(){if(eu===null)try{new FormData(document.createElement("form"),0),eu=!1}catch{eu=!0}return eu}var DE=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function ip(e){return e!=null&&!DE.has(e)?(Xn(!1,`"${e}" is not a valid \`encType\` for \`\`/\`\` and will default to "${vu}"`),null):e}function LE(e,n){let a,o,l,c,d;if(TE(e)){let m=e.getAttribute("action");o=m?Jr(m,n):null,a=e.getAttribute("method")||xu,l=ip(e.getAttribute("enctype"))||vu,c=new FormData(e)}else if(kE(e)||RE(e)&&(e.type==="submit"||e.type==="image")){let m=e.form;if(m==null)throw new Error('Cannot submit a `,O=>`${A}-${O.id}`)}const E=y`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${w(n.skinTones,(k,T)=>y`
${k}
`,k=>k)}
${w(n.currentEmojisWithCategories,(k,T)=>y`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,N=(k,T)=>{for(const A of e.querySelectorAll(`[${k}]`))T(A,A.getAttribute(k))};if(p){e.appendChild(E);for(const k of["click","focusout","input","keydown","keyup"])N(`data-on-${k}`,(T,A)=>{T.addEventListener(k,o[A])});N("data-ref",(k,T)=>{c[T]=k}),d.addEventListener("abort",()=>{e.removeChild(E)})}N("data-action",(k,T)=>{let A=m.get(T);A||m.set(T,A=new WeakSet),A.has(k)||(A.add(k),l[T](k))})}const Wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function gP(e){let n=!1,a;const o=new Map,l=new Set;let c;const d=()=>{if(n)return;const h=[...l];l.clear();try{for(const b of h)b()}finally{c=!1,l.size&&(c=!0,Wu(d))}},m=new Proxy({},{get(h,b){if(a){let g=o.get(b);g||(g=new Set,o.set(b,g)),g.add(a)}return h[b]},set(h,b,g){if(h[b]!==g){h[b]=g;const y=o.get(b);if(y){for(const w of y)l.add(w);c||(c=!0,Wu(d))}}return!0}}),p=h=>{const b=()=>{const g=a;a=b;try{return h()}finally{a=g}};return b()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function zp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const Pp=[],{assign:mu}=Object;function vP(e,n){const a={},o=new AbortController,l=o.signal,{state:c,createEffect:d}=gP(l),m=new Map;mu(c,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),mu(c,n),mu(c,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Pz,isRtl:!1,currentGroupIndex:0,groups:Mp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{c.currentGroup!==c.groups[c.currentGroupIndex]&&(c.currentGroup=c.groups[c.currentGroupIndex])});const p=Y=>{e.getElementById(Y).focus()},h=Y=>e.getElementById(`emo-${Y.id}`),b=(Y,le)=>{a.rootElement.dispatchEvent(new CustomEvent(Y,{detail:le,bubbles:!0,composed:!0}))},g=(Y,le)=>Y.id===le.id,y=(Y,le)=>{const{category:ye,emojis:Te}=Y,{category:Le,emojis:rt}=le;return ye!==Le?!1:zp(Te,rt,g)},w=Y=>{zp(c.currentEmojis,Y,g)||(c.currentEmojis=Y)},j=Y=>{c.searchMode!==Y&&(c.searchMode=Y)},S=Y=>{zp(c.currentEmojisWithCategories,Y,y)||(c.currentEmojisWithCategories=Y)},E=(Y,le)=>le&&Y.skins&&Y.skins[le]||Y.unicode,T={labelWithSkin:(Y,le)=>eP([Y.name||E(Y,le),Y.annotation,...Y.shortcodes||Pp].filter(Boolean)).join(", "),titleForEmoji:Y=>Y.annotation||(Y.shortcodes||Pp).join(", "),unicodeWithSkin:E},A={onClickSkinToneButton:F,onEmojiClick:D,onNavClick:H,onNavKeydown:Z,onSearchKeydown:I,onSkinToneOptionsClick:V,onSkinToneOptionsFocusOut:be,onSkinToneOptionsKeydown:oe,onSkinToneOptionsKeyup:ae,onSearchInput:ve},O={calculateEmojiGridStyle:B,updateOnIntersection:K};let M=!0;d(()=>{hP(e,c,T,A,O,a,l,m,M),M=!1}),c.emojiVersion||Op().then(Y=>{Y||(c.message=c.i18n.emojiUnsupportedMessage)}),d(()=>{async function Y(){let le=!1;const ye=setTimeout(()=>{le=!0,c.message=c.i18n.loadingMessage},Lz);try{await c.database.ready(),c.databaseLoaded=!0}catch(Te){console.error(Te),c.message=c.i18n.networkErrorMessage}finally{clearTimeout(ye),le&&(le=!1,c.message="")}}c.database&&Y()}),d(()=>{c.pickerStyle=` + --num-groups: ${c.groups.length}; + --indicator-opacity: ${c.searchMode?0:1}; + --num-skintones: ${i0};`}),d(()=>{c.customEmoji&&c.database&&z()}),d(()=>{c.customEmoji&&c.customEmoji.length?c.groups!==Nh&&(c.groups=Nh):c.groups!==Mp&&(c.currentGroupIndex&&c.currentGroupIndex--,c.groups=Mp)}),d(()=>{async function Y(){c.databaseLoaded&&(c.currentSkinTone=await c.database.getPreferredSkinTone())}Y()}),d(()=>{c.skinTones=Array(i0).fill().map((Y,le)=>qz(c.skinToneEmoji,le))}),d(()=>{c.skinToneButtonText=c.skinTones[c.currentSkinTone]}),d(()=>{c.skinToneButtonLabel=c.i18n.skinToneLabel.replace("{skinTone}",c.i18n.skinTones[c.currentSkinTone])}),d(()=>{async function Y(){const{database:le}=c,ye=(await Promise.all(Iz.map(Te=>le.getEmojiByUnicodeOrName(Te)))).filter(Boolean);c.defaultFavoriteEmojis=ye}c.databaseLoaded&&Y()});function z(){const{customEmoji:Y,database:le}=c,ye=Y||Pp;le.customEmoji!==ye&&(le.customEmoji=ye)}d(()=>{async function Y(){z();const{database:le,defaultFavoriteEmojis:ye,numColumns:Te}=c,Le=await le.getTopFavoriteEmoji(Te),rt=await xe(H5([...Le,...ye],ht=>ht.unicode||ht.name).slice(0,Te));c.currentFavorites=rt}c.databaseLoaded&&c.defaultFavoriteEmojis&&Y()});function B(Y){Zz(Y,l,()=>{{const le=getComputedStyle(a.rootElement),ye=parseInt(le.getPropertyValue("--num-columns"),10),Te=le.getPropertyValue("direction")==="rtl";c.numColumns=ye,c.isRtl=Te}})}function K(Y){xP(Y,l,le=>{for(const{target:ye,isIntersecting:Te}of le)ye.classList.toggle("onscreen",Te)})}d(()=>{async function Y(){const{searchText:le,currentGroup:ye,databaseLoaded:Te,customEmoji:Le}=c;if(!Te)c.currentEmojis=[],c.searchMode=!1;else if(le.length>=Oz){const rt=await L(le);c.searchText===le&&(w(rt),j(!0))}else{const{id:rt}=ye;if(rt!==-1||Le&&Le.length){const ht=await se(rt);c.currentGroup.id===rt&&(w(ht),j(!1))}}}Y()});const U=()=>{Nu(()=>tP(a.tabpanelElement))};d(()=>{const{currentEmojis:Y,emojiVersion:le}=c,ye=Y.filter(Te=>Te.unicode).filter(Te=>l0(Te)&&!Eh.has(Te.unicode));if(!le&&ye.length)w(Y),Nu(()=>q(ye));else{const Te=le?Y:Y.filter(ue);w(Te),U()}});function q(Y){Jz(Y,a.baselineEmoji,h)?U():c.currentEmojis=[...c.currentEmojis]}function ue(Y){return!Y.unicode||!l0(Y)||Eh.get(Y.unicode)}async function pe(Y){const le=c.emojiVersion||await Op();return Y.filter(({version:ye})=>!ye||ye<=le)}async function xe(Y){return Kz(Y,c.emojiVersion||await Op())}async function se(Y){const le=Y===-1?c.customEmoji:await c.database.getEmojiByGroup(Y);return xe(await pe(le))}async function L(Y){return xe(await pe(await c.database.getEmojiBySearchQuery(Y)))}d(()=>{}),d(()=>{function Y(){const{searchMode:ye,currentEmojis:Te}=c;if(ye)return[{category:"",emojis:Te}];const Le=new Map;for(const rt of Te){const ht=rt.category||"";let Mt=Le.get(ht);Mt||(Mt=[],Le.set(ht,Mt)),Mt.push(rt)}return[...Le.entries()].map(([rt,ht])=>({category:rt,emojis:ht})).sort((rt,ht)=>c.customCategorySorting(rt.category,ht.category))}const le=Y();S(le)}),d(()=>{c.activeSearchItemId=c.activeSearchItem!==-1&&c.currentEmojis[c.activeSearchItem].id}),d(()=>{const{rawSearchText:Y}=c;B5(()=>{c.searchText=(Y||"").trim(),c.activeSearchItem=-1})});function I(Y){if(!c.searchMode||!c.currentEmojis.length)return;const le=ye=>{yr(Y),c.activeSearchItem=Dp(ye,c.activeSearchItem,c.currentEmojis)};switch(Y.key){case"ArrowDown":return le(!1);case"ArrowUp":return le(!0);case"Enter":if(c.activeSearchItem===-1)c.activeSearchItem=0;else return yr(Y),_(c.currentEmojis[c.activeSearchItem].id)}}function H(Y){const{target:le}=Y,ye=le.closest(".nav-button");if(!ye)return;const Te=parseInt(ye.dataset.groupId,10);a.searchElement.value="",c.rawSearchText="",c.searchText="",c.activeSearchItem=-1,c.currentGroupIndex=c.groups.findIndex(Le=>Le.id===Te)}function Z(Y){const{target:le,key:ye}=Y,Te=Le=>{Le&&(yr(Y),Le.focus())};switch(ye){case"ArrowLeft":return Te(le.previousElementSibling);case"ArrowRight":return Te(le.nextElementSibling);case"Home":return Te(le.parentElement.firstElementChild);case"End":return Te(le.parentElement.lastElementChild)}}async function te(Y){const le=await c.database.getEmojiByUnicodeOrName(Y),ye=[...c.currentEmojis,...c.currentFavorites].find(Le=>Le.id===Y),Te=ye.unicode&&E(ye,c.currentSkinTone);return await c.database.incrementFavoriteEmojiCount(Y),{emoji:le,skinTone:c.currentSkinTone,...Te&&{unicode:Te},...ye.name&&{name:ye.name}}}async function _(Y){const le=te(Y);b("emoji-click-sync",le),b("emoji-click",await le)}function D(Y){const{target:le}=Y;if(!le.classList.contains("emoji"))return;yr(Y);const ye=le.id.substring(4);_(ye)}function G(Y){c.currentSkinTone=Y,c.skinTonePickerExpanded=!1,p("skintone-button"),b("skin-tone-change",{skinTone:Y}),c.database.setPreferredSkinTone(Y)}function V(Y){const{target:{id:le}}=Y,ye=le&&le.match(/^skintone-(\d)/);if(!ye)return;yr(Y);const Te=parseInt(ye[1],10);G(Te)}function F(Y){c.skinTonePickerExpanded=!c.skinTonePickerExpanded,c.activeSkinTone=c.currentSkinTone,c.skinTonePickerExpanded&&(yr(Y),Nu(()=>p("skintone-list")))}d(()=>{c.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{c.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):c.skinTonePickerExpandedAfterAnimation=!1});function oe(Y){if(!c.skinTonePickerExpanded)return;const le=async ye=>{yr(Y),c.activeSkinTone=ye};switch(Y.key){case"ArrowUp":return le(Dp(!0,c.activeSkinTone,c.skinTones));case"ArrowDown":return le(Dp(!1,c.activeSkinTone,c.skinTones));case"Home":return le(0);case"End":return le(c.skinTones.length-1);case"Enter":return yr(Y),G(c.activeSkinTone);case"Escape":return yr(Y),c.skinTonePickerExpanded=!1,p("skintone-button")}}function ae(Y){if(c.skinTonePickerExpanded)switch(Y.key){case" ":return yr(Y),G(c.activeSkinTone)}}async function be(Y){const{relatedTarget:le}=Y;(!le||le.id!=="skintone-list")&&(c.skinTonePickerExpanded=!1)}function ve(Y){c.rawSearchText=Y.target.value}return{$set(Y){mu(c,Y)},$destroy(){o.abort()}}}const bP="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",yP="en";var wP={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},CP=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const V5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],SP=`:host{--emoji-font-family:${U5}}`;class Hg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=CP+SP,this.shadowRoot.appendChild(a),this._ctx={locale:yP,dataSource:bP,skinToneEmoji:zz,customCategorySorting:$z,customEmoji:null,i18n:wP,emojiVersion:null,...n};for(const o of V5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){h0(this),this._cmp||(this._cmp=vP(this.shadowRoot,this._ctx))}disconnectedCallback(){h0(this),Wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,c)=>c.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new _z({locale:n,dataSource:a}))}_dbFlush(){Wu(()=>this._dbCreate())}}const G5={};for(const e of V5)G5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(Hg.prototype,G5);function h0(e){e instanceof Hg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Hg);function jP({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=c=>{var p;const d=c.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),s.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const NP=/^<(a?):([^:>]+):(\d{17,20})>$/;function Eu(e,n,a=!1){return`${a?"`}function F5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(NP);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function W5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function EP(e,n=[]){const a=F5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:Eu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==Eu(o.name,o.id,o.animated))return{kind:"custom",value:Eu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function kP({value:e,guildEmojis:n,size:a="md"}){const o=EP(e,n),l=a==="lg"?"size-10":"size-7",c=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?s.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?s.jsxs("span",{className:"inline-flex items-center gap-3",children:[s.jsx("img",{src:W5(o.id,o.animated),alt:o.name??"custom emoji",className:fe(l,"shrink-0 rounded-md"),loading:"lazy"}),s.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[s.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),s.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):s.jsx("span",{className:fe(c,"leading-none"),title:o.value,children:o.value})}function TP({id:e,label:n,description:a,value:o,onChange:l,readOnly:c}){const[d,m]=f.useState(!1),[p,h]=f.useState("server"),[b,g]=f.useState(null),[y,w]=f.useState(""),[j,S]=f.useState(!1),[E,N]=f.useState(""),k=f.useCallback(async(U=!1)=>{S(!0),w("");try{const q=await Ee.getGuildResources(U);q.data?(g(q.data),Array.isArray(q.data.emojis)||w("Server response is missing emojis. Restart the bot after updating.")):w("No guild data returned.")}catch(q){w(q instanceof Error?q.message:"Could not load server emojis")}finally{S(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const T=f.useMemo(()=>Array.isArray(b==null?void 0:b.emojis)?b.emojis:[],[b]),A=f.useMemo(()=>{const U=E.trim().toLowerCase();return U?T.filter(q=>q.name.toLowerCase().includes(U)):T},[T,E]),O=String(o??""),M=F5(O);function z(U){l(U),m(!1)}function B(U){l(Eu(U.name,U.id,U.animated)),m(!1)}function K(){l("")}return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:e,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,s.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx(kP,{value:o,guildEmojis:T,size:"lg"})}),s.jsxs("div",{className:"flex shrink-0 gap-2",children:[s.jsx(he,{type:"button",variant:"secondary",size:"sm",disabled:c,onClick:()=>m(!0),children:"Choose emoji"}),O?s.jsx(he,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:K,children:"Clear"}):null]})]}),s.jsx(zl,{open:d,onOpenChange:m,children:s.jsxs(qs,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[s.jsxs(Ks,{className:"space-y-1 border-b border-border px-5 py-4",children:[s.jsx(Xs,{children:"Choose emoji"}),s.jsxs(Zs,{children:["Server emojis save as"," ",s.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),s.jsxs(N5,{value:p,onValueChange:U=>h(U),className:"flex min-h-0 flex-1 flex-col",children:[s.jsxs(zg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[s.jsx(xo,{value:"server",children:"Server"}),s.jsx(xo,{value:"unicode",children:"All emojis"})]}),s.jsxs(wh,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[s.jsxs("div",{className:"relative mb-3",children:[s.jsx(ge,{icon:ad,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Search by name…",value:E,onChange:U=>N(U.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),b?s.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[b.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,s.jsx($l,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?s.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((U,q)=>s.jsx(Be,{className:"aspect-square rounded-lg"},q))}):y?s.jsxs("div",{className:"space-y-3 p-4 text-center",children:[s.jsx("p",{className:"text-sm text-destructive",children:y}),s.jsx(he,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):A.length===0?s.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):s.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:A.map(U=>{const q=M.kind==="custom"&&M.id===U.id;return s.jsx("button",{type:"button",title:`:${U.name}:`,className:fe("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>B(U),children:s.jsx("img",{src:U.url??W5(U.id,U.animated),alt:U.name,className:"size-8 object-contain",loading:"lazy"})},U.id)})})})]}),s.jsx(wh,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:s.jsx(jP,{onPick:z})})]})]})}),s.jsx(Ie,{value:O,disabled:c,onChange:U=>l(U.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const g0="BOT_TOKEN",RP="MODEL_API_KEY";function Vg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return s.jsx(_L,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return s.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[s.jsxs("div",{children:[s.jsx(ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),s.jsx(At,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(RL,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),s.jsxs(No,{value:String(n??""),disabled:o,onValueChange:a,children:[s.jsx(Ba,{id:l,className:"border-border bg-secondary/30",children:s.jsx(Eo,{placeholder:"Select…"})}),s.jsx(Ua,{children:e.options.map(d=>s.jsx(an,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=jr(String(n??"#000000"));return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Id,{value:d,onChange:a}),s.jsx(Ie,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(jr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return s.jsx(TP,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return s.jsx(OL,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===g0||n===RP||!n?"":"••••••••••••";return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(Ie,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(e.placeholder??g0))},className:"border-border bg-secondary/30"})]})}const c="border-border bg-secondary/30";return e.type==="textarea"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),s.jsx(Ld,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${c}`})]}):s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(Ie,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:c})]})}const Xe=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));Xe.displayName="Card";const it=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("flex flex-col space-y-1.5 p-6",e),...n}));it.displayName="CardHeader";const lt=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("font-semibold leading-none tracking-tight",e),...n}));lt.displayName="CardTitle";const Et=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("text-sm text-muted-foreground",e),...n}));Et.displayName="CardDescription";const Ze=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("p-6 pt-0",e),...n}));Ze.displayName="CardContent";const Gg=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("flex items-center p-6 pt-0",e),...n}));Gg.displayName="CardFooter";function x0(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function AP(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Fg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const c=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:c,label:x0(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...Fg(l,c));continue}a.push({path:c,label:x0(o),type:AP(o,l)})}return a}function MP(e){const n=Fg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function To(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function xl(e,n,a){const o=n.split("."),l=structuredClone(e);let c=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const OP=e=>{switch(e){case"success":return zP;case"info":return IP;case"warning":return PP;case"error":return $P;default:return null}},DP=Array(12).fill(0),LP=({visible:e,className:n})=>me.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},me.createElement("div",{className:"sonner-spinner"},DP.map((a,o)=>me.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),zP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),PP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),IP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),$P=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),BP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},me.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),me.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),UP=()=>{const[e,n]=me.useState(document.hidden);return me.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let kh=1;class HP{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,c=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:kh++,d=this.toasts.find(p=>p.id===c),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),d?this.toasts=this.toasts.map(p=>p.id===c?(this.publish({...p,...n,id:c,title:o}),{...p,...n,id:c,dismissible:m,title:o}):p):this.addToast({title:o,...l,dismissible:m,id:c}),c},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let c=o!==void 0,d;const m=l.then(async h=>{if(d=["resolve",h],me.isValidElement(h))c=!1,this.create({id:o,type:"default",message:h});else if(GP(h)&&!h.ok){c=!1;const g=typeof a.error=="function"?await a.error(`HTTP error! status: ${h.status}`):a.error,y=typeof a.description=="function"?await a.description(`HTTP error! status: ${h.status}`):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"error",description:y,...j})}else if(h instanceof Error){c=!1;const g=typeof a.error=="function"?await a.error(h):a.error,y=typeof a.description=="function"?await a.description(h):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"error",description:y,...j})}else if(a.success!==void 0){c=!1;const g=typeof a.success=="function"?await a.success(h):a.success,y=typeof a.description=="function"?await a.description(h):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"success",description:y,...j})}}).catch(async h=>{if(d=["reject",h],a.error!==void 0){c=!1;const b=typeof a.error=="function"?await a.error(h):a.error,g=typeof a.description=="function"?await a.description(h):a.description,w=typeof b=="object"&&!me.isValidElement(b)?b:{message:b};this.create({id:o,type:"error",description:g,...w})}}).finally(()=>{c&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),p=()=>new Promise((h,b)=>m.then(()=>d[0]==="reject"?b(d[1]):h(d[1])).catch(b));return typeof o!="string"&&typeof o!="number"?{unwrap:p}:Object.assign(o,{unwrap:p})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||kh++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const wn=new HP,VP=(e,n)=>{const a=(n==null?void 0:n.id)||kh++;return wn.addToast({title:e,...n,id:a}),a},GP=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",FP=VP,WP=()=>wn.toasts,YP=()=>wn.getActiveToasts(),Bt=Object.assign(FP,{success:wn.success,info:wn.info,warning:wn.warning,error:wn.error,custom:wn.custom,message:wn.message,promise:wn.promise,dismiss:wn.dismiss,loading:wn.loading},{getHistory:WP,getToasts:YP});_P("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function pu(e){return e.label!==void 0}const qP=3,KP="24px",XP="16px",v0=4e3,ZP=356,QP=14,JP=45,eI=200;function wr(...e){return e.filter(Boolean).join(" ")}function tI(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const nI=e=>{var n,a,o,l,c,d,m,p,h;const{invert:b,toast:g,unstyled:y,interacting:w,setHeights:j,visibleToasts:S,heights:E,index:N,toasts:k,expanded:T,removeToast:A,defaultRichColors:O,closeButton:M,style:z,cancelButtonStyle:B,actionButtonStyle:K,className:U="",descriptionClassName:q="",duration:ue,position:pe,gap:xe,expandByDefault:se,classNames:L,icons:I,closeButtonAriaLabel:H="Close toast"}=e,[Z,te]=me.useState(null),[_,D]=me.useState(null),[G,V]=me.useState(!1),[F,oe]=me.useState(!1),[ae,be]=me.useState(!1),[ve,Y]=me.useState(!1),[le,ye]=me.useState(!1),[Te,Le]=me.useState(0),[rt,ht]=me.useState(0),Mt=me.useRef(g.duration||ue||v0),Tr=me.useRef(null),_t=me.useRef(null),Ya=N===0,qa=N+1<=S,qt=g.type,dr=g.dismissible!==!1,Kt=g.className||"",ti=g.descriptionClassName||"",fr=me.useMemo(()=>E.findIndex(Me=>Me.toastId===g.id)||0,[E,g.id]),Lo=me.useMemo(()=>{var Me;return(Me=g.closeButton)!=null?Me:M},[g.closeButton,M]),Rr=me.useMemo(()=>g.duration||ue||v0,[g.duration,ue]),Xt=me.useRef(0),Qn=me.useRef(0),zo=me.useRef(0),mr=me.useRef(null),[pr,Ht]=pe.split("-"),ee=me.useMemo(()=>E.reduce((Me,Je,St)=>St>=fr?Me:Me+Je.height,0),[E,fr]),re=UP(),ke=g.invert||b,we=qt==="loading";Qn.current=me.useMemo(()=>fr*xe+ee,[fr,ee]),me.useEffect(()=>{Mt.current=Rr},[Rr]),me.useEffect(()=>{V(!0)},[]),me.useEffect(()=>{const Me=_t.current;if(Me){const Je=Me.getBoundingClientRect().height;return ht(Je),j(St=>[{toastId:g.id,height:Je,position:g.position},...St]),()=>j(St=>St.filter(kt=>kt.toastId!==g.id))}},[j,g.id]),me.useLayoutEffect(()=>{if(!G)return;const Me=_t.current,Je=Me.style.height;Me.style.height="auto";const St=Me.getBoundingClientRect().height;Me.style.height=Je,ht(St),j(kt=>kt.find(wt=>wt.toastId===g.id)?kt.map(wt=>wt.toastId===g.id?{...wt,height:St}:wt):[{toastId:g.id,height:St,position:g.position},...kt])},[G,g.title,g.description,j,g.id,g.jsx,g.action,g.cancel]);const De=me.useCallback(()=>{oe(!0),Le(Qn.current),j(Me=>Me.filter(Je=>Je.toastId!==g.id)),setTimeout(()=>{A(g)},eI)},[g,A,j,Qn]);me.useEffect(()=>{if(g.promise&&qt==="loading"||g.duration===1/0||g.type==="loading")return;let Me;return T||w||re?(()=>{if(zo.current{Mt.current!==1/0&&(Xt.current=new Date().getTime(),Me=setTimeout(()=>{g.onAutoClose==null||g.onAutoClose.call(g,g),De()},Mt.current))})(),()=>clearTimeout(Me)},[T,w,g,qt,re,De]),me.useEffect(()=>{g.delete&&(De(),g.onDismiss==null||g.onDismiss.call(g,g))},[De,g.delete]);function at(){var Me;if(I!=null&&I.loading){var Je;return me.createElement("div",{className:wr(L==null?void 0:L.loader,g==null||(Je=g.classNames)==null?void 0:Je.loader,"sonner-loader"),"data-visible":qt==="loading"},I.loading)}return me.createElement(LP,{className:wr(L==null?void 0:L.loader,g==null||(Me=g.classNames)==null?void 0:Me.loader),visible:qt==="loading"})}const ct=g.icon||(I==null?void 0:I[qt])||OP(qt);var mt,Zt;return me.createElement("li",{tabIndex:0,ref:_t,className:wr(U,Kt,L==null?void 0:L.toast,g==null||(n=g.classNames)==null?void 0:n.toast,L==null?void 0:L.default,L==null?void 0:L[qt],g==null||(a=g.classNames)==null?void 0:a[qt]),"data-sonner-toast":"","data-rich-colors":(mt=g.richColors)!=null?mt:O,"data-styled":!(g.jsx||g.unstyled||y),"data-mounted":G,"data-promise":!!g.promise,"data-swiped":le,"data-removed":F,"data-visible":qa,"data-y-position":pr,"data-x-position":Ht,"data-index":N,"data-front":Ya,"data-swiping":ae,"data-dismissible":dr,"data-type":qt,"data-invert":ke,"data-swipe-out":ve,"data-swipe-direction":_,"data-expanded":!!(T||se&&G),"data-testid":g.testId,style:{"--index":N,"--toasts-before":N,"--z-index":k.length-N,"--offset":`${F?Te:Qn.current}px`,"--initial-height":se?"auto":`${rt}px`,...z,...g.style},onDragEnd:()=>{be(!1),te(null),mr.current=null},onPointerDown:Me=>{Me.button!==2&&(we||!dr||(Tr.current=new Date,Le(Qn.current),Me.target.setPointerCapture(Me.pointerId),Me.target.tagName!=="BUTTON"&&(be(!0),mr.current={x:Me.clientX,y:Me.clientY})))},onPointerUp:()=>{var Me,Je,St;if(ve||!dr)return;mr.current=null;const kt=Number(((Me=_t.current)==null?void 0:Me.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Jn=Number(((Je=_t.current)==null?void 0:Je.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),wt=new Date().getTime()-((St=Tr.current)==null?void 0:St.getTime()),dn=Z==="x"?kt:Jn,Ka=Math.abs(dn)/wt;if(Math.abs(dn)>=JP||Ka>.11){Le(Qn.current),g.onDismiss==null||g.onDismiss.call(g,g),D(Z==="x"?kt>0?"right":"left":Jn>0?"down":"up"),De(),Y(!0);return}else{var fn,mn;(fn=_t.current)==null||fn.style.setProperty("--swipe-amount-x","0px"),(mn=_t.current)==null||mn.style.setProperty("--swipe-amount-y","0px")}ye(!1),be(!1),te(null)},onPointerMove:Me=>{var Je,St,kt;if(!mr.current||!dr||((Je=window.getSelection())==null?void 0:Je.toString().length)>0)return;const wt=Me.clientY-mr.current.y,dn=Me.clientX-mr.current.x;var Ka;const fn=(Ka=e.swipeDirections)!=null?Ka:tI(pe);!Z&&(Math.abs(dn)>1||Math.abs(wt)>1)&&te(Math.abs(dn)>Math.abs(wt)?"x":"y");let mn={x:0,y:0};const Po=er=>1/(1.5+Math.abs(er)/20);if(Z==="y"){if(fn.includes("top")||fn.includes("bottom"))if(fn.includes("top")&&wt<0||fn.includes("bottom")&&wt>0)mn.y=wt;else{const er=wt*Po(wt);mn.y=Math.abs(er)0)mn.x=dn;else{const er=dn*Po(dn);mn.x=Math.abs(er)0||Math.abs(mn.y)>0)&&ye(!0),(St=_t.current)==null||St.style.setProperty("--swipe-amount-x",`${mn.x}px`),(kt=_t.current)==null||kt.style.setProperty("--swipe-amount-y",`${mn.y}px`)}},Lo&&!g.jsx&&qt!=="loading"?me.createElement("button",{"aria-label":H,"data-disabled":we,"data-close-button":!0,onClick:we||!dr?()=>{}:()=>{De(),g.onDismiss==null||g.onDismiss.call(g,g)},className:wr(L==null?void 0:L.closeButton,g==null||(o=g.classNames)==null?void 0:o.closeButton)},(Zt=I==null?void 0:I.close)!=null?Zt:BP):null,(qt||g.icon||g.promise)&&g.icon!==null&&((I==null?void 0:I[qt])!==null||g.icon)?me.createElement("div",{"data-icon":"",className:wr(L==null?void 0:L.icon,g==null||(l=g.classNames)==null?void 0:l.icon)},g.promise||g.type==="loading"&&!g.icon?g.icon||at():null,g.type!=="loading"?ct:null):null,me.createElement("div",{"data-content":"",className:wr(L==null?void 0:L.content,g==null||(c=g.classNames)==null?void 0:c.content)},me.createElement("div",{"data-title":"",className:wr(L==null?void 0:L.title,g==null||(d=g.classNames)==null?void 0:d.title)},g.jsx?g.jsx:typeof g.title=="function"?g.title():g.title),g.description?me.createElement("div",{"data-description":"",className:wr(q,ti,L==null?void 0:L.description,g==null||(m=g.classNames)==null?void 0:m.description)},typeof g.description=="function"?g.description():g.description):null),me.isValidElement(g.cancel)?g.cancel:g.cancel&&pu(g.cancel)?me.createElement("button",{"data-button":!0,"data-cancel":!0,style:g.cancelButtonStyle||B,onClick:Me=>{pu(g.cancel)&&dr&&(g.cancel.onClick==null||g.cancel.onClick.call(g.cancel,Me),De())},className:wr(L==null?void 0:L.cancelButton,g==null||(p=g.classNames)==null?void 0:p.cancelButton)},g.cancel.label):null,me.isValidElement(g.action)?g.action:g.action&&pu(g.action)?me.createElement("button",{"data-button":!0,"data-action":!0,style:g.actionButtonStyle||K,onClick:Me=>{pu(g.action)&&(g.action.onClick==null||g.action.onClick.call(g.action,Me),!Me.defaultPrevented&&De())},className:wr(L==null?void 0:L.actionButton,g==null||(h=g.classNames)==null?void 0:h.actionButton)},g.action.label):null)};function b0(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function rI(e,n){const a={};return[e,n].forEach((o,l)=>{const c=l===1,d=c?"--mobile-offset":"--offset",m=c?XP:KP;function p(h){["top","right","bottom","left"].forEach(b=>{a[`${d}-${b}`]=typeof h=="number"?`${h}px`:h})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(h=>{o[h]===void 0?a[`${d}-${h}`]=m:a[`${d}-${h}`]=typeof o[h]=="number"?`${o[h]}px`:o[h]}):p(m)}),a}const aI=me.forwardRef(function(n,a){const{id:o,invert:l,position:c="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:h,offset:b,mobileOffset:g,theme:y="light",richColors:w,duration:j,style:S,visibleToasts:E=qP,toastOptions:N,dir:k=b0(),gap:T=QP,icons:A,containerAriaLabel:O="Notifications"}=n,[M,z]=me.useState([]),B=me.useMemo(()=>o?M.filter(G=>G.toasterId===o):M.filter(G=>!G.toasterId),[M,o]),K=me.useMemo(()=>Array.from(new Set([c].concat(B.filter(G=>G.position).map(G=>G.position)))),[B,c]),[U,q]=me.useState([]),[ue,pe]=me.useState(!1),[xe,se]=me.useState(!1),[L,I]=me.useState(y!=="system"?y:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=me.useRef(null),Z=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),te=me.useRef(null),_=me.useRef(!1),D=me.useCallback(G=>{z(V=>{var F;return(F=V.find(oe=>oe.id===G.id))!=null&&F.delete||wn.dismiss(G.id),V.filter(({id:oe})=>oe!==G.id)})},[]);return me.useEffect(()=>wn.subscribe(G=>{if(G.dismiss){requestAnimationFrame(()=>{z(V=>V.map(F=>F.id===G.id?{...F,delete:!0}:F))});return}setTimeout(()=>{X0.flushSync(()=>{z(V=>{const F=V.findIndex(oe=>oe.id===G.id);return F!==-1?[...V.slice(0,F),{...V[F],...G},...V.slice(F+1)]:[G,...V]})})})}),[M]),me.useEffect(()=>{if(y!=="system"){I(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?I("dark"):I("light")),typeof window>"u")return;const G=window.matchMedia("(prefers-color-scheme: dark)");try{G.addEventListener("change",({matches:V})=>{I(V?"dark":"light")})}catch{G.addListener(({matches:F})=>{try{I(F?"dark":"light")}catch(oe){console.error(oe)}})}},[y]),me.useEffect(()=>{M.length<=1&&pe(!1)},[M]),me.useEffect(()=>{const G=V=>{var F;if(d.every(be=>V[be]||V.code===be)){var ae;pe(!0),(ae=H.current)==null||ae.focus()}V.code==="Escape"&&(document.activeElement===H.current||(F=H.current)!=null&&F.contains(document.activeElement))&&pe(!1)};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[d]),me.useEffect(()=>{if(H.current)return()=>{te.current&&(te.current.focus({preventScroll:!0}),te.current=null,_.current=!1)}},[H.current]),me.createElement("section",{ref:a,"aria-label":`${O} ${Z}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},K.map((G,V)=>{var F;const[oe,ae]=G.split("-");return B.length?me.createElement("ol",{key:G,dir:k==="auto"?b0():k,tabIndex:-1,ref:H,className:h,"data-sonner-toaster":!0,"data-sonner-theme":L,"data-y-position":oe,"data-x-position":ae,style:{"--front-toast-height":`${((F=U[0])==null?void 0:F.height)||0}px`,"--width":`${ZP}px`,"--gap":`${T}px`,...S,...rI(b,g)},onBlur:be=>{_.current&&!be.currentTarget.contains(be.relatedTarget)&&(_.current=!1,te.current&&(te.current.focus({preventScroll:!0}),te.current=null))},onFocus:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||_.current||(_.current=!0,te.current=be.relatedTarget)},onMouseEnter:()=>pe(!0),onMouseMove:()=>pe(!0),onMouseLeave:()=>{xe||pe(!1)},onDragEnd:()=>pe(!1),onPointerDown:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||se(!0)},onPointerUp:()=>se(!1)},B.filter(be=>!be.position&&V===0||be.position===G).map((be,ve)=>{var Y,le;return me.createElement(nI,{key:be.id,icons:A,index:ve,toast:be,defaultRichColors:w,duration:(Y=N==null?void 0:N.duration)!=null?Y:j,className:N==null?void 0:N.className,descriptionClassName:N==null?void 0:N.descriptionClassName,invert:l,visibleToasts:E,closeButton:(le=N==null?void 0:N.closeButton)!=null?le:p,interacting:xe,position:G,style:N==null?void 0:N.style,unstyled:N==null?void 0:N.unstyled,classNames:N==null?void 0:N.classNames,cancelButtonStyle:N==null?void 0:N.cancelButtonStyle,actionButtonStyle:N==null?void 0:N.actionButtonStyle,closeButtonAriaLabel:N==null?void 0:N.closeButtonAriaLabel,removeToast:D,toasts:B.filter(ye=>ye.position==be.position),heights:U.filter(ye=>ye.position==be.position),setHeights:q,expandByDefault:m,gap:T,expanded:ue,swipeDirections:n.swipeDirections})})):null}))});async function ku(e){const n=Bt.loading("Saving changes…");try{const a=await e();if(Bt.success("Changes saved",{id:n}),a.botRestart){const o=Bt.loading("Restarting bot…");a.botRestart.success?Bt.success("Bot started",{id:o}):Bt.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Bt.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function oI({filename:e}){const{canEditConfig:n}=Ut(),a=!n("supportbot"),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),S=f.useCallback(async()=>{p(!0),y(""),j("");try{const O=(await Ee.getAddonConfigJson(e)).data??{};l(O),d(structuredClone(O))}catch(A){y(A instanceof Error?A.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{S()},[S]);const E=o?MP(o):null;function N(A,O){l(M=>M&&xl(M,A,O))}async function k(){if(!(a||!o)){b(!0),y(""),j("");try{const A=await ku(()=>Ee.saveAddonConfig(e,o));j(A.message||"Saved."),await S()}catch(A){y(A instanceof Error?A.message:"Save failed")}finally{b(!1)}}}if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o||!E)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load"})});const T=c&&JSON.stringify(o)!==JSON.stringify(c);return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(he,{variant:"outline",size:"sm",onClick:S,disabled:m||h,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:k,disabled:h||!T,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]}),g?s.jsxs(We,{variant:"destructive",children:[s.jsx(ge,{icon:Bh,size:18}),s.jsx(Ye,{children:g})]}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,E.map(A=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:A.title}),A.description?s.jsx(Et,{children:A.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:A.fields.map(O=>s.jsx("div",{className:O.type==="textarea"||O.type==="stringList"?"sm:col-span-2":"",children:s.jsx(Vg,{field:O,value:To(o,O.path),readOnly:a,onChange:M=>N(O.path,M)})},O.path))})]},A.title))]})}function sI(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function iI(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=Fg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",p=l.get(m)??[];p.push(d),l.set(m,p)}const c=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:sI(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((p,h)=>p.path.localeCompare(h.path))}));return[...e,...c]}function y0(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,o=Array(n);a=e.length?e.apply(this,l):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};hu.initial(e),hu.handler(n);var a={current:e},o=Ji(MI)(a,n),l=Ji(AI)(a),c=Ji(hu.changes)(e),d=Ji(RI)(a);function m(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(b){return b};return hu.selector(h),h(a.current)}function p(h){bI(o,l,c,d)(h)}return[m,p]}function RI(e,n){return vl(n)?n(e.current):n}function AI(e,n){return e.current=j0(j0({},e.current),n),n}function MI(e,n,a){return vl(n)?n(e.current):Object.keys(a).forEach(function(o){var l;return(l=n[o])===null||l===void 0?void 0:l.call(n,e.current[o])}),a}var _I={create:TI},OI={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function DI(e){return function n(){for(var a=this,o=arguments.length,l=new Array(o),c=0;c=e.length?e.apply(this,l):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:e,n)}var Mn=s$;function al(){}function Rs(e,n,a,o){return i$(e,o)||l$(e,n,a,o)}function i$(e,n){return e.editor.getModel(eN(e,n))}function l$(e,n,a,o){return e.editor.createModel(n,a,o?eN(e,o):void 0)}function eN(e,n){return e.Uri.parse(n)}function c$({original:e,modified:n,language:a,originalLanguage:o,modifiedLanguage:l,originalModelPath:c,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:h="light",loading:b="Loading...",options:g={},height:y="100%",width:w="100%",className:j,wrapperProps:S={},beforeMount:E=al,onMount:N=al}){let[k,T]=f.useState(!1),[A,O]=f.useState(!0),M=f.useRef(null),z=f.useRef(null),B=f.useRef(null),K=f.useRef(N),U=f.useRef(E),q=f.useRef(!1);J5(()=>{let se=Z5.init();return se.then(L=>(z.current=L)&&O(!1)).catch(L=>(L==null?void 0:L.type)!=="cancelation"&&console.error("Monaco initialization: error:",L)),()=>M.current?xe():se.cancel()}),Mn(()=>{if(M.current&&z.current){let se=M.current.getOriginalEditor(),L=Rs(z.current,e||"",o||a||"text",c||"");L!==se.getModel()&&se.setModel(L)}},[c],k),Mn(()=>{if(M.current&&z.current){let se=M.current.getModifiedEditor(),L=Rs(z.current,n||"",l||a||"text",d||"");L!==se.getModel()&&se.setModel(L)}},[d],k),Mn(()=>{let se=M.current.getModifiedEditor();se.getOption(z.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],k),Mn(()=>{var se,L;(L=(se=M.current)==null?void 0:se.getModel())==null||L.original.setValue(e||"")},[e],k),Mn(()=>{let{original:se,modified:L}=M.current.getModel();z.current.editor.setModelLanguage(se,o||a||"text"),z.current.editor.setModelLanguage(L,l||a||"text")},[a,o,l],k),Mn(()=>{var se;(se=z.current)==null||se.editor.setTheme(h)},[h],k),Mn(()=>{var se;(se=M.current)==null||se.updateOptions(g)},[g],k);let ue=f.useCallback(()=>{var I;if(!z.current)return;U.current(z.current);let se=Rs(z.current,e||"",o||a||"text",c||""),L=Rs(z.current,n||"",l||a||"text",d||"");(I=M.current)==null||I.setModel({original:se,modified:L})},[a,n,l,e,o,c,d]),pe=f.useCallback(()=>{var se;!q.current&&B.current&&(M.current=z.current.editor.createDiffEditor(B.current,{automaticLayout:!0,...g}),ue(),(se=z.current)==null||se.editor.setTheme(h),T(!0),q.current=!0)},[g,h,ue]);f.useEffect(()=>{k&&K.current(M.current,z.current)},[k]),f.useEffect(()=>{!A&&!k&&pe()},[A,k,pe]);function xe(){var L,I,H,Z;let se=(L=M.current)==null?void 0:L.getModel();m||((I=se==null?void 0:se.original)==null||I.dispose()),p||((H=se==null?void 0:se.modified)==null||H.dispose()),(Z=M.current)==null||Z.dispose()}return me.createElement(Q5,{width:w,height:y,isEditorReady:k,loading:b,_ref:B,className:j,wrapperProps:S})}var u$=c$;f.memo(u$);function d$(e){let n=f.useRef();return f.useEffect(()=>{n.current=e},[e]),n.current}var f$=d$,gu=new Map;function m$({defaultValue:e,defaultLanguage:n,defaultPath:a,value:o,language:l,path:c,theme:d="light",line:m,loading:p="Loading...",options:h={},overrideServices:b={},saveViewState:g=!0,keepCurrentModel:y=!1,width:w="100%",height:j="100%",className:S,wrapperProps:E={},beforeMount:N=al,onMount:k=al,onChange:T,onValidate:A=al}){let[O,M]=f.useState(!1),[z,B]=f.useState(!0),K=f.useRef(null),U=f.useRef(null),q=f.useRef(null),ue=f.useRef(k),pe=f.useRef(N),xe=f.useRef(),se=f.useRef(o),L=f$(c),I=f.useRef(!1),H=f.useRef(!1);J5(()=>{let _=Z5.init();return _.then(D=>(K.current=D)&&B(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>U.current?te():_.cancel()}),Mn(()=>{var D,G,V,F;let _=Rs(K.current,e||o||"",n||l||"",c||a||"");_!==((D=U.current)==null?void 0:D.getModel())&&(g&&gu.set(L,(G=U.current)==null?void 0:G.saveViewState()),(V=U.current)==null||V.setModel(_),g&&((F=U.current)==null||F.restoreViewState(gu.get(c))))},[c],O),Mn(()=>{var _;(_=U.current)==null||_.updateOptions(h)},[h],O),Mn(()=>{!U.current||o===void 0||(U.current.getOption(K.current.editor.EditorOption.readOnly)?U.current.setValue(o):o!==U.current.getValue()&&(H.current=!0,U.current.executeEdits("",[{range:U.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),U.current.pushUndoStop(),H.current=!1))},[o],O),Mn(()=>{var D,G;let _=(D=U.current)==null?void 0:D.getModel();_&&l&&((G=K.current)==null||G.editor.setModelLanguage(_,l))},[l],O),Mn(()=>{var _;m!==void 0&&((_=U.current)==null||_.revealLine(m))},[m],O),Mn(()=>{var _;(_=K.current)==null||_.editor.setTheme(d)},[d],O);let Z=f.useCallback(()=>{var _;if(!(!q.current||!K.current)&&!I.current){pe.current(K.current);let D=c||a,G=Rs(K.current,o||e||"",n||l||"",D||"");U.current=(_=K.current)==null?void 0:_.editor.create(q.current,{model:G,automaticLayout:!0,...h},b),g&&U.current.restoreViewState(gu.get(D)),K.current.editor.setTheme(d),m!==void 0&&U.current.revealLine(m),M(!0),I.current=!0}},[e,n,a,o,l,c,h,b,g,d,m]);f.useEffect(()=>{O&&ue.current(U.current,K.current)},[O]),f.useEffect(()=>{!z&&!O&&Z()},[z,O,Z]),se.current=o,f.useEffect(()=>{var _,D;O&&T&&((_=xe.current)==null||_.dispose(),xe.current=(D=U.current)==null?void 0:D.onDidChangeModelContent(G=>{H.current||T(U.current.getValue(),G)}))},[O,T]),f.useEffect(()=>{if(O){let _=K.current.editor.onDidChangeMarkers(D=>{var V;let G=(V=U.current.getModel())==null?void 0:V.uri;if(G&&D.find(F=>F.path===G.path)){let F=K.current.editor.getModelMarkers({resource:G});A==null||A(F)}});return()=>{_==null||_.dispose()}}return()=>{}},[O,A]);function te(){var _,D;(_=xe.current)==null||_.dispose(),y?g&&gu.set(c,U.current.saveViewState()):(D=U.current.getModel())==null||D.dispose(),U.current.dispose()}return me.createElement(Q5,{width:w,height:j,isEditorReady:O,loading:p,_ref:q,className:S,wrapperProps:E})}var p$=m$,h$=f.memo(p$),g$=h$;function x$(e){return e!==null&&typeof e=="object"&&"Command"in e}function v$(e){return Object.entries(e).filter(([,n])=>x$(n)).map(([n,a])=>({key:n,...a}))}function b$({data:e,onChange:n}){const a=v$(e);function o(l,c){const d=e[l];n({...e,[l]:{...d,...c}})}return a.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(ge,{icon:Da,size:18})}),s.jsx(lt,{className:"text-base",children:l.key})]}),s.jsxs(Ze,{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),s.jsx(At,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:c=>o(l.key,{Enabled:c})})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(ze,{children:"Slash command"}),s.jsx(Ie,{value:l.Command??"",onChange:c=>o(l.key,{Command:c.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(ze,{children:"Description"}),s.jsx(Ie,{value:l.Description??"",onChange:c=>o(l.key,{Description:c.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function y$(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=To(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=To(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function w$(e,n,a,o){const l={};for(const c of n)for(const d of c.fields){const m=To(a,d.path),p=To(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(l[`${e}:${d.path}`]=m)}return l}function C$({configFile:e}){const{canEditConfig:n}=Ut(),a=!n(e),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState("visual"),[N,k]=f.useState(""),[T,A]=f.useState(""),[O]=Ju(),[M,z]=f.useState(()=>O.get("tab")||null),B=D_(e),K=f.useMemo(()=>!B||B==="commands"||!o?B:iI(B,o),[B,o]);f.useEffect(()=>{var I;if(K&&K!=="commands"){const H=O.get("tab");if(H&&K.find(Z=>Z.title.toLowerCase()===H.toLowerCase())){const Z=K.find(te=>te.title.toLowerCase()===H.toLowerCase());Z&&Z.title!==M&&z(Z.title)}else(!M||!K.find(Z=>Z.title===M))&&z(((I=K[0])==null?void 0:I.title)||null)}},[K,M,O]);const U=f.useCallback(async()=>{p(!0),y(""),j("");try{const H=(await Ee.getConfigJson(e)).data??{},Z=y$(e,H);l(Z),d(Z);const _=(await Ee.getConfigRaw(e)).data??"",D=E8(_,e);k(D),A(D)}catch(I){y(I instanceof Error?I.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{U()},[U]);function q(I,H){l(Z=>Z&&xl(Z,I,H))}async function ue(){if(!(a||N===T)){b(!0),y(""),j("");try{const I=await ku(()=>Ee.saveConfigRaw(e,N));j(I.message||"Config saved."),await U()}catch(I){y(I instanceof Error?I.message:"Save failed")}finally{b(!1)}}}async function pe(){if(!(a||!o||!c)){if(S==="yaml"){await ue();return}b(!0),y(""),j("");try{if(B==="commands"){const I={};for(const Z of Object.keys(o))JSON.stringify(o[Z])!==JSON.stringify(c[Z])&&(I[`${e}:${Z}`]=o[Z]);if(Object.keys(I).length===0){j("No changes to save.");return}const H=await ku(()=>Ee.updateConfigFields(I));j(H.message||"")}else if(K&&K!=="commands"){const I=w$(e,K,o,c);if(Object.keys(I).length===0){j("No changes to save.");return}const H=await ku(()=>Ee.updateConfigFields(I));j(H.message||"")}await U()}catch(I){y(I instanceof Error?I.message:"Save failed")}finally{b(!1)}}}if(B===null)return s.jsx(We,{children:s.jsx(Ye,{children:"No visual editor available for this file."})});if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load"})});const xe=c&&JSON.stringify(o)!==JSON.stringify(c),L=S==="yaml"?N!==T:xe;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(he,{type:"button",variant:S==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>E("visual"),children:"Visual"}),s.jsx(he,{type:"button",variant:S==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>E("yaml"),children:"YAML"})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[L?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(he,{variant:"outline",size:"sm",onClick:U,disabled:m||h,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:pe,disabled:h||!L,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]})]}),g?s.jsxs(We,{variant:"destructive",children:[s.jsx(ge,{icon:Bh,size:18}),s.jsx(Ye,{children:g})]}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,S==="yaml"?s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:"Raw YAML"}),s.jsx(Et,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),s.jsx(Ze,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:s.jsx(g$,{height:"100%",language:"yaml",theme:"vs-dark",value:N,onChange:I=>k(I||""),options:{readOnly:a,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):B==="commands"?s.jsx(b$,{data:o,onChange:I=>l(I)}):K&&K!=="commands"?s.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[s.jsx("nav",{className:"flex flex-col gap-1",children:K.map(I=>s.jsx("button",{onClick:()=>z(I.title),className:fe("text-left px-3 py-2 text-sm rounded-md transition-colors",M===I.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:I.title},I.title))}),s.jsx("div",{className:"min-w-0",children:K.filter(I=>I.title===M).map(I=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:I.title}),I.description?s.jsx(Et,{children:I.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:I.fields.map(H=>s.jsx("div",{className:H.type==="textarea"||H.type==="stringList"?"sm:col-span-2":"",children:s.jsx(Vg,{field:H,value:To(o,H.path),readOnly:a,onChange:Z=>q(H.path,Z)})},H.path))})]},I.title))})]}):null]})}const S$=Ee.listConfigs(),j$={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function N$(){var T,A;const{permissions:e,canViewConfig:n}=Ut(),{files:a}=f2(),[o,l]=Ju(),c=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>S$.filter(O=>n(O)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),h=f.useMemo(()=>[...m,...p.map(O=>el(O))],[m,p]),b=h[0]??"",[g,y]=f.useState(()=>c&&h.includes(c)?c:b);if(f.useEffect(()=>{c&&h.includes(c)?y(c):h.includes(g)||(y(b),b&&l({file:b}))},[c,h,g,b,l]),h.length===0)return s.jsx(Qr,{to:Wh(e),replace:!0});const w=O8(g),j=(w==null?void 0:w.type)==="addon",S=j?w.file:null,E=j?m2(S):j$[g]??"Configuration",N=j?!!((T=e==null?void 0:e.configs.supportbot)!=null&&T.edit):e?!!((A=e.configs[g])!=null&&A.edit):!1,k=j?S:`${g}.yml`;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),s.jsx("p",{className:"text-muted-foreground",children:N?`Edit ${k} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${k} — you do not have permission to save changes.`})]}),s.jsx("div",{className:"mt-6",children:j&&S?s.jsx(oI,{filename:S},S):s.jsx(C$,{configFile:g},g)})]})}const E$={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function k$(e){return e?E$[e]||"Sign-in failed. Please try again.":""}function T$(){const{branding:e}=od(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ut(),[l]=Ju(),c=f.useMemo(()=>k$(l.get("error")),[l]);return!a&&n?s.jsx(Qr,{to:"/",replace:!0}):s.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:s.jsxs(Xe,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),s.jsxs(it,{className:"space-y-6 pt-10 pb-4 text-center",children:[s.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:s.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),s.jsxs("div",{children:[s.jsx(lt,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:e.title||"SupportBot"}),s.jsx(Et,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),s.jsxs(Ze,{className:"space-y-6 pb-10",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),s.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",s.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),c?s.jsx(We,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:s.jsx(Ye,{className:"font-medium",children:c})}):null,s.jsxs(he,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[s.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),s.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:s.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const Os=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:Hh},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:y8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:oy},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:rd},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:Fp},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:oy}];function R$(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function A$({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return s.jsx("div",{className:"min-h-svh bg-background",children:s.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[s.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?s.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):s.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:s.jsx(ge,{icon:Hh,size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),s.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function M$({currentIndex:e,validation:n}){const a=(e+1)/Os.length*100;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[s.jsxs("span",{children:["Step ",e+1," of ",Os.length]}),s.jsxs("span",{children:[Math.round(a),"%"]})]}),s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),s.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:Os.map((o,l)=>{var h;const c=R$(o.id),d=(h=n[c])==null?void 0:h.ok,m=l===e,p=ls.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx(ge,{icon:ed,size:14}),o.globalName||o.username,s.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?s.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:e.error})}):null}function O$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",s.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",s.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"botToken",children:"Bot token"}),s.jsx(Ie,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:c=>n({...e,botToken:c.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.botToken}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function D$({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"secretKey",children:"Session secret"}),s.jsx(Ie,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.secretKey}),s.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[s.jsx(he,{type:"button",variant:"outline",onClick:c,children:"Generate secure secret"}),s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function L$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",s.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{htmlFor:"clientId",children:"Client ID"}),s.jsx(Ie,{id:"clientId",value:e.clientId,onChange:c=>n({...e,clientId:c.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{htmlFor:"clientSecret",children:"Client Secret"}),s.jsx(Ie,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:c=>n({...e,clientSecret:c.target.value}),className:"h-11 font-mono text-sm"})]})]}),s.jsx(ei,{result:a.oauth}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function z$({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",s.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"redirectUri",children:"Redirect URI"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Ie,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),s.jsx(he,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:s.jsx(ge,{icon:t2,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?s.jsx(ei,{result:a.redirectUri}):s.jsx(We,{className:"border-border bg-secondary",children:s.jsx(Ye,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function P$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",s.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",s.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"owners",children:"Owner user IDs"}),s.jsx(Ld,{id:"owners",value:e.ownerUserIds,onChange:c=>n({...e,ownerUserIds:c.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),s.jsx(ei,{result:a.owners}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function I$({onContinue:e}){return s.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:s.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[s.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:s.jsx(ge,{icon:ed,size:40})}),s.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),s.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",s.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),s.jsx(We,{className:"mt-6 text-left",children:s.jsx(Ye,{children:"After restarting, sign in with Discord to open the dashboard."})}),s.jsx(he,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $$({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:c}){const d=e===Os.length-1;return s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(he,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[s.jsx(ge,{icon:J0,size:18,className:"mr-1"}),"Back"]}),s.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?s.jsx(he,{type:"button",size:"lg",disabled:a||n,onClick:c,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):s.jsxs(he,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",s.jsx(ge,{icon:Uh,size:18,className:"ml-1"})]})})]})}function B$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),s.jsx(Ie,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:e.emeraldApiKey,onChange:c=>n({...e,emeraldApiKey:c.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.emeraldApi}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o,onClick:l,children:o?"Checking…":e.emeraldApiKey?"Verify key":"Skip step"})})]})}function U$(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function H$(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function E0(e){return e==="oauth"?"oauth":e==="owners"?"owners":e==="emeraldApi"?"emeraldApi":e}function V$(){const e=Ro(),{branding:n}=od(),{loading:a,error:o,refresh:l,status:c}=Pj(),[d,m]=f.useState(0),[p,h]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[b,g]=f.useState({}),[y,w]=f.useState(!1),[j,S]=f.useState(!1),[E,N]=f.useState(""),[k,T]=f.useState(!1),A=Os[d];f.useEffect(()=>{c!=null&&c.suggestedRedirectUri&&!p.redirectUri&&h(q=>({...q,redirectUri:c.suggestedRedirectUri}))},[c==null?void 0:c.suggestedRedirectUri,p.redirectUri]);const O=f.useMemo(()=>({botToken:p.botToken,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:H$(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function M(){w(!0),N("");try{const q=await Ee.validateSetup(O);return g(ue=>{var pe;return{...ue,...(pe=q.data)==null?void 0:pe.results}}),q.data}catch(q){return N(q instanceof Error?q.message:"Validation failed"),null}finally{w(!1)}}async function z(){var pe,xe;const q=E0(A.id),ue=await M();return!!((xe=(pe=ue==null?void 0:ue.results)==null?void 0:pe[q])!=null&&xe.ok)}async function B(){const q=E0(A.id),ue=b[q];!(ue!=null&&ue.ok)&&!await z()||m(pe=>Math.min(pe+1,Os.length-1))}async function K(){S(!0),N("");try{const q=await M();if(!(q!=null&&q.ok)){N("Fix the steps marked with errors before finishing.");return}await Ee.completeSetup(O),T(!0)}catch(q){N(q instanceof Error?q.message:"Could not save setup")}finally{S(!1)}}function U(){const q={values:p,setValues:h,validation:b,validating:y};switch(A.id){case"botToken":return s.jsx(O$,{...q,onValidate:()=>void z()});case"secretKey":return s.jsx(D$,{...q,onGenerate:()=>h(ue=>({...ue,secretKey:U$()})),onValidate:()=>void z()});case"oauth":return s.jsx(L$,{...q,onValidate:()=>void z()});case"redirectUri":return s.jsx(z$,{values:p,setValues:h,validation:b});case"owners":return s.jsx(P$,{...q,onValidate:()=>void z()});case"emeraldApi":return s.jsx(B$,{...q,onValidate:()=>void z()})}}return a?s.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:s.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[s.jsx(Be,{className:"h-14 w-64"}),s.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[s.jsx(Be,{className:"hidden h-80 lg:block"}),s.jsx(Be,{className:"h-[520px] rounded-2xl"})]})]})}):s.jsxs(A$,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?s.jsx(We,{variant:"destructive",className:"mb-6",children:s.jsx(Ye,{children:o})}):null,E?s.jsx(We,{variant:"destructive",className:"mb-6",children:s.jsx(Ye,{children:E})}):null,k?s.jsx(I$,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):s.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[s.jsx(M$,{currentIndex:d,validation:b}),s.jsx(_$,{step:A,footer:s.jsx($$,{currentIndex:d,validating:y,saving:j,onBack:()=>m(q=>Math.max(0,q-1)),onNext:()=>void B(),onFinish:()=>void K()}),children:U()})]})]})}const G$={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function F$({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return s.jsxs(Ft,{to:a,className:fe("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[s.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:s.jsx(ge,{icon:n,size:20})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate font-semibold",children:e}),s.jsx("span",{className:fe("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",G$[l]),children:o})]})]})}function W$({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),p=d-m/100*d;return s.jsxs("div",{className:fe("relative inline-flex",a),children:[s.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:l})]}),s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[s.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),s.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const Y$={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function q$({title:e,subtitle:n,icon:a,href:o,status:l,meta:c="Open in dashboard"}){const d=Y$[l];return s.jsxs(Ft,{to:o,className:fe("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsx("span",{className:fe("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),s.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),s.jsx("span",{className:fe("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),s.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ge,{icon:a,size:16})}),s.jsx("span",{className:"text-xs text-muted-foreground",children:c})]}),s.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[s.jsx(ge,{icon:rd,size:14,className:"opacity-60"}),s.jsx(ge,{icon:vo,size:14,className:"opacity-60 group-hover:text-primary"}),s.jsx(ge,{icon:Uh,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function K$({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:Fh(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return s.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[s.jsxs(lt,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),s.jsx(he,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),s.jsxs(Ze,{className:"pt-0",children:[s.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>s.jsxs(Ia,{className:"size-9 border-2 border-card ring-0",children:[s.jsx(Co,{src:e.bot.avatar,alt:""}),s.jsx($a,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?s.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),s.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),s.jsx(Xe,{className:"overflow-hidden border-border bg-secondary",children:s.jsx(Ze,{className:"p-5",children:s.jsxs("div",{className:"space-y-3",children:[s.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:s.jsx(ge,{icon:b8,size:22})}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),s.jsx(he,{asChild:!0,size:"sm",className:"w-full",children:s.jsxs(Ft,{to:"/settings",children:[s.jsx(ge,{icon:td,size:16,className:"mr-2"}),"Open settings"]})})]})})}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[s.jsx(lt,{className:"text-sm font-semibold",children:"System activity"}),s.jsx(he,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),s.jsxs(Ze,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>s.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[s.jsxs(Ia,{className:"size-9",children:[s.jsx(Co,{src:e.bot.avatar,alt:e.bot.username}),s.jsx($a,{className:"bg-secondary text-xs",children:"SB"})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),s.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),s.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),s.jsx(he,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:s.jsxs(Ft,{to:"/system",children:["All system details",s.jsx(ge,{icon:Uh,size:14})]})})]})]}),s.jsx(Xe,{className:"border-border bg-card",children:s.jsxs(Ze,{className:"flex items-center gap-3 p-4",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ge,{icon:vo,size:18})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const tN={todo:"Needs setup",progress:"In progress",done:"Active"};function Th(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function X$(){return s.jsxs("div",{className:"flex gap-6",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-44 rounded-2xl"}),s.jsx(Be,{className:"h-44 rounded-2xl"})]}),s.jsx(Be,{className:"h-8 w-48"}),s.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>s.jsx(Be,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),s.jsx(Be,{className:"h-8 w-56"}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>s.jsx(Be,{className:"h-20 rounded-2xl"},n))})]}),s.jsx(Be,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function Z$(){const{stats:e,loading:n,error:a}=sd(),[o,l]=f.useState("all"),c=f.useMemo(()=>{if(!e)return 0;const b=e.tickets.total||0;return b===0?100:Math.round(e.tickets.closed/b*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?Ts.filter(b=>b.category==="tickets"):o==="all"?Ts:Ts.filter(b=>b.category===o),[o]);if(n)return s.jsx(X$,{});if(a||!e)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:a||"No stats available"})});const m=e.tickets.open,p=e.tickets.closed,h=e.tickets.total;return s.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Xe,{className:"overflow-hidden border-border bg-card",children:s.jsxs(Ze,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",s.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),s.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),s.jsx(he,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:s.jsx(Ft,{to:"/transcripts",children:"Review"})})]}),s.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[s.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),s.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),s.jsx(Xe,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:s.jsxs(Ze,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),s.jsxs("ul",{className:"space-y-1.5 text-sm",children:[s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[h," total"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),s.jsx(W$,{percent:c,size:120})]})})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),s.jsx(N5,{value:o,onValueChange:b=>l(b),children:s.jsxs(zg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[s.jsx(xo,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),s.jsx(xo,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),s.jsx(xo,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),L_.filter(b=>b.id!=="all").map(b=>s.jsx(xo,{value:b.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:b.label},b.id))]})})]}),s.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:ll,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:ed,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(b=>{const g=Th(b.id,e.modules,b.description);return{id:b.id,title:b.title,subtitle:g.subtitle,icon:b.icon,href:b.href,status:g.status,meta:g.status==="done"?"View settings":"Configure"}})).map(b=>s.jsx(q$,{title:b.title,subtitle:b.subtitle,icon:b.icon,href:b.href,status:b.status,meta:b.meta},b.id))})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),s.jsx(Ft,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Ts.slice(0,4).map(b=>{const g=Th(b.id,e.modules);return s.jsx(F$,{title:b.title,icon:b.icon,href:b.href,badge:tN[g.status],status:g.status},b.id)})})]})]}),s.jsx(K$,{stats:e})]})}function Q$(){const{permissions:e}=Ut();return qn(e,"overview")?s.jsx(Z$,{}):s.jsx(Qr,{to:Wh(e),replace:!0})}function Kr({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ut();return a?s.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?qn(l,e)?s.jsx(s.Fragment,{children:n}):s.jsx(Qr,{to:Wh(l),replace:!0}):s.jsx(Qr,{to:"/login",replace:!0})}function J$(){const{hasPermission:e}=Ut(),n=e("settings.update"),a=Ro(),[o,l]=f.useState([]),[c,d]=f.useState(""),[m,p]=f.useState(!0),[h,b]=f.useState(""),[g,y]=f.useState(""),[w,j]=f.useState(null),S=f.useCallback(async()=>{p(!0),b("");try{const N=await Ee.getAddonsCatalog();N.data&&(l(N.data.addons),d(N.data.repository))}catch(N){b(N instanceof Error?N.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(N){if(n){j(N.id),y(""),b("");try{const k=await Ee.installAddon(N.id);y(k.message||`${N.name} installed.`),await S();const T=N.configFiles[0];T&&a(`/configs?file=${el(T)}`)}catch(k){b(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),s.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:S,disabled:m,children:[s.jsx(ge,{icon:r2,size:16,className:fe("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),h?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:h})}):null,g?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:g})}):null,s.jsxs("section",{className:"space-y-4",children:[s.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"})]}):s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(N=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs(lt,{className:"flex items-center gap-2 text-lg",children:[s.jsx(ge,{icon:Gh,size:20,className:"text-primary"}),N.name]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(An,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:N.price===0||!N.price?"Free":`$${N.price}`}),N.installed?s.jsxs(An,{variant:"secondary",className:"shrink-0 gap-1",children:[s.jsx(ge,{icon:j8,size:14}),"Installed"]}):null]})]}),s.jsx(Et,{children:N.description})]}),s.jsxs(Ze,{className:"space-y-2 text-xs text-muted-foreground",children:[N.is_external?s.jsxs("p",{children:["Available on: ",s.jsx("span",{className:"font-medium text-foreground",children:N.external_store||"External Store"})]}):null,N.configFiles&&N.configFiles.length>0?s.jsxs("p",{children:["Config:"," ",N.configFiles.map((k,T)=>s.jsxs("span",{children:[T>0?", ":null,s.jsx(Ft,{to:`/configs?file=${el(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),s.jsxs(Gg,{className:"flex flex-wrap gap-2",children:[N.is_external?s.jsx(he,{variant:"outline",size:"sm",asChild:!0,children:s.jsx("a",{href:N.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,N.installed&&N.configFiles&&N.configFiles[0]?s.jsx(he,{size:"sm",variant:"secondary",asChild:!0,children:s.jsx(Ft,{to:`/configs?file=${el(N.configFiles[0])}`,children:"Edit config"})}):null,N.installed?s.jsx(he,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):N.is_external?null:s.jsxs(he,{size:"sm",disabled:!n||w===N.id,onClick:()=>E(N),children:[s.jsx(ge,{icon:td,size:14,className:"mr-1"}),w===N.id?"Installing…":"Install"]})]})]},N.id))})]})]})}function eB(){const{permissions:e}=Ut(),[n,a]=f.useState(!1),[o,l]=f.useState(!1),[c,d]=f.useState(""),[m,p]=f.useState(""),[h,b]=f.useState(""),[g,y]=f.useState("Administrator"),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState("General"),T=i2(e,"supportbot"),A=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Bt.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),l(!1);try{const O=await Ee.buildAddon({name:m.toLowerCase(),description:h||"A custom command",permission:g,embed:{title:w,description:S||"Hello from your custom command!",color:N}});l(!0),d(O.message||"Restart required."),Bt.success(`Addon ${m}.js created successfully!`)}catch(O){Bt.error(O instanceof Error?O.message:"Failed to build addon")}finally{a(!1)}};return T?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),s.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?s.jsxs(We,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[s.jsx(Vy,{className:"h-4 w-4"}),s.jsxs(Ye,{className:"ml-2",children:["Successfully built ",s.jsxs("strong",{children:[m,".js"]}),"! ",c]})]}):null,s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Xe,{children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Command Details"}),s.jsx(Et,{children:"Configure how users trigger the command."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Command Name"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-muted-foreground",children:"/"}),s.jsx(Ie,{placeholder:"ping",value:m,onChange:O=>p(O.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Description"}),s.jsx(Ie,{placeholder:"Replies with a custom embed",value:h,onChange:O=>b(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Required Permission"}),s.jsxs(No,{value:g,onValueChange:y,children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsxs(Ua,{children:[s.jsx(an,{value:"none",children:"@everyone"}),s.jsx(an,{value:"Administrator",children:"Administrator"}),s.jsx(an,{value:"ManageMessages",children:"Manage Messages"}),s.jsx(an,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),s.jsxs(Xe,{children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Response Embed"}),s.jsx(Et,{children:"What the bot will reply with."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Title (Optional)"}),s.jsx(Ie,{placeholder:"Hello!",value:w,onChange:O=>j(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Description"}),s.jsx(Ld,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:S,onChange:O=>E(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Color"}),s.jsxs(No,{value:N,onValueChange:k,children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsxs(Ua,{children:[s.jsx(an,{value:"General",children:"Theme General"}),s.jsx(an,{value:"Success",children:"Theme Success"}),s.jsx(an,{value:"Warning",children:"Theme Warning"}),s.jsx(an,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs(Xe,{className:"sticky top-6 border-primary/20",children:[s.jsx(it,{children:s.jsxs(lt,{className:"text-sm font-medium flex items-center gap-2",children:[s.jsx(ge,{icon:C8,size:16,className:"text-primary"}),"Live Preview"]})}),s.jsx(Ze,{children:s.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),s.jsxs("div",{className:"flex-1 space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),s.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[s.jsx(Vy,{size:10})," BOT"]}),s.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),s.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[w&&s.jsx("div",{className:"mb-1 font-semibold text-white",children:w}),s.jsx("div",{className:"whitespace-pre-wrap",children:S||"Hello from your custom command!"})]})]})]})})}),s.jsx(Gg,{children:s.jsxs(he,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:A,children:[s.jsx(ge,{icon:Da,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):s.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const Wg="supportbot-dashboard-accent",ol="#45b46c",tB=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function nB(e){const n=jr(e,ol),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,c=Math.max(a,o,l),d=Math.min(a,o,l),m=(c+d)/2;let p=0,h=0;if(c!==d){const b=c-d;switch(h=m>.5?b/(2-c-d):b/(c+d),c){case a:p=((o-l)/b+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function iB({canEdit:e}){const[n,a]=f.useState(!1),[o,l]=f.useState(""),[c,d]=f.useState(!1);async function m(){if(e){a(!0),l("");try{const p=await Ee.resetDashboard();l(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){l(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return e?s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),s.jsxs(zl,{open:c,onOpenChange:d,children:[s.jsx(x_,{asChild:!0,children:s.jsx(he,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),s.jsxs(qs,{children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:"Are you absolutely sure?"}),s.jsx(Zs,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&s.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),s.jsxs(Pl,{children:[s.jsx(he,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),s.jsx(he,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function lB({canEdit:e}){const{branding:n,setBrandingLocal:a}=od(),o=f.useRef(null),[l,c]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,h]=f.useState(!1),[b,g]=f.useState(!1),[y,w]=f.useState("");f.useEffect(()=>{c(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function S(){if(e){h(!0),w("");try{const T=await Ee.updateBranding({title:l,pageTitle:d});T.data&&a(T.data),w(T.message||"Branding saved.")}catch(T){w(T instanceof Error?T.message:"Save failed")}finally{h(!1)}}}async function E(T){if(!(!e||!T)){g(!0),w("");try{const A=await sB(T),O=await Ee.uploadBrandingFavicon(A);O.data&&a(O.data),w(O.message||"Favicon uploaded.")}catch(A){w(A instanceof Error?A.message:"Upload failed")}finally{g(!1),o.current&&(o.current.value="")}}}async function N(){if(e){g(!0),w("");try{const T=await Ee.removeBrandingFavicon();T.data&&a(T.data),w(T.message||"Favicon removed.")}catch(T){w(T instanceof Error?T.message:"Remove failed")}finally{g(!1)}}}const k=l.trim()!==n.title||d.trim()!==n.pageTitle;return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"brand-title",children:"Sidebar title"}),s.jsx(Ie,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:T=>c(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),s.jsx(Ie,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),e?s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(he,{type:"button",disabled:p||!k,onClick:()=>void S(),children:p?"Saving…":"Save titles"}),y&&k?s.jsx("span",{className:"text-xs text-muted-foreground",children:y}):null]}):null]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?s.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-2"}):s.jsx(ge,{icon:d8,size:24,className:"text-muted-foreground/50"})}),s.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||b,onChange:T=>{var A;return void E(((A=T.target.files)==null?void 0:A[0])??null)}}),s.jsxs("div",{className:"flex flex-col gap-2",children:[e?s.jsxs("div",{className:"flex gap-2",children:[s.jsx(he,{type:"button",variant:"secondary",disabled:b,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:b?"Uploading…":"Upload Favicon"}),n.hasFavicon?s.jsx(he,{type:"button",variant:"destructive",disabled:b,onClick:()=>void N(),children:"Remove"}):null]}):s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!k&&y?s.jsx("span",{className:"text-xs text-muted-foreground",children:y}):null]})]})]})]})}function cB(){var g,y,w,j,S,E,N,k,T,A,O;const{hasPermission:e}=Ut(),n=e("settings.update"),[a,o]=f.useState(!0),[l,c]=f.useState(!1),[d,m]=f.useState(""),[p,h]=f.useState(null);f.useEffect(()=>{Ee.getConfigJson("api").then(M=>{M.data&&h(M.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function b(){var M,z,B,K,U,q,ue,pe,xe,se,L;if(!(!n||!p)){c(!0),m("");try{const I={"api:API.Port":(M=p.API)==null?void 0:M.Port,"api:API.EmeraldAPIKey":(z=p.API)==null?void 0:z.EmeraldAPIKey,"api:API.TrustProxy":(B=p.API)==null?void 0:B.TrustProxy,"api:API.OAuth.Enabled":(U=(K=p.API)==null?void 0:K.OAuth)==null?void 0:U.Enabled,"api:API.OAuth.ClientId":(ue=(q=p.API)==null?void 0:q.OAuth)==null?void 0:ue.ClientId,"api:API.OAuth.ClientSecret":(xe=(pe=p.API)==null?void 0:pe.OAuth)==null?void 0:xe.ClientSecret,"api:API.OAuth.RedirectUri":(L=(se=p.API)==null?void 0:se.OAuth)==null?void 0:L.RedirectUri};await Ee.updateConfigFields(I),m("API settings saved and backend restarted.")}catch(I){m(I instanceof Error?I.message:"Save failed")}finally{c(!1)}}}return a?s.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"API Port"}),s.jsx(Ie,{type:"number",value:((g=p.API)==null?void 0:g.Port)||"",disabled:!n,onChange:M=>h({...p,API:{...p.API,Port:parseInt(M.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Emerald API Key"}),s.jsx(Ie,{type:"password",value:((y=p.API)==null?void 0:y.EmeraldAPIKey)||"",disabled:!n,onChange:M=>h({...p,API:{...p.API,EmeraldAPIKey:M.target.value}}),className:"border-border bg-secondary/30"})]})]}),s.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[s.jsx(At,{checked:((w=p.API)==null?void 0:w.TrustProxy)||!1,disabled:!n,onCheckedChange:M=>h({...p,API:{...p.API,TrustProxy:M}})}),s.jsx(ze,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),s.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[s.jsx(At,{checked:((S=(j=p.API)==null?void 0:j.OAuth)==null?void 0:S.Enabled)||!1,disabled:!n,onCheckedChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,Enabled:M}}})}}),s.jsx(ze,{className:"text-sm",children:"Enable OAuth"})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Client ID"}),s.jsx(Ie,{value:((N=(E=p.API)==null?void 0:E.OAuth)==null?void 0:N.ClientId)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientId:M.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Client Secret"}),s.jsx(Ie,{type:"password",value:((T=(k=p.API)==null?void 0:k.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientSecret:M.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{children:"Redirect URI"}),s.jsx(Ie,{value:((O=(A=p.API)==null?void 0:A.OAuth)==null?void 0:O.RedirectUri)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,RedirectUri:M.target.value}}})},className:"border-border bg-secondary/30"}),s.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?s.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[s.jsx(he,{type:"button",disabled:l,onClick:()=>void b(),children:l?"Saving…":"Save API Config"}),d?s.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function uB(){const{hasPermission:e}=Ut(),n=e("settings.update"),[a,o]=f.useState(null),[l,c]=f.useState(!0),[d,m]=f.useState(!1),[p,h]=f.useState(""),[b,g]=f.useState(""),[y,w]=f.useState(()=>rN()??ol),[j,S]=f.useState(""),[E,N]=f.useState("appearance"),k=f.useCallback(async()=>{c(!0),h("");try{const A=await Ee.checkForUpdates();A.data&&o(A.data)}catch(A){h(A instanceof Error?A.message:"Could not check for updates")}finally{c(!1)}},[]);f.useEffect(()=>{k()},[k]);async function T(A){if(A.updateAvailable){m(!0),h(""),g("");try{const O=await Ee.runUpdate(A.id,A.latest,A.zipUrl);g(O.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await k()}catch(O){h(O instanceof Error?O.message:"Update failed")}finally{m(!1)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),s.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),s.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[s.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:s.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[s.jsx(he,{variant:E==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("appearance"),children:"Appearance"}),s.jsx(he,{variant:E==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("api"),children:"API Config"}),s.jsx(he,{variant:E==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("updates"),children:"Update Checker"}),n&&s.jsx(he,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${E==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>N("danger"),children:"Danger Zone"})]})}),s.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[E==="appearance"&&s.jsx("div",{className:"space-y-6",children:s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Dashboard appearance"}),s.jsx(Et,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsx(lB,{canEdit:n}),s.jsxs("div",{className:"border-t border-border pt-4",children:[s.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),s.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Id,{value:y,onChange:A=>{w(A),k0(A),S("Accent updated.")}}),s.jsx(Ie,{id:"accent-colour",value:y,onChange:A=>w(A.target.value),onBlur:()=>{const A=jr(y,ol);w(A),k0(A),S("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),s.jsx(he,{type:"button",variant:"outline",onClick:()=>{aB(),w(ol),S("Reset to default purple.")},children:"Reset to default"})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[s.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),s.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),s.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?s.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]})}),E==="danger"&&n&&s.jsxs(Xe,{className:"border-destructive/50 bg-destructive/5",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg text-destructive",children:"Danger Zone"}),s.jsx(Et,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),s.jsx(Ze,{children:s.jsx(iB,{canEdit:n})})]}),E==="api"&&s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"API Configuration"}),s.jsx(Et,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),s.jsx(Ze,{children:s.jsx(cB,{})})]}),E==="updates"&&s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Software updates"}),s.jsx(Et,{children:"Manage updates for the bot and dashboard."})]}),s.jsxs(Ze,{className:"space-y-4",children:[l?s.jsx(Be,{className:"h-24 w-full"}):a&&a.length>0?s.jsx("div",{className:"space-y-4",children:a.map(A=>s.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("p",{className:"font-medium text-sm",children:[s.jsx("a",{href:A.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:A.name})," ","(",A.branch," branch)"]}),s.jsxs("div",{className:"flex gap-x-4 text-sm",children:[s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",A.current]})]}),s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",A.latest]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[A.updateAvailable?s.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):s.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),A.updateAvailable&&n?s.jsxs(he,{type:"button",size:"sm",onClick:()=>void T(A),disabled:d,children:[d?s.jsx(ge,{icon:r2,size:16,className:"mr-2 animate-spin"}):s.jsx(ge,{icon:td,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,A.updateAvailable&&!n?s.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},A.id))}):null,p?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:p})}):null,b?s.jsx(We,{children:s.jsx(Ye,{children:b})}):null,s.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:s.jsxs(he,{type:"button",variant:"outline",onClick:k,disabled:l||d,children:[s.jsx(ge,{icon:or,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function Yg(e){const[n,a]=f.useState(!1),o=f.useRef(e);return o.current=e,f.useEffect(()=>{let l=null,c=null;const d=()=>{l=new EventSource("/api/stream"),l.onopen=()=>{a(!0)},l.addEventListener("connected",()=>{a(!0)}),l.addEventListener("metrics",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onMetrics)==null||h.call(p,b)}catch{}}),l.addEventListener("log",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onLog)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessage)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message_deleted",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessageDeleted)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message_updated",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessageUpdated)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_created",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketCreated)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_closed",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketClosed)==null||h.call(p,b)}catch{}}),l.onerror=()=>{a(!1),l==null||l.close(),c=window.setTimeout(d,4e3)}};return d(),()=>{c&&window.clearTimeout(c),l&&l.close()}},[]),{connected:n}}function Ct({label:e,value:n,mono:a=!1}){return s.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),s.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const dB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function fB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function mB(){var E;const{stats:e,loading:n,error:a,refresh:o}=sd(),[l,c]=f.useState(null),[d,m]=f.useState(null),[p,h]=f.useState(!1),[b,g]=f.useState(null),{connected:y}=Yg({onMetrics:N=>{g(N)}}),w=f.useCallback(async()=>{const[N,k]=await Promise.all([Ee.getGuildStatus().catch(()=>null),Ee.health().catch(()=>null)]);N!=null&&N.data&&c(N.data),k!=null&&k.success&&k.data&&m({dashboard:k.data.dashboard,botReady:k.data.botReady,oauthEnabled:k.data.oauthEnabled,setupComplete:k.data.setupComplete})},[]);f.useEffect(()=>{w()},[w]);async function j(){h(!0);try{await Promise.all([o(),w()])}finally{h(!1)}}if(n&&!e)return s.jsxs("div",{className:"space-y-6",children:[s.jsx(Be,{className:"h-10 w-64"}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-56 rounded-2xl"}),s.jsx(Be,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:a||"Could not load system details."})});const S=e.bot.ping<200;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(he,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:s.jsxs(Ft,{to:"/",children:[s.jsx(ge,{icon:J0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),s.jsxs(he,{type:"button",variant:"outline",disabled:p,onClick:()=>void j(),children:[s.jsx(ge,{icon:or,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Discord bot"}),s.jsx(Et,{children:"Connection and identity"})]}),s.jsxs(Ze,{children:[s.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[s.jsxs(Ia,{className:"size-12",children:[s.jsx(Co,{src:e.bot.avatar,alt:e.bot.username}),s.jsx($a,{children:"SB"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:e.bot.username}),s.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),s.jsxs("dl",{children:[s.jsx(Ct,{label:"Version",value:`v${e.bot.version}`,mono:!0}),s.jsx(Ct,{label:"Gateway latency",value:s.jsxs("span",{className:S?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),s.jsx(Ct,{label:"Process uptime",value:Fh(e.bot.uptime)}),s.jsx(Ct,{label:"Connected servers",value:e.servers.toLocaleString()}),s.jsx(Ct,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?s.jsx(Ct,{label:"Invite link",value:s.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(lt,{className:"text-lg",children:"Host machine"}),s.jsx(Et,{children:"Server resources running this instance"})]}),s.jsxs(An,{variant:y?"default":"outline",className:"text-xs",children:[s.jsx("span",{className:`mr-1.5 inline-block h-2 w-2 rounded-full ${y?"bg-emerald-500 animate-pulse":"bg-muted"}`}),y?"Live Stream":"Polling"]})]}),s.jsx(Ze,{children:s.jsxs("dl",{children:[s.jsx(Ct,{label:"Memory used",value:b?`${(b.ram_used_mb/1024).toFixed(2)} GB / ${(b.ram_total_mb/1024).toFixed(2)} GB`:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),s.jsx(Ct,{label:"Memory usage",value:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:(b?b.ram_percent:e.hosting.ram_percent)>85?"text-amber-500 font-bold":"text-foreground font-medium",children:[b?b.ram_percent:e.hosting.ram_percent,"%"]}),s.jsx("div",{className:"w-24 h-2 bg-secondary rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${b?b.ram_percent:e.hosting.ram_percent}%`}})})]})}),s.jsx(Ct,{label:"CPU load (1 min avg)",value:b?String(b.cpu_load):e.hosting.cpu_load,mono:!0}),s.jsx(Ct,{label:"Host uptime",value:e.hosting.uptime})]})})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Tickets"}),s.jsx(Et,{children:"Database snapshot"})]}),s.jsx(Ze,{children:s.jsxs("dl",{children:[s.jsx(Ct,{label:"Total tickets",value:e.tickets.total}),s.jsx(Ct,{label:"Open",value:s.jsx("span",{className:"text-primary",children:e.tickets.open})}),s.jsx(Ct,{label:"Closed",value:e.tickets.closed}),s.jsx(Ct,{label:"Transcripts",value:s.jsx(Ft,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Guild health"}),s.jsx(Et,{children:"Configured server and membership"})]}),s.jsx(Ze,{children:l?s.jsxs("dl",{children:[s.jsx(Ct,{label:"Status",value:s.jsx("span",{className:fB(l.status),children:dB[l.status]})}),s.jsx(Ct,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?s.jsx(Ct,{label:"Configured server",value:`${l.configuredGuild.name} (${((E=l.configuredGuild.memberCount)==null?void 0:E.toLocaleString())??"?"} members)`}):null,l.message?s.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?s.jsxs("div",{className:"mt-3 space-y-2",children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),s.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(N=>s.jsxs("li",{className:"font-mono text-xs",children:[N.name," · ",N.id]},N.id))})]}):null]}):s.jsx(Be,{className:"h-24 w-full"})})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Dashboard services"}),s.jsx(Et,{children:"API and authentication"})]}),s.jsx(Ze,{children:d?s.jsxs("dl",{className:"max-w-xl",children:[s.jsx(Ct,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),s.jsx(Ct,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),s.jsx(Ct,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),s.jsx(Ct,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),s.jsx(Ct,{label:"Software updates",value:s.jsx(Ft,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),s.jsx(Ct,{label:"Logs",value:s.jsx(Ft,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):s.jsx(Be,{className:"h-32 w-full max-w-xl"})})]}),e.modules?s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Module setup status"}),s.jsx(Et,{children:"Which features are configured and active"})]}),s.jsx(Ze,{children:s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Ts.map(N=>{const k=Th(N.id,e.modules);return s.jsxs(Ft,{to:N.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-sm font-medium",children:N.title}),s.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:k.subtitle})]}),s.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:tN[k.status]})]},N.id)})})})]}):null]})}function pB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const hB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],gB=["Output","Warn","Error"],xB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},vB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},qu=2e3,bB=2e3;function Rh(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function yB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,p)=>Rh(m,p))),c=[];for(let m=0;mqu?d.slice(d.length-qu):d}function wB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,c]=f.useState(""),[d,m]=f.useState(!1),[p,h]=f.useState(!0),[b,g]=f.useState("all"),[y,w]=f.useState(""),[j,S]=f.useState(!0),[E,N]=f.useState(""),k=f.useRef(null),T=f.useRef(null),A=f.useRef(d);A.current=d;const O=f.useMemo(()=>b==="all"?gB:[b],[b]),M=f.useCallback(U=>{A.current||b!=="all"&&U.type!==b||(n(q=>{const ue=[...q,U];return ue.length>qu?ue.slice(ue.length-qu):ue}),S(!0))},[b]);Yg({onLog:M});const z=f.useCallback(async U=>{var pe,xe;const q=await Ee.getLogs({types:O,cursor:U?void 0:k.current??void 0,tail:U?500:0}),ue=((pe=q.data)==null?void 0:pe.entries)??[];return k.current=((xe=q.data)==null?void 0:xe.cursor)??{},n(se=>yB(se,ue,U)),ue.length},[O]),B=f.useCallback(async()=>{var U;o(!0),c(""),k.current=null;try{const pe=(((U=(await Ee.getLogsMeta()).data)==null?void 0:U.files)??[]).filter(xe=>xe.file).map(xe=>`${xe.type}: ${xe.file}`).join(" · ");N(pe||"No log files yet — output appears when the bot runs."),await z(!0),S(!0)}catch(q){c(q instanceof Error?q.message:"Failed to load logs"),S(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const U=window.setInterval(async()=>{if(!A.current)try{await z(!1),S(!0),c("")}catch(q){S(!1),c(q instanceof Error?q.message:"Live update failed")}},bB);return()=>window.clearInterval(U)},[d,a,z]),f.useEffect(()=>{if(!p||d)return;const U=T.current;U&&(U.scrollTop=U.scrollHeight)},[e,p,d]);const K=f.useMemo(()=>e.filter(U=>{var ue;if(b!=="all"&&U.type!==b)return!1;if(!y.trim())return!0;const q=y.toLowerCase();return U.message.toLowerCase().includes(q)||(((ue=U.timestamp)==null?void 0:ue.toLowerCase().includes(q))??!1)}),[e,b,y]);return s.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),E?s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:E}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:fe("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),s.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:l})}):null,s.jsxs(Xe,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[s.jsxs(it,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(lt,{className:"text-base font-medium",children:["Console",a?null:s.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[K.length," line",K.length===1?"":"s"]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[s.jsx(At,{id:"auto-scroll",checked:p,onCheckedChange:h}),s.jsx(ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",onClick:()=>m(U=>!U),children:[s.jsx(ge,{icon:d?v8:x8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[s.jsx(ge,{icon:or,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[s.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:hB.map(U=>s.jsx(he,{type:"button",variant:b===U.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>g(U.id),children:U.label},U.id))}),s.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[s.jsx(ge,{icon:ad,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Filter lines…",value:y,onChange:U=>w(U.target.value),className:"h-9 pl-9"})]})]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-0",children:a?s.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((U,q)=>s.jsx(Be,{className:"h-4 w-full"},q))}):s.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:K.length===0?s.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):s.jsx("ul",{className:"space-y-1",children:K.map((U,q)=>s.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[s.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:pB(U.timestamp)}),s.jsx("span",{className:fe("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",vB[U.type]),children:U.type}),s.jsx("span",{className:fe("min-w-0 flex-1 whitespace-pre-wrap break-words",xB[U.type]),children:U.message||" "})]},Rh(U,q)))})})})]})]})}const CB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],SB=450;function jB(e,n){return n&&e!=="viewer"}function NB(){const{user:e,hasPermission:n}=Ut(),a=!jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState(!1),T=f.useRef(null),A=f.useCallback(async()=>{var K;p(!0),y(""),j("");try{const q=(await Ee.getTranscriptTemplate()).data??null;if(q){const ue={...q,Typography:{...q.Typography,FontFamily:d5((K=q.Typography)==null?void 0:K.FontFamily)}};l(ue),d(structuredClone(ue))}}catch(U){y(U instanceof Error?U.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{A()},[A]);const O=f.useCallback(async K=>{k(!0);try{const U=await Ee.previewTranscriptTemplate(K);E(U)}catch{E("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{O(o)},SB),()=>{T.current&&clearTimeout(T.current)}},[o,O]);function M(K,U){l(q=>q&&xl(q,K,U))}async function z(){if(!(a||!o)){b(!0),y(""),j("");try{const K=await Ee.saveTranscriptTemplate(o);j(K.message||"Saved."),d(structuredClone(o))}catch(K){y(K instanceof Error?K.message:"Save failed")}finally{b(!1)}}}const B=o&&c&&JSON.stringify(o)!==JSON.stringify(c);return m?s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-96 rounded-xl"}),s.jsx(Be,{className:"h-96 rounded-xl"})]}):o?s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),s.jsxs("div",{className:"flex items-center gap-2",children:[B?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:z,disabled:h||!B,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save appearance"]})]})]}),g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,s.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[s.jsx(EB,{data:o,readOnly:a,onPatch:M}),s.jsxs(Xe,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(it,{className:"pb-2",children:[s.jsx(lt,{className:"text-base",children:"Live preview"}),s.jsxs(Et,{children:["Sample ticket with your current settings",N?" · updating…":""]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-4 pt-0",children:s.jsx("iframe",{title:"Transcript template preview",srcDoc:S,className:fe("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",N&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load template"})})}function EB({data:e,readOnly:n,onPatch:a}){return s.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:CB.map(o=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:o.title}),o.description?s.jsx(Et,{children:o.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>s.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:s.jsx(Vg,{field:l,value:To(e,l.path),readOnly:n,onChange:c=>a(l.path,c)})},l.path))})]},o.title))})}function kB(e,n){return n&&e!=="viewer"}function TB(){const{user:e,hasPermission:n}=Ut(),a=!kB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[c,d]=f.useState(!0),[m,p]=f.useState(!1),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),S=f.useCallback(async()=>{var k,T,A;d(!0),y(""),j("");try{const M=(await Ee.getTranscriptSettings()).data;M&&l({autoDelete:{enabled:!!((k=M.autoDelete)!=null&&k.enabled),afterDays:((T=M.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((A=M.publicAccess)!=null&&A.enabled)}})}catch(O){y(O instanceof Error?O.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(){if(!(!o||a)){p(!0),y(""),j("");try{const k=await Ee.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){y(k instanceof Error?k.message:"Failed to save settings")}finally{p(!1)}}}async function N(){var k,T;if(!a){b(!0),y(""),j("");try{const A=await Ee.purgeTranscripts();j(A.message??((k=A.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((T=A.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(A){y(A instanceof Error?A.message:"Purge failed")}finally{b(!1)}}}return c?s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-40 w-full rounded-xl"}),s.jsx(Be,{className:"h-40 w-full rounded-xl"})]}):o?s.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?s.jsx(We,{children:s.jsx(Ye,{children:"You have view-only access. An admin or editor can change these settings."})}):null,g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,w?s.jsx(We,{children:s.jsx(Ye,{children:w})}):null,s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-base",children:"Auto-delete"}),s.jsx(Et,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:k.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),s.jsx(Ie,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",disabled:a||h,onClick:()=>void N(),children:[s.jsx(ge,{icon:or,size:16,className:fe(h&&"animate-spin")}),"Run cleanup now"]})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-base",children:"Public transcripts"}),s.jsxs(Et,{children:["When enabled, anyone with the link can view a transcript at"," ",s.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),s.jsx(Ze,{children:s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(T=>T&&{...T,publicAccess:{enabled:k.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:s.jsxs(he,{type:"button",disabled:m,onClick:()=>void E(),children:[s.jsx(ge,{icon:nd,size:16}),m?"Saving…":"Save settings"]})]}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:"Could not load transcript settings."})})}function RB(e,n){return n&&e!=="viewer"}function T0(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function R0(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function AB(){var G;const{user:e,hasPermission:n}=Ut(),a=RB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[c,d]=f.useState([]),[m,p]=f.useState(null),[h,b]=f.useState(!0),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState(0),[T,A]=f.useState(!1),[O,M]=f.useState(!1),[z,B]=f.useState(!1),[K,U]=f.useState(!1),q=f.useCallback(async()=>{b(!0),j("");try{const F=(await Ee.listTranscripts()).data??[];d(F),p(oe=>{var ae;return oe&&F.some(be=>be.id===oe)?oe:((ae=F[0])==null?void 0:ae.id)??null})}catch(V){j(V instanceof Error?V.message:"Failed to load transcripts")}finally{b(!1)}},[]);f.useEffect(()=>{q()},[q]),f.useEffect(()=>{o==="browse"&&Ee.getTranscriptSettings().then(V=>{var F,oe;B(!!((oe=(F=V.data)==null?void 0:F.publicAccess)!=null&&oe.enabled))}).catch(()=>B(!1))},[o]);const ue=f.useMemo(()=>{if(!S.trim())return c;const V=S.toLowerCase();return c.filter(F=>F.id.includes(V)||F.filename.toLowerCase().includes(V)||F.ticketName&&F.ticketName.toLowerCase().includes(V))},[c,S]),pe=f.useMemo(()=>c.find(V=>V.id===m)??null,[c,m]),xe=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,L=m&&z?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function I(V){y(""),p(V),k(F=>F+1)}function H(){xe&&window.open(xe,"_blank","noopener,noreferrer")}function Z(){L&&window.open(L,"_blank","noopener,noreferrer")}async function te(){if(L)try{await navigator.clipboard.writeText(L),U(!0),window.setTimeout(()=>U(!1),2e3)}catch{y("Could not copy link to clipboard.")}}async function _(){var F;if(!m||!a)return;const V=((F=pe==null?void 0:pe.ticketName)==null?void 0:F.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${V}? This cannot be undone.`)){M(!0),y("");try{await Ee.deleteTranscript(m),await q()}catch(oe){y(oe instanceof Error?oe.message:"Failed to delete transcript")}finally{M(!1)}}}async function D(){if(!(!se||!pe)){A(!0),y("");try{const V=await fetch(se,{credentials:"include"});if(!V.ok){const be=await V.json().catch(()=>({}));throw new Error(be.error||`Download failed (${V.status})`)}const F=await V.blob(),oe=URL.createObjectURL(F),ae=document.createElement("a");ae.href=oe,ae.download=pe.filename,ae.click(),URL.revokeObjectURL(oe)}catch(V){y(V instanceof Error?V.message:"Failed to download transcript")}finally{A(!1)}}}return s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(he,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),s.jsx(he,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),s.jsx(he,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>q(),disabled:h,children:[s.jsx(ge,{icon:or,size:16,className:fe(h&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?s.jsx(NB,{}):o==="settings"?s.jsx(TB,{}):s.jsxs(s.Fragment,{children:[w?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:w})}):null,s.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[s.jsxs(Xe,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[s.jsxs(it,{className:"space-y-3 pb-3",children:[s.jsxs(lt,{className:"text-base font-medium",children:["Saved transcripts",!h&&c.length>0?s.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",c.length,")"]}):null]}),s.jsxs("div",{className:"relative",children:[s.jsx(ge,{icon:ad,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Search by ticket name or channel ID…",value:S,onChange:V=>E(V.target.value),className:"pl-9"})]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-0 pb-4",children:s.jsx($l,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:h?s.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((V,F)=>s.jsx(Be,{className:"h-16 w-full rounded-lg"},F))}):ue.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[s.jsx(ge,{icon:il,size:32,className:"opacity-40"}),s.jsx("p",{children:c.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):s.jsx("ul",{className:"space-y-1.5",children:ue.map(V=>{var ae;const F=V.id===m,oe=((ae=V.ticketName)==null?void 0:ae.trim())||`Channel ${V.id}`;return s.jsx("li",{children:s.jsxs("button",{type:"button",onClick:()=>I(V.id),className:fe("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",F?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[s.jsx("p",{className:"truncate text-sm font-medium",children:oe}),s.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[R0(V.createdAt),V.size!=null?` · ${T0(V.size)}`:""]})]})},V.id)})})})})]}),s.jsxs(Xe,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx(lt,{className:"truncate text-base font-medium",children:pe?((G=pe.ticketName)==null?void 0:G.trim())||`Channel ${pe.id}`:"Preview"}),pe?s.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[R0(pe.createdAt),pe.size!=null?` · ${T0(pe.size)}`:""]}):null]}),s.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[L?s.jsxs(s.Fragment,{children:[s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>void te(),children:[s.jsx(ge,{icon:t2,size:16}),K?"Copied":"Copy link"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:Z,children:[s.jsx(ge,{icon:rd,size:16}),"Public page"]})]}):null,s.jsxs(he,{variant:"outline",size:"sm",disabled:!xe,onClick:H,children:[s.jsx(ge,{icon:s8,size:16}),"Open tab"]}),s.jsxs(he,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void D(),children:[s.jsx(ge,{icon:td,size:16}),T?"Saving…":"Download"]}),a?s.jsxs(he,{variant:"outline",size:"sm",disabled:!m||O,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[s.jsx(ge,{icon:wl,size:16}),O?"Deleting…":"Delete"]}):null]})]}),s.jsxs(Ze,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,pe&&xe?s.jsx("iframe",{title:`Transcript ${pe.id}`,src:xe,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},N):s.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[s.jsx(ge,{icon:il,size:40,className:"opacity-30"}),s.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function MB(){const[e,n]=f.useState([]),[a,o]=f.useState(""),[l,c]=f.useState(!0),[d,m]=f.useState(""),[p,h]=f.useState(null),[b,g]=f.useState(!1),[y,w]=f.useState(!1),[j,S]=f.useState([]),[E,N]=f.useState(!1),[k,T]=f.useState(""),[A,O]=f.useState([]),[M,z]=f.useState(!1),[B,K]=f.useState(null),[U,q]=f.useState(!1),[ue,pe]=f.useState(""),[xe,se]=f.useState(null),[L,I]=f.useState(""),[H,Z]=f.useState(!1),[te,_]=f.useState(null),[D,G]=f.useState(""),[V,F]=f.useState(null),oe=ee=>{_(ee),G("Closed via Web Dashboard"),Z(!0)},ae=async()=>{if(!te)return;const ee=te.ticket_id;F(ee);try{await Ee.closeTicket(ee,D||"Closed via Web Dashboard"),Bt.success("Ticket closed and transcript saved."),n(re=>re.filter(ke=>ke.ticket_id!==ee)),(p==null?void 0:p.ticket_id)===ee&&(g(!1),w(!1),h(null)),Z(!1),_(null)}catch(re){Bt.error(re instanceof Error?re.message:"Failed to close ticket.")}finally{F(null)}},be=f.useRef(null),ve=f.useRef(null),Y=()=>{var ee;(ee=be.current)==null||ee.scrollIntoView({behavior:"smooth"})},le=f.useCallback(async()=>{c(!0),m("");try{const ee=await Ee.listOpenTickets();ee.data&&(o(ee.data.guildId),n(ee.data.tickets.sort((re,ke)=>ke.created_at-re.created_at)))}catch(ee){m(ee instanceof Error?ee.message:"Failed to load open tickets")}finally{c(!1)}},[]);f.useEffect(()=>{le()},[le]),f.useEffect(()=>{Ee.getGuildResources().then(ee=>{ee.data&&K(ee.data)}).catch(()=>{})},[]);const ye=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&(S(re=>re.some(ke=>ke.id===ee.message.id)?re:[...re,ee.message]),setTimeout(Y,100))},[p]),Te=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&S(re=>re.filter(ke=>ke.id!==ee.messageId))},[p]),Le=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&S(re=>re.map(ke=>ke.id===ee.messageId?{...ke,content:ee.content}:ke))},[p]),rt=f.useCallback(ee=>{n(re=>re.some(ke=>ke.ticket_id===ee.ticket_id)?re:[ee,...re]),Bt.info("New Ticket Created",{description:`#${ee.ticket_id} - ${ee.subject||"No Subject"}`})},[]),ht=f.useCallback(ee=>{n(re=>re.filter(ke=>ke.ticket_id!==ee.ticket_id)),(p==null?void 0:p.ticket_id)===ee.ticket_id&&Bt.warning("Active ticket was closed in Discord.")},[p]);Yg({onTicketMessage:ye,onTicketMessageDeleted:Te,onTicketMessageUpdated:Le,onTicketCreated:rt,onTicketClosed:ht});const Mt=async ee=>{var re;h(ee),g(!0),N(!0),S([]),O([]),se(null);try{const ke=await Ee.getTicketMessages(ee.ticket_id);(re=ke.data)!=null&&re.messages&&(S(ke.data.messages),setTimeout(Y,150))}catch(ke){Bt.error(ke instanceof Error?ke.message:"Failed to fetch messages")}finally{N(!1)}},Tr=ee=>{const re=Array.from(ee.target.files||[]);re.length&&(re.forEach(ke=>{const we=new FileReader;we.onload=De=>{var ct;const at=(ct=De.target)==null?void 0:ct.result;O(mt=>[...mt,{filename:ke.name,data:at,previewUrl:ke.type.startsWith("image/")?at:void 0,sizeMb:(ke.size/1024/1024).toFixed(2)}])},we.readAsDataURL(ke)}),ve.current&&(ve.current.value=""))},_t=ee=>{O(re=>re.filter((ke,we)=>we!==ee))},Ya=async ee=>{var we;if(ee.preventDefault(),!k.trim()&&!A.length||!p||M)return;const re=k.trim(),ke=[...A];z(!0),T(""),O([]),q(!1);try{const De=await Ee.me().catch(()=>null),at=((we=De==null?void 0:De.data)==null?void 0:we.username)||"Staff",ct=await Ee.sendTicketReply(p.ticket_id,re,at,ke.map(mt=>({filename:mt.filename,data:mt.data})));ct.data&&(S(mt=>mt.some(Zt=>Zt.id===ct.data.id)?mt:[...mt,{id:ct.data.id,author:ct.data.author,content:ct.data.content,attachments:ct.data.attachments||[],createdAt:ct.data.createdAt}]),setTimeout(Y,100))}catch(De){Bt.error(De instanceof Error?De.message:"Failed to send reply to Discord."),T(re),O(ke)}finally{z(!1)}},qa=async ee=>{if(p)try{await Ee.deleteTicketMessage(p.ticket_id,ee),S(re=>re.filter(ke=>ke.id!==ee)),Bt.success("Message deleted in Discord.")}catch(re){Bt.error(re instanceof Error?re.message:"Failed to delete message.")}},qt=ee=>{se(ee.id),I(ee.content)},dr=()=>{se(null),I("")},Kt=async ee=>{if(!(!p||!L.trim()))try{await Ee.editTicketMessage(p.ticket_id,ee,L.trim()),S(re=>re.map(ke=>ke.id===ee?{...ke,content:L.trim()}:ke)),se(null),Bt.success("Message updated in Discord.")}catch(re){Bt.error(re instanceof Error?re.message:"Failed to edit message.")}},ti=ee=>{const re=ee.target.value;T(re);const ke=ee.target.selectionStart||re.length,we=re.slice(0,ke),De=we.lastIndexOf("@");if(De!==-1&&!we.slice(De).includes(" ")){const at=we.slice(De+1).toLowerCase();pe(at),q(!0)}else q(!1)},fr=(ee,re,ke)=>{const we=k.lastIndexOf("@"),De=k.slice(0,we),at=ke?`<@&${re}>`:`<@${re}>`;T(`${De}${at} `),q(!1)},Lo=ee=>{const re=Math.floor((Date.now()-ee)/1e3);return Fh(re)},Rr=ee=>new Date(ee).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),Xt=ee=>{if(!ee)return null;const re=/(```[\s\S]*?```|`[^`]+`|\*\*\*[\s\S]+?\*\*\*|\*\*[\s\S]+?\*\*|__[\s\S]+?__|~~[\s\S]+?~~|\|\|[\s\S]+?\|\||<@!?&?\d+>|^###\s[^\n]+|^##\s[^\n]+|^-#\s[^\n]+|\[[^\]]+\]\(https?:\/\/[^\s)]+\)|https?:\/\/[^\s]+)/gm;return ee.split(re).map((we,De)=>{var Zt;if(!we)return null;if(we.startsWith("-# "))return s.jsx("span",{className:"text-xs text-muted-foreground font-medium block my-0.5 opacity-80",children:Xt(we.slice(3))},De);if(we.startsWith("## "))return s.jsx("span",{className:"text-base font-bold text-foreground block my-1 tracking-tight",children:Xt(we.slice(3))},De);if(we.startsWith("### "))return s.jsx("span",{className:"text-sm font-bold text-foreground block my-0.5",children:Xt(we.slice(4))},De);if(we.startsWith("```")&&we.endsWith("```")&&we.length>=6){const Me=we.slice(3,-3).replace(/^[a-z0-9_-]+\n/i,"");return s.jsx("pre",{className:"bg-black/60 p-2.5 rounded-lg text-xs font-mono my-1.5 border border-border overflow-x-auto text-emerald-400 font-mono",children:s.jsx("code",{children:Me})},De)}if(we.startsWith("`")&&we.endsWith("`")&&we.length>2)return s.jsx("code",{className:"bg-black/50 px-1.5 py-0.5 rounded text-xs font-mono text-emerald-300 border border-border/40",children:we.slice(1,-1)},De);if(we.startsWith("***")&&we.endsWith("***")&&we.length>6)return s.jsx("strong",{className:"font-bold italic",children:Xt(we.slice(3,-3))},De);if(we.startsWith("**")&&we.endsWith("**")&&we.length>4)return s.jsx("strong",{className:"font-bold",children:Xt(we.slice(2,-2))},De);if(we.startsWith("__")&&we.endsWith("__")&&we.length>4)return s.jsx("span",{className:"underline underline-offset-2",children:Xt(we.slice(2,-2))},De);if(we.startsWith("~~")&&we.endsWith("~~")&&we.length>4)return s.jsx("span",{className:"line-through opacity-80",children:Xt(we.slice(2,-2))},De);if(we.startsWith("||")&&we.endsWith("||")&&we.length>4)return s.jsx("span",{className:"bg-secondary text-transparent hover:text-foreground hover:bg-secondary/50 px-1.5 py-0.5 rounded transition-all cursor-pointer select-none border border-border/30",title:"Click to reveal spoiler",children:we.slice(2,-2)},De);const at=we.match(/^<@!?(\d+)>$/);if(at){const Me=at[1],Je=new Map;p&&Je.set(p.user_id,"Ticket Author"),j.forEach(kt=>{var Jn;(Jn=kt.author)!=null&&Jn.id&&Je.set(kt.author.id,kt.author.globalName||kt.author.username)});const St=Je.get(Me);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-primary/20 text-primary mx-0.5",title:`User ID: ${Me}`,children:["@",St||"User"]},De)}const ct=we.match(/^<@&(\d+)>$/);if(ct){const Me=ct[1],Je=(Zt=B==null?void 0:B.roles)==null?void 0:Zt.find(St=>St.id===Me);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-amber-500/20 text-amber-400 mx-0.5",children:["@",Je?Je.name:`Role (${Me})`]},De)}const mt=we.match(/^\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)$/);if(mt){const Me=mt[1],Je=mt[2];return s.jsx("a",{href:Je,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:Me},De)}return/^https?:\/\/[^\s]+$/i.test(we)?/\.(gif|jpe?g|png|webp)(\?[^\s]*)?$/i.test(we)||/cdn\.discordapp\.com\/(emojis|attachments)\//i.test(we)||/images\.discordapp\.net\//i.test(we)||/media\d*\.giphy\.com\//i.test(we)?s.jsx("span",{className:"block my-1",children:s.jsx("img",{src:we,alt:"GIF/Image",className:"max-h-64 rounded-lg border border-border object-contain hover:opacity-95 transition-opacity",loading:"lazy"})},De):s.jsx("a",{href:we,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:we},De):we})},Qn=ee=>!ee||ee.length===0?null:s.jsx("div",{className:"space-y-2 mt-1",children:ee.map(re=>{var at,ct,mt;const ke=((at=re.contentType)==null?void 0:at.startsWith("image/"))||/\.(png|jpe?g|gif|webp|svg)$/i.test(re.name),we=((ct=re.contentType)==null?void 0:ct.startsWith("video/"))||/\.(mp4|webm|mov|mkv)$/i.test(re.name),De=((mt=re.contentType)==null?void 0:mt.startsWith("audio/"))||/\.(mp3|wav|ogg|m4a)$/i.test(re.name);return ke?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black/40",children:s.jsx("a",{href:re.url,target:"_blank",rel:"noreferrer",children:s.jsx("img",{src:re.url,alt:re.name,className:"max-h-80 max-w-full object-contain hover:opacity-95 transition-opacity",loading:"lazy"})})},re.id):we?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black",children:s.jsx("video",{src:re.url,controls:!0,className:"max-h-80 max-w-full"})},re.id):De?s.jsx("div",{className:"p-2 border border-border rounded-lg bg-secondary/20",children:s.jsx("audio",{src:re.url,controls:!0,className:"w-full h-8"})},re.id):s.jsxs("div",{className:"p-2.5 rounded-lg border border-border bg-secondary/20 flex items-center justify-between text-xs gap-3",children:[s.jsxs("div",{className:"flex items-center gap-2 truncate",children:[s.jsx(ge,{icon:ay,size:16,className:"text-primary shrink-0"}),s.jsx("span",{className:"truncate font-medium",children:re.name})]}),s.jsx(he,{variant:"ghost",size:"sm",asChild:!0,className:"h-7 px-2 text-xs",children:s.jsx("a",{href:re.url,target:"_blank",rel:"noreferrer",download:!0,children:"Download"})})]},re.id)})}),zo=ee=>!ee||ee.length===0?null:s.jsx("div",{className:"space-y-3 mt-1.5 w-full",children:ee.map((re,ke)=>{var we,De,at,ct;return s.jsxs("div",{className:"rounded-lg border border-border/60 bg-secondary/30 p-3.5 text-xs space-y-2 border-l-4 shadow-sm relative overflow-hidden max-w-xl",style:{borderLeftColor:re.color||"#5865F2"},children:[re.author&&s.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-foreground",children:[re.author.iconURL&&s.jsx("img",{src:re.author.iconURL,alt:"",className:"h-4 w-4 rounded-full"}),s.jsx("span",{children:re.author.name})]}),((we=re.thumbnail)==null?void 0:we.url)&&s.jsx("img",{src:re.thumbnail.url,alt:"",className:"h-12 w-12 rounded object-cover absolute top-3 right-3 border border-border"}),re.title&&s.jsx("h4",{className:"font-bold text-sm text-foreground tracking-tight pr-12",children:Xt(re.title)}),re.description&&s.jsx("div",{className:"text-muted-foreground whitespace-pre-wrap leading-relaxed pr-12",children:Xt(re.description)}),re.fields&&re.fields.length>0&&s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2.5 pt-2 border-t border-border/30",children:re.fields.map((mt,Zt)=>s.jsxs("div",{className:`space-y-0.5 ${mt.inline?"":"sm:col-span-2"}`,children:[s.jsx("p",{className:"font-semibold text-foreground text-[11px] uppercase tracking-wider",children:mt.name}),s.jsx("p",{className:"text-muted-foreground whitespace-pre-wrap",children:Xt(mt.value)})]},Zt))}),((De=re.image)==null?void 0:De.url)&&s.jsx("div",{className:"rounded-md overflow-hidden border border-border mt-2",children:s.jsx("img",{src:re.image.url,alt:"",className:"max-h-64 w-full object-cover"})}),(re.footer||re.timestamp)&&s.jsxs("div",{className:"flex items-center gap-2 pt-1 border-t border-border/20 text-[10px] text-muted-foreground",children:[((at=re.footer)==null?void 0:at.iconURL)&&s.jsx("img",{src:re.footer.iconURL,alt:"",className:"h-3.5 w-3.5 rounded-full"}),((ct=re.footer)==null?void 0:ct.text)&&s.jsx("span",{children:re.footer.text}),re.timestamp&&s.jsxs("span",{children:[new Date(re.timestamp).toLocaleDateString()," ",new Date(re.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]},ke)})}),mr=ee=>{if(!ee||ee.length===0)return null;const re=ee.map(ke=>({...ke,components:(ke.components||[]).filter(we=>we.customId||we.url||we.type===2||we.type===3||we.type==="BUTTON"||we.type==="STRING_SELECT")})).filter(ke=>ke.components&&ke.components.length>0);return re.length===0?null:s.jsx("div",{className:"space-y-2 mt-2.5 w-full",children:re.map((ke,we)=>{var De;return s.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:(De=ke.components)==null?void 0:De.map((at,ct)=>s.jsxs("div",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-secondary/80 text-secondary-foreground text-xs font-semibold border border-border/80 shadow-sm hover:bg-secondary transition-colors cursor-pointer",children:[at.emoji&&s.jsx("span",{children:at.emoji}),s.jsx("span",{children:at.label||at.customId||"Button"})]},ct))},we)})})},pr=()=>s.jsx($l,{className:"flex-1 p-4 sm:p-6",children:s.jsxs("div",{className:"max-w-4xl mx-auto w-full space-y-4",children:[E?s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(Be,{className:"h-10 w-3/4"}),s.jsx(Be,{className:"h-10 w-1/2 ml-auto"}),s.jsx(Be,{className:"h-10 w-2/3"})]}):j.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground text-sm",children:"No recent messages in this ticket channel."}):j.map(ee=>{var re;return s.jsxs("div",{className:`group flex items-start gap-3 ${ee.author.isDashboard?"flex-row-reverse":""}`,children:[s.jsxs(Ia,{className:"h-8 w-8 shrink-0",children:[s.jsx(Co,{src:ee.author.avatar,alt:ee.author.username}),s.jsx($a,{children:s.jsx(ge,{icon:N8,size:16})})]}),s.jsxs("div",{className:`flex flex-col space-y-1 max-w-[80%] ${ee.author.isDashboard?"items-end":"items-start"}`,children:[s.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[s.jsx("span",{className:"font-semibold text-foreground",children:ee.author.globalName||ee.author.username}),ee.author.bot&&s.jsx(An,{variant:"secondary",className:"px-1 py-0 text-[10px]",children:"BOT"}),ee.author.isDashboard&&s.jsx(An,{variant:"default",className:"px-1 py-0 text-[10px]",children:"STAFF"}),s.jsx("span",{children:Rr(ee.createdAt)}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity ml-1",children:[s.jsx(he,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-foreground",onClick:()=>qt(ee),title:"Edit Message",children:s.jsx(ge,{icon:a2,size:12})}),s.jsx(he,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-destructive",onClick:()=>qa(ee.id),title:"Delete Message",children:s.jsx(ge,{icon:wl,size:12})})]})]}),xe===ee.id?s.jsxs("div",{className:"flex items-center gap-2 w-full mt-1",children:[s.jsx(Ie,{value:L,onChange:ke=>I(ke.target.value),className:"h-8 text-sm",autoFocus:!0}),s.jsx(he,{size:"sm",className:"h-8 px-2 bg-primary",onClick:()=>Kt(ee.id),children:s.jsx(ge,{icon:S8,size:14})}),s.jsx(he,{size:"sm",variant:"ghost",className:"h-8 px-2",onClick:dr,children:s.jsx(ge,{icon:Zr,size:14})})]}):ee.content?s.jsx("div",{className:`rounded-lg px-3.5 py-2.5 text-sm whitespace-pre-wrap ${ee.author.isDashboard?"bg-primary text-primary-foreground":"bg-secondary/40 text-secondary-foreground border border-border/50"}`,style:ee.containerColor||ee.author.bot&&!((re=ee.embeds)!=null&&re.length)?{borderLeftWidth:"4px",borderLeftColor:ee.containerColor||"#5865F2"}:void 0,children:Xt(ee.content)}):null,Qn(ee.attachments),zo(ee.embeds),mr(ee.components)]})]},ee.id)}),s.jsx("div",{ref:be})]})}),Ht=()=>{var ee;return s.jsxs("div",{className:"p-4 border-t border-border bg-secondary/10 flex flex-col gap-2 relative",children:[A.length>0&&s.jsx("div",{className:"max-w-4xl mx-auto w-full flex items-center gap-2 flex-wrap mb-1",children:A.map((re,ke)=>s.jsxs("div",{className:"flex items-center gap-2 p-1.5 px-3 rounded-lg border border-border bg-secondary text-xs",children:[re.previewUrl?s.jsx("img",{src:re.previewUrl,alt:"",className:"h-6 w-6 rounded object-cover"}):s.jsx(ge,{icon:ay,size:14,className:"text-primary"}),s.jsx("span",{className:"font-medium max-w-[120px] truncate",children:re.filename}),s.jsxs("span",{className:"text-muted-foreground text-[10px]",children:[re.sizeMb,"MB"]}),s.jsx("button",{type:"button",onClick:()=>_t(ke),className:"text-muted-foreground hover:text-destructive ml-1",children:s.jsx(ge,{icon:Zr,size:12})})]},ke))}),U&&s.jsxs("div",{className:"max-w-4xl mx-auto w-full absolute bottom-full mb-2 z-50 bg-popover text-popover-foreground border border-border rounded-xl shadow-xl overflow-hidden max-h-48 overflow-y-auto",children:[s.jsx("div",{className:"p-2 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider border-b",children:"Mentions (@)"}),p&&s.jsxs("button",{type:"button",onClick:()=>fr("Ticket Author",p.user_id,!1),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Ia,{className:"h-5 w-5",children:s.jsx($a,{children:"U"})}),s.jsx("span",{className:"font-medium",children:"Ticket Author"})]}),s.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["@",p.user_id]})]}),(ee=B==null?void 0:B.roles)==null?void 0:ee.filter(re=>re.name.toLowerCase().includes(ue)).slice(0,5).map(re=>s.jsxs("button",{type:"button",onClick:()=>fr(re.name,re.id,!0),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("span",{className:"font-medium text-amber-400",children:["@",re.name]}),s.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"Role"})]},re.id))]}),s.jsxs("form",{onSubmit:Ya,className:"max-w-4xl mx-auto w-full flex items-center gap-2",children:[s.jsx("input",{type:"file",ref:ve,multiple:!0,onChange:Tr,className:"hidden",accept:"image/*,video/*,audio/*,.pdf,.zip,.txt,.json"}),s.jsx(he,{type:"button",variant:"outline",size:"sm",onClick:()=>{var re;return(re=ve.current)==null?void 0:re.click()},title:"Attach files or media",className:"h-9 px-2.5",children:s.jsx(ge,{icon:u8,size:16})}),s.jsx(Ie,{value:k,onChange:ti,placeholder:"Type a reply... Use @ to tag roles or users",disabled:M||E,className:"flex-1"}),s.jsx(he,{type:"submit",size:"sm",disabled:M||!k.trim()&&!A.length||E,children:M?s.jsx(ge,{icon:or,size:16,className:"animate-spin"}):s.jsxs(s.Fragment,{children:[s.jsx(ge,{icon:w8,size:16,className:"mr-1.5"}),"Send"]})})]})]})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),s.jsx("p",{className:"text-muted-foreground",children:"Manage open support tickets & reply live to Discord channels from the web dashboard."})]}),s.jsxs(he,{onClick:()=>void le(),disabled:l,variant:"outline",size:"sm",children:[s.jsx(ge,{icon:or,size:16,className:l?"animate-spin mr-2":"mr-2"}),"Refresh"]})]}),s.jsx(Xe,{className:"border-border bg-card",children:s.jsx(Ze,{className:"p-0",children:l?s.jsxs("div",{className:"space-y-4 p-6",children:[s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"})]}):d?s.jsx("div",{className:"p-6",children:s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:d})})}):e.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground",children:"No open tickets at the moment!"}):s.jsx("div",{className:"divide-y divide-border",children:e.map(ee=>s.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("p",{className:"font-medium text-primary",children:ee.subject||"Untitled Ticket"}),s.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",ee.ticket_id]}),s.jsx(An,{variant:"outline",className:"text-xs capitalize",children:ee.department}),s.jsxs(An,{variant:ee.priority==="high"?"destructive":ee.priority==="medium"?"secondary":"outline",className:"text-xs capitalize",children:[ee.priority," priority"]})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",s.jsx("span",{className:"font-mono",children:ee.user_id}),ee.description&&` • ${ee.description}`]})]}),s.jsxs("div",{className:"flex items-center gap-3 w-full sm:w-auto justify-end",children:[s.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap mr-2",children:[s.jsx(ge,{icon:i8,size:14,className:"mr-1.5"}),Lo(ee.created_at)]}),s.jsxs(he,{variant:"default",size:"sm",onClick:()=>Mt(ee),className:"bg-primary text-primary-foreground hover:bg-primary/90",children:[s.jsx(ge,{icon:l8,size:16,className:"mr-2"}),"Live Chat"]}),s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(ee),disabled:V===ee.ticket_id,children:[V===ee.ticket_id?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Close"]}),a&&s.jsx(he,{variant:"secondary",size:"sm",asChild:!0,children:s.jsx("a",{href:`https://discord.com/channels/${a}/${ee.ticket_id}`,target:"_blank",rel:"noreferrer",children:s.jsx(ge,{icon:rd,size:16})})})]})]},ee.ticket_id))})})}),b&&y&&s.jsx("div",{className:"fixed inset-0 z-50 bg-black/65 backdrop-blur-sm flex items-center justify-center p-4 sm:p-6 lg:p-8 animate-in fade-in-0",onClick:ee=>{ee.target===ee.currentTarget&&w(!1)},children:s.jsxs("div",{className:"bg-card text-card-foreground border border-border rounded-2xl shadow-2xl flex flex-col w-full max-w-5xl h-[88vh] overflow-hidden animate-in zoom-in-95",children:[s.jsxs("div",{className:"p-4 border-b border-border bg-secondary/20 flex flex-col space-y-1",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx("h2",{className:"text-lg font-bold tracking-tight truncate",children:(p==null?void 0:p.subject)||"Ticket Live Chat"}),s.jsxs(An,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",p==null?void 0:p.ticket_id]}),(p==null?void 0:p.department)&&s.jsx(An,{variant:"secondary",className:"text-xs capitalize shrink-0",children:p.department})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[p&&s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(p),disabled:V===p.ticket_id,className:"h-8 px-2.5 text-xs",children:[V===p.ticket_id?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Close Ticket"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>w(!1),className:"h-8 px-3 text-xs flex items-center gap-1.5",children:[s.jsx(ge,{icon:h8,size:14}),s.jsx("span",{children:"Collapse"})]}),s.jsx(he,{variant:"ghost",size:"icon",onClick:()=>{g(!1),w(!1)},className:"h-8 w-8 text-muted-foreground hover:text-foreground",children:s.jsx(ge,{icon:Zr,size:18})})]})]}),(p==null?void 0:p.description)&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:p.description})]}),pr(),Ht()]})}),b&&!y&&s.jsx(UC,{open:b,onOpenChange:g,children:s.jsxs(bg,{side:"right",className:"w-full sm:max-w-xl p-0 flex flex-col h-full bg-card",children:[s.jsxs(yg,{className:"p-4 border-b border-border space-y-1 bg-secondary/20",children:[s.jsxs("div",{className:"flex items-center justify-between pr-8",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx(wg,{className:"text-base font-bold truncate",children:(p==null?void 0:p.subject)||"Ticket Live Chat"}),s.jsxs(An,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",p==null?void 0:p.ticket_id]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[p&&s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(p),disabled:V===p.ticket_id,className:"h-7 px-2 text-xs",children:[V===p.ticket_id?s.jsx(ge,{icon:or,size:13,className:"animate-spin mr-1"}):s.jsx(ge,{icon:Zr,size:13,className:"mr-1"}),"Close"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>w(!0),className:"h-7 px-2 text-xs flex items-center gap-1",title:"Open in Full View",children:[s.jsx(ge,{icon:p8,size:13}),s.jsx("span",{children:"Full View"})]})]})]}),(p==null?void 0:p.description)&&s.jsx(Cg,{className:"text-xs text-muted-foreground truncate",children:p.description})]}),pr(),Ht()]})}),s.jsx(zl,{open:H,onOpenChange:Z,children:s.jsxs(qs,{className:"sm:max-w-md bg-card border-border rounded-xl",children:[s.jsxs(Ks,{children:[s.jsxs(Xs,{className:"text-lg font-bold flex items-center gap-2",children:[s.jsx(ge,{icon:Zr,className:"text-destructive",size:20}),"Close Ticket #",te==null?void 0:te.ticket_id]}),s.jsx(Zs,{className:"text-xs text-muted-foreground pt-1",children:"Are you sure you want to close this ticket? A transcript will be created and the channel will be deleted in Discord."})]}),s.jsxs("div",{className:"space-y-2 py-2",children:[s.jsx("label",{className:"text-xs font-semibold text-foreground",children:"Reason for closing (Optional)"}),s.jsx(Ie,{value:D,onChange:ee=>G(ee.target.value),placeholder:"e.g. Issue resolved by support team",className:"text-sm"})]}),s.jsxs(Pl,{className:"gap-2 sm:gap-0 mt-2",children:[s.jsx(he,{variant:"outline",size:"sm",onClick:()=>Z(!1),disabled:!!V,children:"Cancel"}),s.jsxs(he,{variant:"destructive",size:"sm",onClick:ae,disabled:!!V,children:[V?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Confirm Close"]})]})]})})]})}const _B=["admin","moderator","editor","viewer","custom"];function OB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:_a("viewer"),yamlOwner:!1}}function DB({permissions:e,onChange:n,disabled:a}){const o=d=>n({...e,...d}),l=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],c=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General Capabilities"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(At,{checked:e[d]??(d==="tickets"?e.overview:!1),disabled:a,onCheckedChange:h=>o({[d]:h}),className:"shrink-0"})]},d)),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(At,{checked:e.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(At,{checked:e.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(At,{checked:e.users.view,disabled:a,onCheckedChange:d=>o({users:{...e.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(At,{checked:e.users.manage,disabled:a,onCheckedChange:d=>o({users:{...e.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(([d,m,p])=>{var b;const h=((b=e.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(At,{checked:h.view,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,view:g}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(At,{checked:h.edit,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,edit:g,view:g?!0:h.view}}})})]})]})]},d)})})]})]})}function LB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function zB(){const{user:e,hasPermission:n}=Ut(),a=n("users.manage"),[o,l]=f.useState([]),[c,d]=f.useState([]),[m,p]=f.useState(!0),[h,b]=f.useState(""),[g,y]=f.useState(null),[w,j]=f.useState(!1),S=f.useCallback(async()=>{p(!0),b("");try{const[M,z]=await Promise.all([Ee.listDashboardUsers(),Ee.listGroups().catch(()=>({data:{groups:[]}}))]);M.data&&l(M.data.users),z.data&&d(z.data.groups)}catch(M){b(M instanceof Error?M.message:"Failed to load users")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);const E=f.useMemo(()=>[...o].sort((M,z)=>M.yamlOwner!==z.yamlOwner?M.yamlOwner?-1:1:(M.username||M.id).localeCompare(z.username||z.id)),[o]);function N(){y(OB())}function k(M){y({mode:"edit",id:M.id,username:M.username||"",globalName:M.globalName||"",role:M.yamlOwner?"owner":M.role,enabled:M.enabled,permissions:M.role==="custom"?M.permissions:_a(M.role),yamlOwner:M.yamlOwner})}function T(M){g&&y({...g,role:M,permissions:_a(M,g.permissions)})}async function A(){if(!(!g||!a)){j(!0),b("");try{g.mode==="add"?await Ee.addDashboardUser({id:g.id.trim(),role:g.role,username:g.username||void 0,globalName:g.globalName||void 0,enabled:g.enabled,permissions:g.role==="custom"?g.permissions:void 0}):await Ee.updateDashboardUser(g.id,{role:g.yamlOwner?void 0:g.role,enabled:g.enabled,username:g.username||void 0,globalName:g.globalName||void 0,permissions:g.role==="custom"?g.permissions:void 0}),y(null),await S()}catch(M){b(M instanceof Error?M.message:"Could not save user")}finally{j(!1)}}}async function O(M){if(a&&window.confirm("Remove this user from the dashboard?")){b("");try{await Ee.removeDashboardUser(M),await S()}catch(z){b(z instanceof Error?z.message:"Could not remove user")}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),s.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",s.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?s.jsxs(he,{onClick:N,children:[s.jsx(ge,{icon:Z0,size:16,className:"mr-2"}),"Add user"]}):null]}),h?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:h})}):null,s.jsx(Xe,{className:"border-border bg-card overflow-hidden",children:s.jsx(Ze,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):E.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:"No users found."}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"User"}),s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Access Summary"}),s.jsx("th",{className:"px-4 py-2.5",children:"Status"}),a&&s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:E.map(M=>{const z=c.find(U=>U.id===M.groupId||U.id===M.role),B=(z==null?void 0:z.color)||"#10B981",K=(z==null?void 0:z.name)||sy[M.yamlOwner?"owner":M.role]||M.role;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs(Ia,{className:"size-7",children:[s.jsx(Co,{src:M.avatar,alt:M.username}),s.jsx($a,{className:"text-[10px]",children:(M.username||M.id).slice(0,2).toUpperCase()})]}),s.jsxs("div",{className:"min-w-0 leading-tight",children:[s.jsxs("p",{className:"truncate font-semibold text-foreground text-xs",children:[l2(M),M.id===(e==null?void 0:e.id)?s.jsx("span",{className:"text-[11px] text-primary font-normal ml-1",children:"(you)"}):""]}),s.jsx("p",{className:"truncate text-[10px] text-muted-foreground font-mono",children:M.id})]})]})}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:B}}),s.jsx("span",{className:"font-medium text-xs text-foreground",children:K}),M.yamlOwner&&s.jsx("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Config Owner"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:LB(M)}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:M.enabled?s.jsx(An,{className:"text-[10px] px-2 py-0.5 bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15 border-emerald-500/20",children:"Active"}):s.jsx(An,{variant:"outline",className:"text-[10px] px-2 py-0.5",children:"Disabled"})}),a&&s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>k(M),children:[s.jsx(ge,{icon:c8,size:13}),"Edit"]}),!M.yamlOwner&&s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>O(M.id),children:[s.jsx(ge,{icon:wl,size:13}),"Remove"]})]})})]},M.id)})})]})})})}),s.jsx(zl,{open:!!g,onOpenChange:M=>!M&&y(null),children:s.jsxs(qs,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:(g==null?void 0:g.mode)==="add"?"Add dashboard user":"Edit user"}),s.jsx(Zs,{children:g!=null&&g.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":k8[(g==null?void 0:g.role)??"viewer"]})]}),g?s.jsxs("div",{className:"space-y-4",children:[g.mode==="add"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"discord-id",children:"Discord user ID"}),s.jsx(Ie,{id:"discord-id",value:g.id,onChange:M=>y({...g,id:M.target.value}),placeholder:"829112572816130058"})]}):null,s.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Display name (optional)"}),s.jsx(Ie,{value:g.globalName,onChange:M=>y({...g,globalName:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Username (optional)"}),s.jsx(Ie,{value:g.username,onChange:M=>y({...g,username:M.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Permission Group"}),s.jsxs(No,{value:g.role,disabled:g.yamlOwner,onValueChange:M=>{const z=c.find(B=>B.id===M);z?y({...g,role:M,permissions:z.permissions}):T(M)},children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsx(Ua,{children:g.yamlOwner?s.jsx(an,{value:"owner",children:"Owner"}):c.length>0?c.map(M=>s.jsx(an,{value:M.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2.5 rounded-full shrink-0",style:{backgroundColor:M.color||"#10B981"}}),s.jsx("span",{children:M.name})]})},M.id)):_B.map(M=>s.jsx(an,{value:M,children:sy[M]},M))})]})]}),s.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[s.jsx("span",{className:"text-sm",children:"Account enabled"}),s.jsx(At,{checked:g.enabled,disabled:g.yamlOwner,onCheckedChange:M=>y({...g,enabled:M})})]}),g.role==="custom"&&!g.yamlOwner?s.jsx(DB,{permissions:g.permissions,onChange:M=>y({...g,permissions:M})}):null]}):null,s.jsxs(Pl,{children:[s.jsx(he,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),s.jsx(he,{disabled:w||!a||(g==null?void 0:g.mode)==="add"&&!/^\d{17,20}$/.test(g.id.trim()),onClick:()=>void A(),children:w?"Saving…":"Save"})]})]})})]})}const PB=[{name:"Emerald",hex:"#10B981"},{name:"Blue",hex:"#3B82F6"},{name:"Purple",hex:"#8B5CF6"},{name:"Amber",hex:"#F59E0B"},{name:"Red",hex:"#EF4444"},{name:"Cyan",hex:"#06B6D4"},{name:"Gray",hex:"#6B7280"}];function IB({permissions:e,onChange:n,disabled:a}){const o=d=>n({...e,...d}),l=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],c=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General Capabilities"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(At,{checked:e[d]??(d==="tickets"?e.overview:!1),disabled:a,onCheckedChange:h=>o({[d]:h}),className:"shrink-0"})]},d)),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(At,{checked:e.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(At,{checked:e.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(At,{checked:e.users.view,disabled:a,onCheckedChange:d=>o({users:{...e.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(At,{checked:e.users.manage,disabled:a,onCheckedChange:d=>o({users:{...e.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(([d,m,p])=>{var b;const h=((b=e.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(At,{checked:h.view,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,view:g}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(At,{checked:h.edit,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,edit:g,view:g?!0:h.view}}})})]})]})]},d)})})]})]})}function $B(){const{impersonateGroup:e,impersonatedGroup:n,stopImpersonation:a}=Ut(),[o,l]=f.useState([]),[c,d]=f.useState(!0),[m,p]=f.useState(null),[h,b]=f.useState(null),[g,y]=f.useState(!1),[w,j]=f.useState("add"),[S,E]=f.useState(!1),[N,k]=f.useState(""),[T,A]=f.useState(""),[O,M]=f.useState(""),[z,B]=f.useState("#10B981"),[K,U]=f.useState(""),[q,ue]=f.useState(_a("viewer")),pe=async()=>{var H;d(!0),p(null);try{const Z=await Ee.listGroups();l(((H=Z.data)==null?void 0:H.groups)||[])}catch(Z){p(Z instanceof Error?Z.message:"Failed to load groups")}finally{d(!1)}};f.useEffect(()=>{pe()},[]);const xe=()=>{j("add"),k(""),A(""),M(""),B("#10B981"),U(""),ue(_a("viewer")),y(!0)},se=H=>{j("edit"),k(H.id),A(H.name),M(H.description||""),B(H.color||"#10B981"),U(H.discordRoleId||""),ue(H.permissions||_a("viewer")),y(!0)},L=async()=>{if(!T.trim()){p("Group name is required");return}E(!0),p(null);try{w==="add"?(await Ee.createGroup({name:T.trim(),description:O.trim(),color:z,discordRoleId:K.trim()||null,permissions:q}),b(`Group "${T}" created successfully.`)):(await Ee.updateGroup(N,{name:T.trim(),description:O.trim(),color:z,discordRoleId:K.trim()||null,permissions:q}),b(`Group "${T}" updated successfully.`)),y(!1),await pe()}catch(H){p(H instanceof Error?H.message:"Failed to save group")}finally{E(!1)}},I=async H=>{if(!H.isSystem&&confirm(`Are you sure you want to delete the group "${H.name}"?`))try{await Ee.deleteGroup(H.id),b(`Group "${H.name}" deleted.`),await pe()}catch(Z){p(Z instanceof Error?Z.message:"Failed to delete group")}};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Permission Groups"}),s.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create custom permission groups, assign staff members, and optionally sync with Discord Role IDs."})]}),s.jsxs(he,{onClick:xe,className:"shrink-0 gap-2 bg-primary",children:[s.jsx(ge,{icon:Z0,size:18}),"Create Group"]})]}),m&&s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:m})}),h&&s.jsx(We,{className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-500",children:s.jsxs(Ye,{className:"flex items-center justify-between",children:[s.jsx("span",{children:h}),s.jsx(he,{size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>b(null),children:"Dismiss"})]})}),s.jsx(Xe,{className:"border-border bg-card overflow-hidden",children:s.jsx(Ze,{className:"p-0",children:c?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):o.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:'No permission groups found. Click "Create Group" to add one.'}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Description"}),s.jsx("th",{className:"px-4 py-2.5",children:"Discord Role ID"}),s.jsx("th",{className:"px-4 py-2.5",children:"Enabled Permissions"}),s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:o.map(H=>{var Z,te,_,D,G,V,F;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"size-2.5 rounded-full shrink-0 shadow-sm",style:{backgroundColor:H.color||"#10B981"}}),s.jsx("span",{className:"text-foreground font-semibold text-xs",children:H.name}),H.isSystem&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-secondary text-secondary-foreground border border-border/80",children:[s.jsx(ge,{icon:bu,size:10}),"System"]})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:H.description||"—"}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:H.discordRoleId?s.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-muted-foreground font-mono bg-secondary/50 px-2 py-0.5 rounded border border-border/50",children:[s.jsx(ge,{icon:bu,size:12,className:"text-primary"}),H.discordRoleId]}):s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"—"})}),s.jsx("td",{className:"px-4 py-2.5",children:s.jsxs("div",{className:"flex flex-wrap gap-1 max-w-md",children:[((Z=H.permissions)==null?void 0:Z.overview)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Overview"}),(((te=H.permissions)==null?void 0:te.tickets)??((_=H.permissions)==null?void 0:_.overview))&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:"Tickets"}),((D=H.permissions)==null?void 0:D.transcripts)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-purple-500/10 text-purple-400 border border-purple-500/20",children:"Transcripts"}),((G=H.permissions)==null?void 0:G.logs)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-blue-500/10 text-blue-400 border border-blue-500/20",children:"Logs"}),((F=(V=H.permissions)==null?void 0:V.users)==null?void 0:F.manage)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20",children:"User Mgmt"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(he,{size:"sm",variant:"ghost",className:`h-7 px-2 text-xs gap-1 ${(n==null?void 0:n.id)===H.id?"text-amber-400 font-bold bg-amber-500/15 border border-amber-500/30":"text-amber-400 hover:text-amber-300 hover:bg-amber-500/10"}`,onClick:()=>(n==null?void 0:n.id)===H.id?a():e(H.id),children:[s.jsx(ge,{icon:bu,size:13}),(n==null?void 0:n.id)===H.id?"Active Preview":"View as Group"]}),!H.isSystem&&s.jsxs(s.Fragment,{children:[s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>se(H),children:[s.jsx(ge,{icon:a2,size:13}),"Edit"]}),s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>I(H),children:[s.jsx(ge,{icon:wl,size:13}),"Delete"]})]})]})})]},H.id)})})]})})})}),s.jsx(zl,{open:g,onOpenChange:y,children:s.jsxs(qs,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:w==="add"?"Create Permission Group":`Edit Group: ${T}`}),s.jsx(Zs,{children:"Configure group metadata, custom color badge, Discord role sync, and permission rules."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-name",children:"Group Name"}),s.jsx(Ie,{id:"group-name",placeholder:"e.g. Support Staff",value:T,onChange:H=>A(H.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-color",children:"Color Badge"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(Id,{value:z,onChange:B}),s.jsx(Ie,{value:z,onChange:H=>B(H.target.value),placeholder:"#10B981",className:"w-28 font-mono text-sm uppercase"}),s.jsx("div",{className:"flex flex-wrap gap-1 ml-auto",children:PB.map(H=>s.jsx("button",{type:"button",className:"size-6 rounded-full border border-white/20 transition-transform hover:scale-110",style:{backgroundColor:H.hex},onClick:()=>B(H.hex),title:H.name},H.hex))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-desc",children:"Description"}),s.jsx(Ie,{id:"group-desc",placeholder:"Brief description of what members in this group can access...",value:O,onChange:H=>M(H.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"discord-role-id",children:"Discord Role ID (Optional Auto-Sync)"}),s.jsx(Ie,{id:"discord-role-id",placeholder:"e.g. 123456789012345678",value:K,onChange:H=>U(H.target.value)}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"If provided, Discord users with this Role ID will automatically inherit this group upon login."})]}),s.jsxs("div",{className:"pt-2",children:[s.jsx("h4",{className:"text-sm font-semibold mb-3",children:"Group Permission Matrix"}),s.jsx(IB,{permissions:q,onChange:ue})]})]}),s.jsxs(Pl,{className:"gap-2 sm:gap-0",children:[s.jsx(he,{variant:"outline",onClick:()=>y(!1),disabled:S,children:"Cancel"}),s.jsx(he,{onClick:L,disabled:S,className:"bg-primary",children:S?"Saving...":w==="add"?"Create Group":"Save Changes"})]})]})})]})}function BB({children:e}){const{isAuthenticated:n,loading:a}=Ut();return a?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?s.jsx(s.Fragment,{children:e}):s.jsx(Qr,{to:"/login",replace:!0})}function UB(){const{complete:e,loading:n}=Pj(),a=Ln();return n?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?s.jsx(Qr,{to:"/login",replace:!0}):s.jsxs(ny,{children:[s.jsx(rn,{path:"/login",element:s.jsx(T$,{})}),s.jsxs(rn,{element:s.jsx(BB,{children:s.jsx(ND,{})}),children:[s.jsx(rn,{index:!0,element:s.jsx(Q$,{})}),s.jsx(rn,{path:"system",element:s.jsx(Kr,{permission:"overview",children:s.jsx(mB,{})})}),s.jsx(rn,{path:"settings",element:s.jsx(Kr,{permission:"settings.view",children:s.jsx(uB,{})})}),s.jsx(rn,{path:"configs",element:s.jsx(N$,{})}),s.jsx(rn,{path:"logs",element:s.jsx(Kr,{permission:"logs",children:s.jsx(wB,{})})}),s.jsx(rn,{path:"tickets",element:s.jsx(Kr,{permission:"transcripts",children:s.jsx(MB,{})})}),s.jsx(rn,{path:"transcripts",element:s.jsx(Kr,{permission:"transcripts",children:s.jsx(AB,{})})}),s.jsx(rn,{path:"users",element:s.jsx(Kr,{permission:"users.view",children:s.jsx(zB,{})})}),s.jsx(rn,{path:"groups",element:s.jsx(Kr,{permission:"users.view",children:s.jsx($B,{})})}),s.jsx(rn,{path:"addons",element:s.jsx(Kr,{permission:"settings.view",children:s.jsx(J$,{})})}),s.jsx(rn,{path:"addons/builder",element:s.jsx(Kr,{permission:"settings.update",children:s.jsx(eB,{})})})]}),s.jsx(rn,{path:"*",element:s.jsx(Qr,{to:"/",replace:!0})})]}):s.jsxs(ny,{children:[s.jsx(rn,{path:"/setup",element:s.jsx(V$,{})}),s.jsx(rn,{path:"*",element:s.jsx(Qr,{to:"/setup",replace:!0})})]})}function HB({...e}){return s.jsx(aI,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}oB();E3.createRoot(document.getElementById("root")).render(s.jsx(f.StrictMode,{children:s.jsx(ZE,{children:s.jsx(tS,{children:s.jsx(M8,{children:s.jsx(ED,{children:s.jsxs(A8,{children:[s.jsx(UB,{}),s.jsx(HB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-DW3eyGbF.css b/public/dashboard/assets/index-DW3eyGbF.css new file mode 100644 index 0000000..881d423 --- /dev/null +++ b/public/dashboard/assets/index-DW3eyGbF.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[50vh\]{height:50vh}.h-\[520px\]{height:520px}.h-\[88vh\]{height:88vh}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,60vh\)\]{height:min(520px,60vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-24{width:6rem}.w-28{width:7rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[160px\]{width:160px}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[432px\]{max-width:432px}.max-w-\[80\%\]{max-width:80%}.max-w-\[8rem\]{max-width:8rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-100\%\]{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/40>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .4)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-500\/20{border-color:#3b82f633}.border-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-500\/20{border-color:#a855f733}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-white\/20{border-color:#fff3}.border-l-\[\#5865F2\]{--tw-border-opacity: 1;border-left-color:rgb(88 101 242 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[\#2b2d31\]{--tw-bg-opacity: 1;background-color:rgb(43 45 49 / var(--tw-bg-opacity, 1))}.bg-\[\#313338\]{--tw-bg-opacity: 1;background-color:rgb(49 51 56 / var(--tw-bg-opacity, 1))}.bg-\[\#5865F2\]{--tw-bg-opacity: 1;background-color:rgb(88 101 242 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/65{background-color:#000000a6}.bg-black\/80{background-color:#000c}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-green-500\/10{background-color:#22c55e1a}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-secondary\/80{background-color:hsl(var(--secondary) / .8)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500\/10{--tw-gradient-from: rgb(245 158 11 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent 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-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-amber-500\/15{--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(245 158 11 / .15) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-500\/10{--tw-gradient-to: rgb(245 158 11 / .1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-3\.5{padding-left:.875rem;padding-right:.875rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Poppins,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#949ba4\]{--tw-text-opacity: 1;color:rgb(148 155 164 / var(--tw-text-opacity, 1))}.text-\[\#dbdee1\]{--tw-text-opacity: 1;color:rgb(219 222 225 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/30{color:#ffffff4d}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-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-md{--tw-backdrop-blur: blur(12px);-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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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-1000{transition-duration:1s}.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)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.last\:border-0:last-child{border-width:0px}.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\:scale-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;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-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/10:hover{background-color:hsl(var(--secondary) / .1)}.hover\:bg-secondary\/25:hover{background-color:hsl(var(--secondary) / .25)}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-300:hover{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-95:hover{opacity:.95}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px 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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-500\/40:focus{--tw-ring-color: rgb(245 158 11 / .4)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--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))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:w-auto{width:auto}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-0{gap:0px}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-56{width:14rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.md\: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))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:pb-0{padding-bottom:0}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-DoxvJPsp.css b/public/dashboard/assets/index-DoxvJPsp.css deleted file mode 100644 index 7da031e..0000000 --- a/public/dashboard/assets/index-DoxvJPsp.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[50vh\]{height:50vh}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,60vh\)\]{height:min(520px,60vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[432px\]{max-width:432px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-100\%\]{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-\[\#5865F2\]{--tw-border-opacity: 1;border-left-color:rgb(88 101 242 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[\#2b2d31\]{--tw-bg-opacity: 1;background-color:rgb(43 45 49 / var(--tw-bg-opacity, 1))}.bg-\[\#313338\]{--tw-bg-opacity: 1;background-color:rgb(49 51 56 / var(--tw-bg-opacity, 1))}.bg-\[\#5865F2\]{--tw-bg-opacity: 1;background-color:rgb(88 101 242 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-green-500\/10{background-color:#22c55e1a}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent 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-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Poppins,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#949ba4\]{--tw-text-opacity: 1;color:rgb(148 155 164 / var(--tw-text-opacity, 1))}.text-\[\#dbdee1\]{--tw-text-opacity: 1;color:rgb(219 222 225 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/30{color:#ffffff4d}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-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-md{--tw-backdrop-blur: blur(12px);-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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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-1000{transition-duration:1s}.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)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.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-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;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-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/10:hover{background-color:hsl(var(--secondary) / .1)}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px 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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--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))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-56{width:14rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.md\: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))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:pb-0{padding-bottom:0}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/index.html b/public/dashboard/index.html index d65cf4b..1bedc17 100644 --- a/public/dashboard/index.html +++ b/public/dashboard/index.html @@ -10,8 +10,8 @@ href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> - - + +
From a7598d26aad8460432f255b474d8727a64aab5e9 Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Thu, 6 Aug 2026 17:29:37 +0100 Subject: [PATCH 18/22] Fix BETTERSQLLITE ISSUE --- Structures/AIDatabase.js | 431 +++++++--------------------------- Structures/Database.js | 485 ++++++++++----------------------------- 2 files changed, 201 insertions(+), 715 deletions(-) diff --git a/Structures/AIDatabase.js b/Structures/AIDatabase.js index 0a672a1..fb9de50 100644 --- a/Structures/AIDatabase.js +++ b/Structures/AIDatabase.js @@ -1,438 +1,167 @@ -const Database = require("better-sqlite3"); -const path = require("path"); +const fs = require('fs'); +const path = require('path'); -const db = new Database(path.join(__dirname, "../Data/ai-memory.db")); +const DB_PATH = path.join(__dirname, '../Data/ai-memory.json'); -db.pragma("journal_mode = WAL"); +function load() { + try { + const raw = fs.readFileSync(DB_PATH, 'utf8'); + return JSON.parse(raw); + } catch (e) { + return { + ai_conversations: [], + ai_summaries: [], + ai_facts: [], + ai_knowledge: [], + ai_sessions: [], + }; + } +} -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ai_conversations ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - guild_id TEXT, - channel_id TEXT, - user_id TEXT, - role TEXT NOT NULL, - content TEXT NOT NULL, - created_at INTEGER NOT NULL - ) -`, -).run(); +function save(state) { + try { + fs.mkdirSync(path.dirname(DB_PATH), { recursive: true }); + fs.writeFileSync(DB_PATH, JSON.stringify(state, null, 2), 'utf8'); + } catch (e) { + console.error('Failed to persist ai-memory:', e); + } +} -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ai_summaries ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - guild_id TEXT, - channel_id TEXT, - summary TEXT NOT NULL, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL - ) -`, -).run(); +const state = load(); -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ai_facts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - guild_id TEXT, - channel_id TEXT, - user_id TEXT, - fact_type TEXT NOT NULL, - fact_key TEXT NOT NULL, - fact_value TEXT NOT NULL, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ai_knowledge ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - source_type TEXT NOT NULL, - source_name TEXT NOT NULL, - title TEXT NOT NULL, - content TEXT NOT NULL, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ai_sessions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - guild_id TEXT, - channel_id TEXT, - user_id TEXT, - model TEXT, - mode TEXT, - last_message_at INTEGER, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL - ) -`, -).run(); - -try { - db.prepare(`ALTER TABLE ai_facts ADD COLUMN user_id TEXT`).run(); -} catch (e) { - if (!String(e).includes("duplicate column name")) throw e; +function nextId(arr) { + return arr.length === 0 ? 1 : Math.max(...arr.map(a => a.id || 0)) + 1; } module.exports = { saveUserFact({ guildId, userId, factType, factKey, factValue }) { - const existing = db - .prepare( - ` - SELECT id FROM ai_facts - WHERE guild_id IS ? AND user_id IS ? AND fact_type = ? AND fact_key = ? - LIMIT 1 - `, - ) - .get(guildId || null, userId || null, factType, factKey); - + const existing = state.ai_facts.find(f => f.guild_id === (guildId || null) && f.user_id === (userId || null) && f.fact_type === factType && f.fact_key === factKey); if (existing) { - db.prepare( - ` - UPDATE ai_facts - SET fact_value = ?, updated_at = ? - WHERE id = ? - `, - ).run(factValue, Date.now(), existing.id); + existing.fact_value = factValue; + existing.updated_at = Date.now(); + save(state); return; } - db.prepare( - ` - INSERT INTO ai_facts ( - guild_id, channel_id, user_id, fact_type, fact_key, fact_value, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) - `, - ).run( - guildId || null, - null, - userId || null, - factType, - factKey, - factValue, - Date.now(), - Date.now(), - ); + const id = nextId(state.ai_facts); + state.ai_facts.push({ id, guild_id: guildId || null, channel_id: null, user_id: userId || null, fact_type: factType, fact_key: factKey, fact_value: factValue, created_at: Date.now(), updated_at: Date.now() }); + save(state); }, getUserFacts(guildId, userId) { - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE guild_id IS ? AND user_id IS ? - ORDER BY updated_at DESC - `, - ) - .all(guildId || null, userId || null); + return state.ai_facts.filter(f => f.guild_id === (guildId || null) && f.user_id === (userId || null)).sort((a,b) => b.updated_at - a.updated_at); }, getUserFactsByScope({ guildId = null, userId = null, scope = "guild" }) { if (!userId) return []; - if (scope === "global") { - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE user_id IS ? - ORDER BY updated_at DESC - `, - ) - .all(userId || null); + return state.ai_facts.filter(f => f.user_id === (userId || null)).sort((a,b) => b.updated_at - a.updated_at); } - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE guild_id IS ? AND user_id IS ? - ORDER BY updated_at DESC - `, - ) - .all(guildId || null, userId || null); + return state.ai_facts.filter(f => f.guild_id === (guildId || null) && f.user_id === (userId || null)).sort((a,b) => b.updated_at - a.updated_at); }, addMessage({ guildId, channelId, userId, role, content }) { - db.prepare( - ` - INSERT INTO ai_conversations ( - guild_id, channel_id, user_id, role, content, created_at - ) VALUES (?, ?, ?, ?, ?, ?) - `, - ).run( - guildId || null, - channelId || null, - userId || null, - role, - content, - Date.now(), - ); + const id = nextId(state.ai_conversations); + state.ai_conversations.push({ id, guild_id: guildId || null, channel_id: channelId || null, user_id: userId || null, role, content, created_at: Date.now() }); + save(state); }, getRecentMessages(channelId, limit = 15) { - return db - .prepare( - ` - SELECT * FROM ai_conversations - WHERE channel_id = ? - ORDER BY created_at DESC - LIMIT ? - `, - ) - .all(channelId, limit) - .reverse(); + const msgs = state.ai_conversations.filter(m => m.channel_id === channelId).sort((a,b) => b.created_at - a.created_at).slice(0, limit).reverse(); + return msgs; }, getRecentMessagesByScope({ guildId = null, channelId = null, limit = 15, scope = "guild" }) { if (scope === "channel") { - return db - .prepare( - ` - SELECT * FROM ai_conversations - WHERE channel_id = ? - ORDER BY created_at DESC - LIMIT ? - `, - ) - .all(channelId || null, limit) - .reverse(); + return state.ai_conversations.filter(m => m.channel_id === (channelId || null)).sort((a,b) => b.created_at - a.created_at).slice(0, limit).reverse(); } if (scope === "global") { - return db - .prepare( - ` - SELECT * FROM ai_conversations - ORDER BY created_at DESC - LIMIT ? - `, - ) - .all(limit) - .reverse(); + return state.ai_conversations.sort((a,b) => b.created_at - a.created_at).slice(0, limit).reverse(); } - return db - .prepare( - ` - SELECT * FROM ai_conversations - WHERE guild_id IS ? - ORDER BY created_at DESC - LIMIT ? - `, - ) - .all(guildId || null, limit) - .reverse(); + return state.ai_conversations.filter(m => m.guild_id === (guildId || null)).sort((a,b) => b.created_at - a.created_at).slice(0, limit).reverse(); }, saveSummary({ guildId, channelId, summary }) { - const existing = db - .prepare( - ` - SELECT id FROM ai_summaries - WHERE guild_id IS ? AND channel_id IS ? - ORDER BY updated_at DESC - LIMIT 1 - `, - ) - .get(guildId || null, channelId || null); - + const existing = state.ai_summaries.find(s => s.guild_id === (guildId || null) && s.channel_id === (channelId || null)); if (existing) { - db.prepare( - ` - UPDATE ai_summaries - SET summary = ?, updated_at = ? - WHERE id = ? - `, - ).run(summary, Date.now(), existing.id); + existing.summary = summary; + existing.updated_at = Date.now(); + save(state); return; } - - db.prepare( - ` - INSERT INTO ai_summaries ( - guild_id, channel_id, summary, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?) - `, - ).run(guildId || null, channelId || null, summary, Date.now(), Date.now()); + const id = nextId(state.ai_summaries); + state.ai_summaries.push({ id, guild_id: guildId || null, channel_id: channelId || null, summary, created_at: Date.now(), updated_at: Date.now() }); + save(state); }, getLatestSummary(channelId) { - return db - .prepare( - ` - SELECT * FROM ai_summaries - WHERE channel_id = ? - ORDER BY updated_at DESC - LIMIT 1 - `, - ) - .get(channelId); + const arr = state.ai_summaries.filter(s => s.channel_id === channelId).sort((a,b) => b.updated_at - a.updated_at); + return arr.length ? arr[0] : null; }, getLatestSummaryByScope({ guildId = null, channelId = null, scope = "guild" }) { if (scope === "channel") { - return db - .prepare( - ` - SELECT * FROM ai_summaries - WHERE channel_id = ? - ORDER BY updated_at DESC - LIMIT 1 - `, - ) - .get(channelId || null); + const arr = state.ai_summaries.filter(s => s.channel_id === (channelId || null)).sort((a,b) => b.updated_at - a.updated_at); + return arr.length ? arr[0] : null; } - if (scope === "global") { - return db - .prepare( - ` - SELECT * FROM ai_summaries - ORDER BY updated_at DESC - LIMIT 1 - `, - ) - .get(); + const arr = state.ai_summaries.sort((a,b) => b.updated_at - a.updated_at); + return arr.length ? arr[0] : null; } - return db - .prepare( - ` - SELECT * FROM ai_summaries - WHERE guild_id IS ? - ORDER BY updated_at DESC - LIMIT 1 - `, - ) - .get(guildId || null); + const arr = state.ai_summaries.filter(s => s.guild_id === (guildId || null)).sort((a,b) => b.updated_at - a.updated_at); + return arr.length ? arr[0] : null; }, saveFact({ guildId, channelId, factType, factKey, factValue }) { - const existing = db - .prepare( - ` - SELECT id FROM ai_facts - WHERE guild_id IS ? AND channel_id IS ? AND fact_type = ? AND fact_key = ? - LIMIT 1 - `, - ) - .get(guildId || null, channelId || null, factType, factKey); - + const existing = state.ai_facts.find(f => f.guild_id === (guildId || null) && f.channel_id === (channelId || null) && f.fact_type === factType && f.fact_key === factKey); if (existing) { - db.prepare( - ` - UPDATE ai_facts - SET fact_value = ?, updated_at = ? - WHERE id = ? - `, - ).run(factValue, Date.now(), existing.id); + existing.fact_value = factValue; + existing.updated_at = Date.now(); + save(state); return; } - - db.prepare( - ` - INSERT INTO ai_facts ( - guild_id, channel_id, fact_type, fact_key, fact_value, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?) - `, - ).run( - guildId || null, - channelId || null, - factType, - factKey, - factValue, - Date.now(), - Date.now(), - ); + const id = nextId(state.ai_facts); + state.ai_facts.push({ id, guild_id: guildId || null, channel_id: channelId || null, user_id: null, fact_type: factType, fact_key: factKey, fact_value: factValue, created_at: Date.now(), updated_at: Date.now() }); + save(state); }, getFacts(channelId) { - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE channel_id = ? - ORDER BY updated_at DESC - `, - ) - .all(channelId); + return state.ai_facts.filter(f => f.channel_id === channelId).sort((a,b) => b.updated_at - a.updated_at); }, getFactsByScope({ guildId = null, channelId = null, scope = "guild" }) { if (scope === "channel") { - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE channel_id = ? AND user_id IS NULL - ORDER BY updated_at DESC - `, - ) - .all(channelId || null); + return state.ai_facts.filter(f => f.channel_id === (channelId || null) && f.user_id == null).sort((a,b) => b.updated_at - a.updated_at); } - if (scope === "global") { - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE user_id IS NULL - ORDER BY updated_at DESC - `, - ) - .all(); + return state.ai_facts.filter(f => f.user_id == null).sort((a,b) => b.updated_at - a.updated_at); } - return db - .prepare( - ` - SELECT * FROM ai_facts - WHERE guild_id IS ? AND user_id IS NULL - ORDER BY updated_at DESC - `, - ) - .all(guildId || null); + return state.ai_facts.filter(f => f.guild_id === (guildId || null) && f.user_id == null).sort((a,b) => b.updated_at - a.updated_at); }, addKnowledge({ sourceType, sourceName, title, content }) { - db.prepare( - ` - INSERT INTO ai_knowledge ( - source_type, source_name, title, content, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?) - `, - ).run(sourceType, sourceName, title, content, Date.now(), Date.now()); + const id = nextId(state.ai_knowledge); + state.ai_knowledge.push({ id, source_type: sourceType, source_name: sourceName, title, content, created_at: Date.now(), updated_at: Date.now() }); + save(state); }, getKnowledge(limit = 25) { - return db - .prepare( - ` - SELECT * FROM ai_knowledge - ORDER BY updated_at DESC - LIMIT ? - `, - ) - .all(limit); + return state.ai_knowledge.sort((a,b) => b.updated_at - a.updated_at).slice(0, limit); }, clearKnowledge() { - db.prepare(`DELETE FROM ai_knowledge`).run(); + state.ai_knowledge = []; + save(state); }, clearConversations(channelId) { if (!channelId) return; - db.prepare(`DELETE FROM ai_conversations WHERE channel_id = ?`).run(channelId); + state.ai_conversations = state.ai_conversations.filter(c => c.channel_id !== channelId); + save(state); }, }; \ No newline at end of file diff --git a/Structures/Database.js b/Structures/Database.js index 532bd35..d7b190e 100644 --- a/Structures/Database.js +++ b/Structures/Database.js @@ -1,120 +1,46 @@ -// SupportBot | Emerald Services -const Database = require("better-sqlite3"); +// SupportBot | JSON fallback adapter for environments without native addons (Pterodactyl) +const fs = require("fs"); const path = require("path"); -const db = new Database(path.join(__dirname, "../Data/supportbot.db")); +const DB_PATH = path.join(__dirname, "../Data/supportbot.json"); -db.prepare( - ` - CREATE TABLE IF NOT EXISTS suggestions ( - thread_id TEXT PRIMARY KEY, - author_id TEXT, - text TEXT, - status TEXT DEFAULT 'Created' - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS profiles ( - user_id TEXT PRIMARY KEY, - bio TEXT, - timezone TEXT, - clockedIn INTEGER DEFAULT 0 - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS tickets ( - ticket_id TEXT PRIMARY KEY, - user_id TEXT, - status TEXT DEFAULT 'open', - created_at INTEGER, - updated_at INTEGER, - subject TEXT, - description TEXT - ) -`, -).run(); - -// Safe column upgrades -const safeAlter = (sql) => { +function load() { try { - db.prepare(sql).run(); + const raw = fs.readFileSync(DB_PATH, "utf8"); + return JSON.parse(raw); } catch (e) { - if (!String(e).includes("duplicate column name")) throw e; + return { + suggestions: {}, + profiles: {}, + tickets: {}, + ticket_panel: [], + ticket_users: {}, + settings: {}, + }; } -}; +} -safeAlter(`ALTER TABLE tickets ADD COLUMN voiceChannelId TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN department TEXT DEFAULT 'general'`); -safeAlter(`ALTER TABLE tickets ADD COLUMN priority TEXT DEFAULT 'medium'`); -safeAlter(`ALTER TABLE tickets ADD COLUMN aiModeEnabled INTEGER DEFAULT 0`); -safeAlter(`ALTER TABLE tickets ADD COLUMN aiChannelId TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN aiType TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN aiEnabledBy TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN aiEnabledAt INTEGER`); -safeAlter(`ALTER TABLE tickets ADD COLUMN questionAnswers TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN ticketName TEXT`); -safeAlter(`ALTER TABLE tickets ADD COLUMN ticketNumber TEXT`); +function save(state) { + try { + fs.mkdirSync(path.dirname(DB_PATH), { recursive: true }); + fs.writeFileSync(DB_PATH, JSON.stringify(state, null, 2), "utf8"); + } catch (e) { + console.error("Failed to persist database:", e); + } +} -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ticket_panel ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - message_id TEXT, - channel_id TEXT, - created_at INTEGER - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS ticket_users ( - ticket_id TEXT, - user_id TEXT, - PRIMARY KEY(ticket_id, user_id) - ) -`, -).run(); - -db.prepare( - ` - CREATE TABLE IF NOT EXISTS settings ( - id INTEGER PRIMARY KEY, - data TEXT - ) -`, -).run(); +const state = load(); function ensureProfile(userId) { - const existing = db - .prepare( - ` - SELECT user_id FROM profiles WHERE user_id = ? - `, - ) - .get(userId); - - if (!existing) { - db.prepare( - ` - INSERT INTO profiles (user_id, bio, timezone, clockedIn) - VALUES (?, '', '', 0) - `, - ).run(userId); + if (!state.profiles[userId]) { + state.profiles[userId] = { user_id: userId, bio: "", timezone: "", clockedIn: 0 }; + save(state); } } function normaliseTicketRow(row) { if (!row) return null; - let questionAnswers = []; - if (row.questionAnswers) { try { questionAnswers = JSON.parse(row.questionAnswers); @@ -126,8 +52,7 @@ function normaliseTicketRow(row) { return { ...row, aiModeEnabled: Boolean(row.aiModeEnabled), - clockedIn: - row.clockedIn !== undefined ? Boolean(row.clockedIn) : row.clockedIn, + clockedIn: row.clockedIn !== undefined ? Boolean(row.clockedIn) : row.clockedIn, questionAnswers, }; } @@ -135,53 +60,16 @@ function normaliseTicketRow(row) { module.exports = { addTicket(ticket) { const now = Date.now(); + const id = ticket.id; + state.tickets[id] = state.tickets[id] || {}; + const existing = state.tickets[id]; - db.prepare( - ` - INSERT INTO tickets ( - ticket_id, - user_id, - subject, - description, - created_at, - updated_at, - department, - priority, - aiModeEnabled, - aiChannelId, - aiType, - aiEnabledBy, - aiEnabledAt, - questionAnswers, - ticketName, - ticketNumber - ) - VALUES ( - @ticket_id, - @user_id, - @subject, - @description, - @created_at, - @updated_at, - @department, - @priority, - @aiModeEnabled, - @aiChannelId, - @aiType, - @aiEnabledBy, - @aiEnabledAt, - @questionAnswers, - @ticketName, - @ticketNumber - ) - ON CONFLICT(ticket_id) DO NOTHING - `, - ).run({ - ticket_id: ticket.id, + state.tickets[id] = { + ticket_id: id, user_id: ticket.user, subject: ticket.reason || "", description: ticket.description || "", - created_at: now, + created_at: existing.created_at || now, updated_at: now, department: ticket.department || "general", priority: ticket.priority || "medium", @@ -193,61 +81,46 @@ module.exports = { questionAnswers: JSON.stringify(ticket.questionAnswers || []), ticketName: ticket.name || null, ticketNumber: ticket.number || null, - }); + status: existing.status || "open", + }; + + save(state); if (global.apiServer) { global.apiServer.broadcast("ticket_created", { - ticket_id: ticket.id, + ticket_id: id, user_id: ticket.user, subject: ticket.reason || "", description: ticket.description || "", department: ticket.department || "general", priority: ticket.priority || "medium", - created_at: now + created_at: now, }); } }, updateTicketQuestionAnswers(ticketId, questionAnswers = []) { - db.prepare( - ` - UPDATE tickets - SET questionAnswers=@questionAnswers, updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - questionAnswers: JSON.stringify(questionAnswers), - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.questionAnswers = JSON.stringify(questionAnswers); + t.updated_at = Date.now(); + save(state); }, updateTicketVoice(ticketId, voiceChannelId) { - db.prepare( - ` - UPDATE tickets - SET voiceChannelId=@voiceChannelId, updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - voiceChannelId, - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.voiceChannelId = voiceChannelId; + t.updated_at = Date.now(); + save(state); }, updateTicketStatus(ticketId, status) { - db.prepare( - ` - UPDATE tickets - SET status=@status, updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - status, - updatedAt: Date.now(), - ticketId, - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.status = status; + t.updated_at = Date.now(); + save(state); if (global.apiServer && status === "closed") { global.apiServer.broadcast("ticket_closed", { ticket_id: ticketId }); @@ -255,236 +128,120 @@ module.exports = { }, updateTicketDepartment(ticketId, department) { - db.prepare( - ` - UPDATE tickets - SET department=@department, updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - department, - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.department = department; + t.updated_at = Date.now(); + save(state); }, updateTicketPriority(ticketId, priority) { - db.prepare( - ` - UPDATE tickets - SET priority=@priority, updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - priority, - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.priority = priority; + t.updated_at = Date.now(); + save(state); }, setTicketAIState(ticketId, aiState = {}) { - db.prepare( - ` - UPDATE tickets - SET - aiModeEnabled=@aiModeEnabled, - aiChannelId=@aiChannelId, - aiType=@aiType, - aiEnabledBy=@aiEnabledBy, - aiEnabledAt=@aiEnabledAt, - updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - aiModeEnabled: aiState.enabled ? 1 : 0, - aiChannelId: aiState.aiChannelId || null, - aiType: aiState.aiType || null, - aiEnabledBy: aiState.enabledBy || null, - aiEnabledAt: aiState.enabledAt - ? new Date(aiState.enabledAt).getTime() - : aiState.enabled - ? Date.now() - : null, - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.aiModeEnabled = aiState.enabled ? 1 : 0; + t.aiChannelId = aiState.aiChannelId || null; + t.aiType = aiState.aiType || null; + t.aiEnabledBy = aiState.enabledBy || null; + t.aiEnabledAt = aiState.enabledAt ? new Date(aiState.enabledAt).getTime() : aiState.enabled ? Date.now() : null; + t.updated_at = Date.now(); + save(state); }, - enableTicketAI( - ticketId, - aiChannelId = null, - aiType = null, - enabledBy = null, - ) { - db.prepare( - ` - UPDATE tickets - SET - aiModeEnabled=1, - aiChannelId=@aiChannelId, - aiType=@aiType, - aiEnabledBy=@aiEnabledBy, - aiEnabledAt=@aiEnabledAt, - updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - aiChannelId, - aiType, - aiEnabledBy, - aiEnabledAt: Date.now(), - updatedAt: Date.now(), - }); + enableTicketAI(ticketId, aiChannelId = null, aiType = null, enabledBy = null) { + const t = state.tickets[ticketId]; + if (!t) return; + t.aiModeEnabled = 1; + t.aiChannelId = aiChannelId; + t.aiType = aiType; + t.aiEnabledBy = enabledBy; + t.aiEnabledAt = Date.now(); + t.updated_at = Date.now(); + save(state); }, disableTicketAI(ticketId) { - db.prepare( - ` - UPDATE tickets - SET - aiModeEnabled=0, - updated_at=@updatedAt - WHERE ticket_id=@ticketId - `, - ).run({ - ticketId, - updatedAt: Date.now(), - }); + const t = state.tickets[ticketId]; + if (!t) return; + t.aiModeEnabled = 0; + t.updated_at = Date.now(); + save(state); }, getTicket(ticketId) { - const row = db - .prepare( - ` - SELECT * FROM tickets WHERE ticket_id=@ticketId - `, - ) - .get({ ticketId }); - - return normaliseTicketRow(row); + return normaliseTicketRow(state.tickets[ticketId]); }, getTicketByAIChannel(aiChannelId) { - const row = db - .prepare( - ` - SELECT * FROM tickets WHERE aiChannelId=@aiChannelId LIMIT 1 - `, - ) - .get({ aiChannelId }); - - return normaliseTicketRow(row); + const keys = Object.keys(state.tickets); + for (const k of keys) { + const t = state.tickets[k]; + if (t && t.aiChannelId === aiChannelId) return normaliseTicketRow(t); + } + return null; }, getAllTickets() { - return db.prepare(`SELECT * FROM tickets`).all().map(normaliseTicketRow); + return Object.values(state.tickets).map(normaliseTicketRow); }, saveTicketPanel(messageId, channelId) { - db.prepare( - ` - INSERT INTO ticket_panel (message_id, channel_id, created_at) - VALUES (@messageId, @channelId, @createdAt) - `, - ).run({ messageId, channelId, createdAt: Date.now() }); + state.ticket_panel.push({ id: Date.now(), message_id: messageId, channel_id: channelId, created_at: Date.now() }); + save(state); }, getTicketPanel() { - return db - .prepare( - ` - SELECT * FROM ticket_panel ORDER BY id DESC LIMIT 1 - `, - ) - .get(); + const arr = state.ticket_panel; + if (!arr || arr.length === 0) return null; + return arr[arr.length - 1]; }, addUserToTicket(ticketId, userId) { - db.prepare( - ` - INSERT INTO ticket_users (ticket_id, user_id) - VALUES (?, ?) - ON CONFLICT(ticket_id, user_id) DO NOTHING - `, - ).run(ticketId, userId); + state.ticket_users[ticketId] = state.ticket_users[ticketId] || new Set(); + // Sets cannot be serialized directly; store as array + const arr = new Set(state.ticket_users[ticketId]); + arr.add(userId); + state.ticket_users[ticketId] = Array.from(arr); + save(state); }, removeUserFromTicket(ticketId, userId) { - db.prepare( - ` - DELETE FROM ticket_users WHERE ticket_id=? AND user_id=? - `, - ).run(ticketId, userId); + const arr = new Set(state.ticket_users[ticketId] || []); + arr.delete(userId); + state.ticket_users[ticketId] = Array.from(arr); + save(state); }, getTicketUsers(ticketId) { - return db - .prepare( - ` - SELECT user_id FROM ticket_users WHERE ticket_id=? - `, - ) - .all(ticketId) - .map((r) => r.user_id); + return (state.ticket_users[ticketId] || []).slice(); }, getSettings() { - const row = db.prepare(`SELECT data FROM settings WHERE id=1`).get(); - if (!row) return {}; - try { - return JSON.parse(row.data); - } catch { - return {}; - } + return state.settings || {}; }, getProfile(userId) { ensureProfile(userId); - - const row = db - .prepare( - ` - SELECT * FROM profiles WHERE user_id = ? - `, - ) - .get(userId); - - if (!row) { - return { - user_id: userId, - bio: "", - timezone: "", - clockedIn: false, - }; - } - - return { - ...row, - clockedIn: Boolean(row.clockedIn), - }; + const row = state.profiles[userId]; + if (!row) return { user_id: userId, bio: "", timezone: "", clockedIn: false }; + return { ...row, clockedIn: Boolean(row.clockedIn) }; }, setClockedIn(userId, clockedIn) { ensureProfile(userId); - - db.prepare( - ` - UPDATE profiles - SET clockedIn = ? - WHERE user_id = ? - `, - ).run(clockedIn ? 1 : 0, userId); + state.profiles[userId].clockedIn = clockedIn ? 1 : 0; + save(state); }, saveSettings(obj) { - const data = JSON.stringify(obj); - db.prepare( - ` - INSERT INTO settings (id, data) - VALUES (1, @data) - ON CONFLICT(id) DO UPDATE SET data = excluded.data - `, - ).run({ data }); + state.settings = obj || {}; + save(state); }, }; From 4eef1867e30ba5295832ae8cbd6688b4b0e6abd1 Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Mon, 10 Aug 2026 20:15:00 +0100 Subject: [PATCH 19/22] 26.2 pre3 --- .gitignore | 14 + API/server.js | 71 +- Commands/Tickets/close.js | 5 +- Commands/Tickets/ticket.js | 17 +- Commands/Tickets/ticketpanel.js | 1 + Commands/Utils/mod.js | 74 +- Configs/messages.yml | 3 +- Configs/supportbot-ai.yml | 18 +- Configs/supportbot.yml | 43 +- Configs/ticket-panel.yml | 6 +- Events/interactionCreate.js | 17 +- Structures/BotStartup.js | 20 + Structures/DashboardGroupStore.js | 5 +- Structures/DashboardPermissions.js | 15 +- Structures/DashboardSetup.js | 72 +- Structures/DashboardUserStore.js | 26 +- Structures/Database.js | 744 +++++++++++++++++++-- Structures/GuildManager.js | 1 + Structures/TicketID.js | 40 +- index.js | 21 +- package.json | 1 + public/dashboard/assets/index-BpDEEtaJ.js | 206 ------ public/dashboard/assets/index-DW3eyGbF.css | 1 - public/dashboard/assets/index-Dx-VdUAO.css | 1 + public/dashboard/assets/index-xYh1zX07.js | 180 +++++ public/dashboard/index.html | 4 +- 26 files changed, 1221 insertions(+), 385 deletions(-) delete mode 100644 public/dashboard/assets/index-BpDEEtaJ.js delete mode 100644 public/dashboard/assets/index-DW3eyGbF.css create mode 100644 public/dashboard/assets/index-Dx-VdUAO.css create mode 100644 public/dashboard/assets/index-xYh1zX07.js diff --git a/.gitignore b/.gitignore index 15e369f..7209125 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,19 @@ node_modules +# Local database, runtime data, and transcripts +Data/*.db +Data/*.db-shm +Data/*.db-wal +Data/Transcripts/* +Data/dashboard-groups.json +Data/dashboard-users.json +Data/transcript-settings.json + +# Local log files +Logs/Output/* +Logs/Errors/* +Logs/Warns/* + # Dashboard UI source at repo root only (do not ignore public/dashboard/) /dashboard/ diff --git a/API/server.js b/API/server.js index 3c87429..49205e1 100644 --- a/API/server.js +++ b/API/server.js @@ -242,7 +242,7 @@ class APIServer { requirePermission(permission) { return (req, res, next) => { if (req.dashboardService) return next(); - if (req.dashboardIsOwner || req.dashboardImpersonatingGroup) return next(); + if (req.dashboardIsOwner && !req.dashboardImpersonatingGroup) return next(); if (hasPermission(req.dashboardPermissions, permission)) return next(); return forbid(res); }; @@ -251,7 +251,7 @@ class APIServer { requireConfigAccess(mode = 'view') { return (req, res, next) => { if (req.dashboardService) return next(); - if (req.dashboardIsOwner || req.dashboardImpersonatingGroup) return next(); + if (req.dashboardIsOwner && !req.dashboardImpersonatingGroup) return next(); const file = req.params?.file || req.body?.filename; if (!file) return next(); if (!canAccessConfig(req.dashboardPermissions, file, mode)) { @@ -637,6 +637,68 @@ h1{font-size:1.25rem}a{color:#a78bfa} } }); + app.post('/system/tickets/create', p('tickets'), async (req, res) => { + try { + const { department, subject, reason, userId } = req.body; + if (!this.client?.user) { + return res.status(503).json({ success: false, error: 'Bot is not connected to Discord.' }); + } + + const guild = this.client.guilds.cache.first(); + if (!guild) { + return res.status(404).json({ success: false, error: 'No connected Discord server found.' }); + } + + const deptKey = department || supportbot.Ticket?.DepartmentSystem?.DefaultDepartment || 'general'; + const deptConfig = supportbot.Ticket?.DepartmentSystem?.Departments?.[deptKey]; + if (deptConfig && deptConfig.Enabled === false) { + return res.status(400).json({ success: false, error: `Ticket department '${deptKey}' is currently disabled.` }); + } + + const targetUserId = userId || req.dashboardUser?.id || guild.ownerId; + let targetUser = await this.client.users.fetch(targetUserId).catch(() => null); + if (!targetUser) { + targetUser = this.client.user; + } + + const openCmd = this.client.commands.get(cmdconfig.OpenTicket?.Command || "new"); + if (!openCmd) { + return res.status(500).json({ success: false, error: 'Open ticket command not found in bot.' }); + } + + const fakeInteraction = { + guild, + user: targetUser, + member: await guild.members.fetch(targetUser.id).catch(() => null), + channel: guild.channels.cache.first(), + department: deptKey, + reason: subject || reason || "Opened via Web Dashboard", + priority: deptConfig?.DefaultPriority || supportbot.Ticket?.PrioritySystem?.DefaultPriority || "medium", + isCommand: () => false, + isChatInputCommand: () => false, + isButton: () => false, + isStringSelectMenu: () => false, + isModalSubmit: () => false, + deferred: false, + replied: false, + deferReply: async () => {}, + reply: async (payload) => { fakeInteraction.repliedPayload = payload; }, + followUp: async (payload) => { fakeInteraction.followUpPayload = payload; }, + editReply: async (payload) => { fakeInteraction.editReplyPayload = payload; } + }; + + await openCmd.run(fakeInteraction); + + res.json({ + success: true, + message: `Ticket successfully created for department: ${deptConfig?.Name || deptKey}!`, + }); + } catch (err) { + console.error('[API] Error creating ticket:', err); + res.status(500).json({ success: false, error: err.message || 'Failed to create ticket' }); + } + }); + app.get('/system/tickets/:ticketId/messages', p('tickets'), async (req, res) => { const { ticketId } = req.params; try { @@ -1051,7 +1113,7 @@ h1{font-size:1.25rem}a{color:#a78bfa} res.json({ success: true, data: { - users: listUsers(oauth), + users: listUsers(oauth, this.client), roles: ROLES, configFiles: CONFIG_FILES, }, @@ -1320,6 +1382,9 @@ h1{font-size:1.25rem}a{color:#a78bfa} }); app.put('/configs/raw', cv('edit'), async (req, res) => { + if (!hasPermission(req.dashboardUser?.permissions, 'configs.raw_yaml')) { + return res.status(403).json({ success: false, error: 'Forbidden: Raw YAML editing requires the Raw YAML Editor permission.' }); + } const validFiles = ['supportbot', 'ticket-panel', 'commands', 'messages', 'supportbot-ai', 'api']; const file = req.body.filename; let content = req.body.content; diff --git a/Commands/Tickets/close.js b/Commands/Tickets/close.js index 5eeaf48..3f3299d 100644 --- a/Commands/Tickets/close.js +++ b/Commands/Tickets/close.js @@ -33,9 +33,10 @@ function buildContainer(title, lines = []) { container.addSeparatorComponents(new Discord.SeparatorBuilder().setDivider(true)); - if (lines.length > 0) { + const textContent = lines.filter(Boolean).join("\n").trim(); + if (textContent.length > 0) { container.addTextDisplayComponents( - new Discord.TextDisplayBuilder().setContent(lines.join("\n")), + new Discord.TextDisplayBuilder().setContent(textContent), ); } diff --git a/Commands/Tickets/ticket.js b/Commands/Tickets/ticket.js index 2256e30..69ae6b3 100644 --- a/Commands/Tickets/ticket.js +++ b/Commands/Tickets/ticket.js @@ -28,22 +28,7 @@ const Command = require("../../Structures/Command.js"); const TicketNumberID = require("../../Structures/TicketID.js"); async function isBlacklisted(userId) { - let blacklistData; - try { - blacklistData = JSON.parse( - fs.readFileSync("./Data/BlacklistedUsers.json", "utf8"), - ); - } catch (error) { - console.error("Error reading BlacklistedUsers.json:", error); - return false; - } - - if (!blacklistData || !Array.isArray(blacklistData.blacklistedUsers)) { - console.error("blacklistedUsers is not defined or is not an array"); - return false; - } - - return blacklistData.blacklistedUsers.includes(userId); + return typeof db.isUserBlacklisted === "function" ? db.isUserBlacklisted(userId) : false; } async function getClockedInUsers(guild) { diff --git a/Commands/Tickets/ticketpanel.js b/Commands/Tickets/ticketpanel.js index 0862d12..cb82e7e 100644 --- a/Commands/Tickets/ticketpanel.js +++ b/Commands/Tickets/ticketpanel.js @@ -116,6 +116,7 @@ module.exports = new Command({ } const departmentOptions = Object.entries(departments) + .filter(([_, dept]) => dept && dept.Enabled !== false) .slice(0, 25) .map(([key, dept]) => ({ label: dept.Name || key, diff --git a/Commands/Utils/mod.js b/Commands/Utils/mod.js index c4e0692..545049f 100644 --- a/Commands/Utils/mod.js +++ b/Commands/Utils/mod.js @@ -1,6 +1,7 @@ const fs = require("fs"); const { ApplicationCommandOptionType, ApplicationCommandType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType, MessageFlags } = require("discord.js"); const yaml = require("js-yaml"); +const db = require("../../Structures/Database.js"); const supportbot = require("../../Structures/ConfigStore").supportbot; const cmdconfig = require("../../Structures/ConfigStore").commands; const msgconfig = require("../../Structures/ConfigStore").messages; @@ -18,28 +19,28 @@ function chunkArray(arr, size) { module.exports = new Command({ name: cmdconfig.Mod.Command, - description: cmdconfig.Mod.Command, + description: cmdconfig.Mod.Description || "Moderation commands", type: ApplicationCommandType.ChatInput, options: [ { name: cmdconfig.Mod.TicketBlacklist.Command, - description: cmdconfig.Mod.TicketBlacklist.Description, + description: cmdconfig.Mod.TicketBlacklist.Description || "Ticket Blacklist Commands", type: ApplicationCommandOptionType.SubcommandGroup, options: [ { name: cmdconfig.Mod.TicketBlacklist.Add.Command, - description: msgconfig.Mod.TicketBlacklist.Add.Description || "Add a user to the ticket blacklist", + description: msgconfig.Mod.TicketBlacklist.Add.Description || "Add a user to the blacklist", type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'user', - description: msgconfig.Mod.TicketBlacklist.Add.UserDescription || "User to blacklist", + description: 'The user to blacklist', type: ApplicationCommandOptionType.User, required: true }, { - name: 'reason', - description: msgconfig.Mod.TicketBlacklist.Add.ReasonDescription || "Reason for blacklisting", + name: 'reason', + description: 'Reason for blacklisting', type: ApplicationCommandOptionType.String, required: false } @@ -47,18 +48,18 @@ module.exports = new Command({ }, { name: cmdconfig.Mod.TicketBlacklist.Remove.Command, - description: msgconfig.Mod.TicketBlacklist.Remove.Description || "Remove a user from the ticket blacklist", + description: cmdconfig.Mod.TicketBlacklist.Remove.Description || "Remove a user from the blacklist", type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'user', - description: msgconfig.Mod.TicketBlacklist.Remove.UserDescription || "User to remove from blacklist", + description: 'The user to remove from the blacklist', type: ApplicationCommandOptionType.User, required: true }, { name: 'reason', - description: msgconfig.Mod.TicketBlacklist.Remove.ReasonDescription || "Reason for removing from blacklist", + description: 'Reason for unblacklisting', type: ApplicationCommandOptionType.String, required: false } @@ -67,60 +68,32 @@ module.exports = new Command({ { name: "view", description: msgconfig.Mod.TicketBlacklist.View.Description || "View all blacklisted users", - type: ApplicationCommandOptionType.Subcommand, + type: ApplicationCommandOptionType.Subcommand } ] } ], - permissions: cmdconfig.Mod.Permission, - async run(interaction) { - const { getRole } = interaction.client; - - let SupportStaff = await getRole(supportbot.Roles.StaffMember.Staff, interaction.guild); - let Admin = await getRole(supportbot.Roles.StaffMember.Admin, interaction.guild); - let Moderator = await getRole(supportbot.Roles.StaffMember.Moderator, interaction.guild); - - if (!SupportStaff || !Admin || !Moderator) { - const missingRolesEmbed = new EmbedBuilder() - .setDescription(msgconfig.Error.InvalidChannel || "Required roles are missing!") - .setColor(supportbot.Embed.Colours.Warn); - return interaction.reply({ embeds: [missingRolesEmbed] }); - } - - const NoPerms = new EmbedBuilder() - .setDescription(msgconfig.Error.IncorrectPerms || "You do not have the correct permissions!") - .setColor(supportbot.Embed.Colours.Warn); - - if (!interaction.member.roles.cache.has(Admin.id) && !interaction.member.roles.cache.has(Moderator.id) && (!supportbot.Mod.AllowSupportStaff || !interaction.member.roles.cache.has(SupportStaff.id))) { - return interaction.reply({ embeds: [NoPerms] }); - } - - const subcommand = interaction.options.getSubcommand(false); + run: async ({ interaction }) => { + const subcommandGroup = interaction.options.getSubcommandGroup(); + const subcommand = interaction.options.getSubcommand(); const user = interaction.options.getUser('user'); const reason = interaction.options.getString('reason') || "No reason provided"; try { - let blacklistedUsers; - try { - blacklistedUsers = JSON.parse(fs.readFileSync("./Data/BlacklistedUsers.json", "utf8")).blacklistedUsers; - if (!Array.isArray(blacklistedUsers)) { - blacklistedUsers = []; - } - } catch (error) { - blacklistedUsers = []; - } + const blacklistedUsers = typeof db.getBlacklistedUsers === "function" ? db.getBlacklistedUsers() : []; if (subcommand === cmdconfig.Mod.TicketBlacklist.Add.Command) { - if (blacklistedUsers.includes(user.id)) { + if (db.isUserBlacklisted && db.isUserBlacklisted(user.id)) { const alreadyBlacklistedEmbed = new EmbedBuilder() .setDescription(msgconfig.Mod.TicketBlacklist.Add.AlreadyBlacklisted.replace("{userTag}", user.tag) || ":x: User is already blacklisted.") .setColor(supportbot.Embed.Colours.Warn); return interaction.reply({ embeds: [alreadyBlacklistedEmbed], flags: MessageFlags.Ephemeral }); } - blacklistedUsers.push(user.id); - fs.writeFileSync("./Data/BlacklistedUsers.json", JSON.stringify({ "blacklistedUsers": blacklistedUsers }, null, 4)); + if (typeof db.addBlacklistedUser === "function") { + db.addBlacklistedUser(user.id, reason, interaction.user.tag); + } const successEmbed = new EmbedBuilder() .setDescription(msgconfig.Mod.TicketBlacklist.Add.Success.replace("{userTag}", user.tag) || ":white_check_mark: User has been blacklisted.") @@ -133,7 +106,7 @@ module.exports = new Command({ .setColor(msgconfig.TicketBlacklistLog.Colour || supportbot.Embed.Colours.Success) .setFooter({ text: supportbot.Embed.Footer, iconURL: interaction.user.displayAvatarURL() }) .setDescription(`> **User:** ${user.tag} (\`${user.id}\`)\n> **Actioned by:** <@${interaction.user.id}>`) - .addFields({ name: "Action", value: "\`\`\`Removed from blacklist\`\`\`", inline: false }) + .addFields({ name: "Action", value: "\`\`\`Added to blacklist\`\`\`", inline: false }) .addFields({ name: "Reason", value: `\`\`\`${reason}\`\`\``, inline: false }); blacklistChannel.send({ embeds: [blacklistLogEmbed] }); @@ -145,15 +118,16 @@ module.exports = new Command({ }); } else if (subcommand === cmdconfig.Mod.TicketBlacklist.Remove.Command) { - if (!blacklistedUsers.includes(user.id)) { + if (db.isUserBlacklisted && !db.isUserBlacklisted(user.id)) { const notBlacklistedEmbed = new EmbedBuilder() .setDescription(msgconfig.Mod.TicketBlacklist.Remove.NotBlacklisted.replace("{userTag}", user.tag) || ":x: User is not blacklisted.") .setColor(supportbot.Embed.Colours.Warn); return interaction.reply({ embeds: [notBlacklistedEmbed], flags: MessageFlags.Ephemeral }); } - blacklistedUsers = blacklistedUsers.filter(id => id !== user.id); - fs.writeFileSync("./Data/BlacklistedUsers.json", JSON.stringify({ "blacklistedUsers": blacklistedUsers }, null, 4)); + if (typeof db.removeBlacklistedUser === "function") { + db.removeBlacklistedUser(user.id); + } const removedEmbed = new EmbedBuilder() .setDescription(msgconfig.Mod.TicketBlacklist.Remove.Success.replace("{userTag}", user.tag) || ":white_check_mark: User has been removed from the blacklist.") diff --git a/Configs/messages.yml b/Configs/messages.yml index a6ff5e9..5ee6d6c 100644 --- a/Configs/messages.yml +++ b/Configs/messages.yml @@ -8,7 +8,8 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Official Website & Marketplace: https://emeraldsrv.com +# Official Documentation: https://docs.emeraldsrv.com +# Addons Marketplace: https://community.emeraldsrv.com # # Messages Configuration (messages.yml) diff --git a/Configs/supportbot-ai.yml b/Configs/supportbot-ai.yml index 4f47c42..e8f9f89 100644 --- a/Configs/supportbot-ai.yml +++ b/Configs/supportbot-ai.yml @@ -1,15 +1,3 @@ -# ___ _ ___ _ -# / __> _ _ ___ ___ ___ _ _ _| |_ | . > ___ _| |_ -# \__ \| | || . \| . \/ . \| '_> | | | . \/ . \ | | -# <___/`___|| _/| _/\___/|_| |_| |___/\___/ |_| -# |_| |_| -# -# SupportBot created by Emerald Services -# Installed with MIT License -# -# Discord Support: https://discord.gg/emeraldsrv -# Official Website & Marketplace: https://emeraldsrv.com - # ------------------------- # SupportBot AI # @@ -20,8 +8,8 @@ Enabled: true General: - Provider: "groq" - Model: "MODEL_NAME" + Provider: "openai" + Model: "MODEL" Model_API_Key: "MODEL_API_KEY" # Providers Available: # "openai" - Use OpenAI's GPT models. Example: "gpt-5.4" "gpt-5-mini" @@ -33,7 +21,7 @@ General: Temperature: 0.4 Name: "SupportBot AI" - PastebinAPI_Key: "PASTEBIN_API_KEY" + PastebinAPI_Key: "YOUR_PASTEBIN_API_KEY" PastebinAPI_URL: "https://pastebin.com/api/api_post.php" Style: diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index b7ee41f..e68a47a 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -8,11 +8,11 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Official Website & Marketplace: https://emeraldsrv.com +# Website: https://emeraldsrv.dev # # SupportBot Configuration (supportbot.yml) -SupportBot_Version: "v26.2-pre1" +SupportBot_Version: "v26.2-pre2" # ------------------------- # General @@ -20,12 +20,32 @@ SupportBot_Version: "v26.2-pre1" General: Name: "SupportBot" - Token: "DISCORD_BOT_TOKEN" + Token: "YOUR_BOT_TOKEN_HERE" Addons: Enabled: true - GuildId: "GUILD_ID" + GuildId: "YOUR_GUILD_ID_HERE" # ------------------------- +# Database Configuration +# ------------------------- + +Database: + # Driver options: "mysql" (works for MariaDB & MySQL) or "sqlite" + Driver: "mysql" + + # Connection Settings for MariaDB / MySQL (used when Driver is "mysql" or "mariadb") + MySQL: + Host: "localhost" + Port: 3306 + User: "root" + Password: "password" + Database: "supportbot" + ConnectionLimit: 10 + + # Connection Settings for SQLite (used when Driver is "sqlite") + SQLite: + File: "./Data/supportbot.db" + # Activity # ------------------------- @@ -33,12 +53,12 @@ Activity: Status: "SupportBot" Type: "Watching" StreamingURL: "https://www.twitch.tv/YOUR_TWITCH_NAME" - # Available Activity Types: - # - Playing - # - Watching - # - Listening - # - Competing - # - Streaming (URL required) + # Available Types: + # Playing + # Watching + # Listening + # Competing + # Streaming (URL required) # You can also update the activity via Discord using: /settings @@ -54,6 +74,7 @@ Embed: Warn: "#fca117" Footer: "SupportBot | Developed by Emerald Development" + # Use 0x to change the colour of the embeds. # ------------------------- # Roles @@ -365,4 +386,4 @@ MessageUpdate: Colour: "#f2a024" Translate: - TranslateLog: "CHANNEL_ID" \ No newline at end of file + TranslateLog: "CHANNEL_ID" diff --git a/Configs/ticket-panel.yml b/Configs/ticket-panel.yml index 09775d6..4de8d43 100644 --- a/Configs/ticket-panel.yml +++ b/Configs/ticket-panel.yml @@ -8,7 +8,8 @@ # Installed with MIT License # # Discord Support: https://discord.gg/emeraldsrv -# Official Website & Marketplace: https://emeraldsrv.com +# Official Documentation: https://docs.emeraldsrv.com +# Addons Marketplace: https://community.emeraldsrv.com # # Ticket Creation Panel Configuration (ticket-panel.yml) @@ -20,7 +21,8 @@ Panel: true Style: Title: "## 📬 Open Ticket" - Description: "Tap the button to open a support ticket, Our team will respond as soon as possible." + Description: "Tap the button to open a support ticket, Our team will respond as + soon as possible." Image: "https://cdn.1tzemerald.space/Emerald%20Services/SBPoster.png" Color: "#45b463" Layout: "3" diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index 379182b..0c98ebc 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -140,6 +140,13 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { if (interaction.isStringSelectMenu()) { if (interaction.customId === "ticketdepartmentselect") { const selectedDepartment = interaction.values[0]; + const deptConfig = supportbot.Ticket?.DepartmentSystem?.Departments?.[selectedDepartment]; + if (deptConfig && deptConfig.Enabled === false) { + return interaction.reply({ + content: "Ticket creation for this department is currently disabled.", + flags: Discord.MessageFlags.Ephemeral, + }); + } if (supportbot.Ticket.TicketReason) { const modal = new Discord.ModalBuilder() @@ -680,7 +687,15 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { }); } - if (interaction.customId === "createticket") { + if (interaction.customId === "createticket" || interaction.customId === "openticket") { + const panelDisabled = panelconfig.Panel === false || supportbot.Ticket?.Enabled === false; + if (panelDisabled) { + return interaction.reply({ + content: "Ticket creation is currently disabled.", + flags: Discord.MessageFlags.Ephemeral, + }); + } + if (supportbot.Ticket.TicketReason) { const modal = new Discord.ModalBuilder() .setCustomId("ticketReasonModal") diff --git a/Structures/BotStartup.js b/Structures/BotStartup.js index da4b4de..7e67b72 100644 --- a/Structures/BotStartup.js +++ b/Structures/BotStartup.js @@ -85,6 +85,14 @@ async function logStartup(client, options = {}) { info("Version", botVersion); info("Node.js", process.version); info("Discord.js", `v${Discord.version}`); + const db = require("./Database.js"); + const dbInfo = db.getDatabaseInfo ? db.getDatabaseInfo() : null; + if (dbInfo) { + const dbDisplay = dbInfo.type === "mysql" + ? `${dbInfo.driver} (${dbInfo.host}:${dbInfo.port}/${dbInfo.database})` + : `${dbInfo.driver} (${dbInfo.file})`; + info("Database", dbDisplay); + } info("Logged in as", client.user.tag); info("Guilds", `${client.guilds.cache.size}`); @@ -102,6 +110,16 @@ async function logStartup(client, options = {}) { console.log(""); } +function checkSetup() { + const { isSetupComplete } = require("./DashboardSetup.js"); + if (!isSetupComplete()) { + const port = configStore.api?.API?.Port || 25575; + section("Setup Required"); + status("Onboarding setup incomplete", false, `http://localhost:${port}/setup`); + console.log(""); + } +} + async function checkConfigs(client) { const supportbot = configStore.supportbot; const health = syncGuildHealth(client); @@ -169,6 +187,8 @@ async function runBotReady(client, options = {}) { if (logCommands) { logSlashCommandsRegistered(client); } + + checkSetup(); } module.exports = { diff --git a/Structures/DashboardGroupStore.js b/Structures/DashboardGroupStore.js index 069bd86..76175ec 100644 --- a/Structures/DashboardGroupStore.js +++ b/Structures/DashboardGroupStore.js @@ -22,7 +22,7 @@ const DEFAULT_GROUPS = [ color: "#3B82F6", // Blue discordRoleId: null, isSystem: true, - permissions: fullPermissions(), + permissions: fullPermissions(false, false), }, { id: "support", @@ -151,6 +151,9 @@ function createGroup(payload = {}) { } function updateGroup(id, payload = {}) { + if (id === "owner") { + throw new Error('System group "Owner" cannot be modified.'); + } const groups = loadStore(); const index = groups.findIndex((g) => g.id === id); if (index === -1) { diff --git a/Structures/DashboardPermissions.js b/Structures/DashboardPermissions.js index bd3bdcd..4b6ae2b 100644 --- a/Structures/DashboardPermissions.js +++ b/Structures/DashboardPermissions.js @@ -17,29 +17,32 @@ function configMap(view, edit) { return configs; } -function fullPermissions() { +function fullPermissions(rawYaml = true, userManage = true) { return { overview: true, tickets: true, logs: true, transcripts: true, + rawYaml: Boolean(rawYaml), settings: { view: true, update: true }, configs: configMap(true, true), - users: { view: true, manage: true }, + users: { view: true, manage: Boolean(userManage) }, }; } function permissionsFromRole(role, customPermissions) { switch (role) { case "owner": + return fullPermissions(true, true); case "admin": - return fullPermissions(); + return fullPermissions(false, false); case "moderator": return { overview: true, tickets: true, logs: true, transcripts: true, + rawYaml: false, settings: { view: true, update: false }, configs: configMap(true, false), users: { view: false, manage: false }, @@ -50,6 +53,7 @@ function permissionsFromRole(role, customPermissions) { tickets: true, logs: true, transcripts: false, + rawYaml: false, settings: { view: true, update: false }, configs: configMap(true, true), users: { view: false, manage: false }, @@ -60,6 +64,7 @@ function permissionsFromRole(role, customPermissions) { tickets: true, logs: true, transcripts: true, + rawYaml: false, settings: { view: true, update: false }, configs: configMap(true, false), users: { view: false, manage: false }, @@ -80,6 +85,7 @@ function normalizePermissions(input) { tickets: input.tickets ?? input.overview ?? base.tickets, logs: input.logs ?? base.logs, transcripts: input.transcripts ?? base.transcripts, + rawYaml: Boolean(input.rawYaml ?? input.configs?.rawYaml ?? base.rawYaml), settings: { view: input.settings?.view ?? base.settings.view, update: input.settings?.update ?? base.settings.update, @@ -105,6 +111,9 @@ function hasPermission(permissions, check) { if (check === "tickets") return Boolean(permissions.tickets ?? permissions.overview); if (check === "logs") return Boolean(permissions.logs); if (check === "transcripts") return Boolean(permissions.transcripts); + if (check === "configs.raw_yaml" || check === "configs.rawYaml" || check === "rawYaml") { + return Boolean(permissions.rawYaml ?? permissions.configs?.rawYaml ?? false); + } if (check === "settings.view") return Boolean(permissions.settings?.view); if (check === "settings.update") return Boolean(permissions.settings?.update); if (check === "users.view") return Boolean(permissions.users?.view); diff --git a/Structures/DashboardSetup.js b/Structures/DashboardSetup.js index 1f4df8c..0d981b7 100644 --- a/Structures/DashboardSetup.js +++ b/Structures/DashboardSetup.js @@ -84,6 +84,7 @@ function getOwnerIds(oauth) { function buildSteps(apiRoot, supportbot) { const oauth = apiRoot?.OAuth || {}; const token = supportbot?.General?.Token; + const dbConfig = supportbot?.Database || {}; return [ { @@ -92,6 +93,12 @@ function buildSteps(apiRoot, supportbot) { description: "From the Discord Developer Portal → your application → Bot → Reset Token.", complete: isValidBotToken(token), }, + { + id: "database", + title: "Database storage", + description: "Choose SQLite or MySQL database engine for storing bot data.", + complete: Boolean(dbConfig.Driver), + }, { id: "secretKey", title: "Dashboard session secret", @@ -334,12 +341,58 @@ function validateSecretKey(secretKey) { return { ok: true }; } +async function validateDatabase(dbDriver, dbHost, dbPort, dbUser, dbPassword, dbDatabase) { + const driver = String(dbDriver || "sqlite").toLowerCase(); + if (driver === "mysql" || driver === "mariadb") { + const host = String(dbHost || "").trim(); + const port = Number(dbPort) || 3306; + const user = String(dbUser || "").trim(); + const password = String(dbPassword || ""); + const database = String(dbDatabase || "").trim(); + + if (isEmpty(host)) return { ok: false, error: "MySQL Host is required." }; + if (isEmpty(user)) return { ok: false, error: "MySQL User is required." }; + if (isEmpty(database)) return { ok: false, error: "MySQL Database Name is required." }; + + try { + const mysql = require("mysql2/promise"); + const connection = await mysql.createConnection({ + host, + port, + user, + password, + database, + connectTimeout: 5000, + }); + await connection.end(); + return { ok: true, driver: "mysql" }; + } catch (err) { + return { + ok: false, + error: `MySQL Connection Failed: ${err.message || err.code || "Could not connect to database host."}`, + }; + } + } + + return { ok: true, driver: "sqlite" }; +} + async function validateSetupPayload(payload) { const results = {}; if (payload.botToken != null) { results.botToken = await validateBotToken(payload.botToken); } + if (payload.dbDriver != null) { + results.database = await validateDatabase( + payload.dbDriver, + payload.dbHost, + payload.dbPort, + payload.dbUser, + payload.dbPassword, + payload.dbDatabase, + ); + } if (payload.secretKey != null) { results.secretKey = validateSecretKey(payload.secretKey); } @@ -415,7 +468,24 @@ function applySetup(payload) { fs.writeFileSync(API_FILE, apiDoc.toString()); const sbDoc = YAML.parseDocument(fs.readFileSync(SUPPORTBOT_FILE, "utf8")); - sbDoc.setIn(["General", "Token"], String(payload.botToken).trim()); + if (payload.botToken != null && String(payload.botToken).trim() !== "") { + sbDoc.setIn(["General", "Token"], String(payload.botToken).trim()); + } + + if (payload.dbDriver != null) { + const driver = String(payload.dbDriver).toLowerCase() === "mysql" ? "mysql" : "sqlite"; + sbDoc.setIn(["Database", "Driver"], driver); + if (driver === "mysql") { + sbDoc.setIn(["Database", "MySQL", "Host"], String(payload.dbHost || "127.0.0.1").trim()); + sbDoc.setIn(["Database", "MySQL", "Port"], Number(payload.dbPort) || 3306); + sbDoc.setIn(["Database", "MySQL", "User"], String(payload.dbUser || "").trim()); + sbDoc.setIn(["Database", "MySQL", "Password"], String(payload.dbPassword || "")); + sbDoc.setIn(["Database", "MySQL", "Database"], String(payload.dbDatabase || "").trim()); + } else { + sbDoc.setIn(["Database", "SQLite", "File"], "./Data/supportbot.db"); + } + } + fs.writeFileSync(SUPPORTBOT_FILE, sbDoc.toString()); configStore.reloadFile("api"); diff --git a/Structures/DashboardUserStore.js b/Structures/DashboardUserStore.js index dba2f35..2a4c9ef 100644 --- a/Structures/DashboardUserStore.js +++ b/Structures/DashboardUserStore.js @@ -160,12 +160,24 @@ function formatPublicUser(entry, access, discordProfile) { }; } -function listUsers(oauth) { +function listUsers(oauth, discordClient) { bootstrapFromOAuth(oauth); const store = readStore(); const yamlOwners = getOwnerIds(oauth); - return Object.values(store.users).map((entry) => { + let updated = false; + + const usersList = Object.values(store.users).map((entry) => { + if (discordClient?.users?.cache) { + const cached = discordClient.users.cache.get(String(entry.id)); + if (cached && (!entry.username || !entry.avatar)) { + entry.username = cached.username || entry.username; + entry.globalName = cached.globalName || cached.username || entry.globalName; + entry.avatar = cached.avatar || entry.avatar; + updated = true; + } + } + const access = resolvePermissions(entry, oauth, entry.id) || { permissions: permissionsFromRole("viewer"), role: entry.role, @@ -174,8 +186,8 @@ function listUsers(oauth) { return { id: entry.id, - username: entry.username, - globalName: entry.globalName, + username: entry.username || (yamlOwners.has(String(entry.id)) ? "Owner" : "User"), + globalName: entry.globalName || entry.username || null, avatar: entry.avatar ? discordAvatarUrl({ id: entry.id, avatar: entry.avatar }) : discordAvatarUrl({ id: entry.id, avatar: null }), @@ -192,6 +204,12 @@ function listUsers(oauth) { updatedAt: entry.updatedAt, }; }); + + if (updated) { + writeStore(store); + } + + return usersList; } function addUser(payload, actorId, oauth) { diff --git a/Structures/Database.js b/Structures/Database.js index d7b190e..381f970 100644 --- a/Structures/Database.js +++ b/Structures/Database.js @@ -1,40 +1,641 @@ -// SupportBot | JSON fallback adapter for environments without native addons (Pterodactyl) +// SupportBot | Unified SQL Database Adapter (MySQL/MariaDB & SQLite) const fs = require("fs"); const path = require("path"); +const yaml = require("js-yaml"); -const DB_PATH = path.join(__dirname, "../Data/supportbot.json"); +const CONFIG_PATH = path.join(__dirname, "../Configs/supportbot.yml"); +const LEGACY_JSON_PATH = path.join(__dirname, "../Data/supportbot.json"); +const SQLITE_DB_PATH = path.join(__dirname, "../Data/supportbot.db"); -function load() { - try { - const raw = fs.readFileSync(DB_PATH, "utf8"); - return JSON.parse(raw); - } catch (e) { - return { - suggestions: {}, - profiles: {}, - tickets: {}, - ticket_panel: [], - ticket_users: {}, - settings: {}, +// Load config +let dbConfig = { Driver: "sqlite", MySQL: {}, SQLite: { File: "./Data/supportbot.db" } }; +try { + if (fs.existsSync(CONFIG_PATH)) { + const rawYaml = fs.readFileSync(CONFIG_PATH, "utf8"); + const parsed = yaml.load(rawYaml); + if (parsed && parsed.Database) { + dbConfig = parsed.Database; + } + } +} catch (e) { + console.warn("[Database] Warning: Failed to parse Database section in supportbot.yml, defaulting to SQLite."); +} + +const driver = String(dbConfig.Driver || "sqlite").toLowerCase(); +const isMySQL = driver === "mysql" || driver === "mariadb"; + +let sqliteDb = null; +let mysqlPool = null; +let mysqlReady = false; +const mysqlWriteQueue = []; + +// In-memory state cache for synchronous, high-performance reads +const state = { + tickets: {}, + ticket_panel: [], + ticket_users: {}, + profiles: {}, + settings: {}, + blacklisted_users: {}, +}; + +// ---------------------------------------------------- +// Database Initialization +// ---------------------------------------------------- +function initDatabase() { + if (isMySQL) { + initMySQL(); + } else { + initSQLite(); + } + migrateLegacyJSON(); +} + +function initSQLite() { + const Database = require("better-sqlite3"); + const dbDir = path.dirname(SQLITE_DB_PATH); + if (!fs.existsSync(dbDir)) { + fs.mkdirSync(dbDir, { recursive: true }); + } + + sqliteDb = new Database(SQLITE_DB_PATH); + sqliteDb.pragma("journal_mode = WAL"); + + sqliteDb.exec(` + CREATE TABLE IF NOT EXISTS tickets ( + ticket_id TEXT PRIMARY KEY, + user_id TEXT, + subject TEXT, + description TEXT, + department TEXT, + priority TEXT, + status TEXT, + ai_mode_enabled INTEGER DEFAULT 0, + ai_channel_id TEXT, + ai_type TEXT, + ai_enabled_by TEXT, + ai_enabled_at INTEGER, + question_answers TEXT, + ticket_name TEXT, + ticket_number TEXT, + voice_channel_id TEXT, + created_at INTEGER, + updated_at INTEGER + ); + + CREATE TABLE IF NOT EXISTS ticket_panels ( + id INTEGER PRIMARY KEY, + message_id TEXT, + channel_id TEXT, + created_at INTEGER + ); + + CREATE TABLE IF NOT EXISTS ticket_users ( + ticket_id TEXT, + user_id TEXT, + PRIMARY KEY (ticket_id, user_id) + ); + + CREATE TABLE IF NOT EXISTS profiles ( + user_id TEXT PRIMARY KEY, + bio TEXT DEFAULT '', + timezone TEXT DEFAULT '', + clocked_in INTEGER DEFAULT 0 + ); + + CREATE TABLE IF NOT EXISTS settings ( + setting_key TEXT PRIMARY KEY, + setting_value TEXT + ); + + CREATE TABLE IF NOT EXISTS blacklisted_users ( + user_id TEXT PRIMARY KEY, + reason TEXT, + added_by TEXT, + created_at INTEGER + ); + `); + + loadSQLiteState(); + const clr = { reset: "\x1b[0m", gray: "\x1b[90m", green: "\x1b[32m", white: "\x1b[37m" }; + console.log(`${clr.green}✓${clr.reset} ${clr.white}Database Connected${clr.reset} ${clr.gray}to SQLite (${SQLITE_DB_PATH})${clr.reset}`); +} + +function loadSQLiteState() { + const tickets = sqliteDb.prepare("SELECT * FROM tickets").all(); + for (const r of tickets) { + state.tickets[r.ticket_id] = { + ticket_id: r.ticket_id, + user_id: r.user_id, + subject: r.subject || "", + description: r.description || "", + department: r.department || "general", + priority: r.priority || "medium", + status: r.status || "open", + aiModeEnabled: r.ai_mode_enabled, + aiChannelId: r.ai_channel_id, + aiType: r.ai_type, + aiEnabledBy: r.ai_enabled_by, + aiEnabledAt: r.ai_enabled_at, + questionAnswers: r.question_answers || "[]", + ticketName: r.ticket_name, + ticketNumber: r.ticket_number, + voiceChannelId: r.voice_channel_id, + created_at: r.created_at, + updated_at: r.updated_at, + }; + } + + const panels = sqliteDb.prepare("SELECT * FROM ticket_panels ORDER BY id ASC").all(); + state.ticket_panel = panels.map((p) => ({ + id: p.id, + message_id: p.message_id, + channel_id: p.channel_id, + created_at: p.created_at, + })); + + const ticketUsers = sqliteDb.prepare("SELECT * FROM ticket_users").all(); + for (const tu of ticketUsers) { + state.ticket_users[tu.ticket_id] = state.ticket_users[tu.ticket_id] || []; + if (!state.ticket_users[tu.ticket_id].includes(tu.user_id)) { + state.ticket_users[tu.ticket_id].push(tu.user_id); + } + } + + const profiles = sqliteDb.prepare("SELECT * FROM profiles").all(); + for (const p of profiles) { + state.profiles[p.user_id] = { + user_id: p.user_id, + bio: p.bio || "", + timezone: p.timezone || "", + clockedIn: p.clocked_in, + }; + } + + const settings = sqliteDb.prepare("SELECT * FROM settings").all(); + for (const s of settings) { + try { + state.settings[s.setting_key] = JSON.parse(s.setting_value); + } catch { + state.settings[s.setting_key] = s.setting_value; + } + } + + const blacklisted = sqliteDb.prepare("SELECT * FROM blacklisted_users").all(); + for (const b of blacklisted) { + state.blacklisted_users[b.user_id] = { + user_id: b.user_id, + reason: b.reason || "", + added_by: b.added_by || "", + created_at: b.created_at, }; } } -function save(state) { +function initMySQL() { + const mysql = require("mysql2"); + const mysqlOpts = dbConfig.MySQL || {}; + + mysqlPool = mysql.createPool({ + host: mysqlOpts.Host || "127.0.0.1", + port: mysqlOpts.Port || 3306, + user: mysqlOpts.User || "supportbot", + password: mysqlOpts.Password || "", + database: mysqlOpts.Database || "supportbot", + connectionLimit: mysqlOpts.ConnectionLimit || 10, + waitForConnections: true, + }); + + const poolPromise = mysqlPool.promise(); + + (async () => { + try { + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS tickets ( + ticket_id VARCHAR(255) PRIMARY KEY, + user_id VARCHAR(255), + subject TEXT, + description TEXT, + department VARCHAR(255), + priority VARCHAR(255), + status VARCHAR(255), + ai_mode_enabled INT DEFAULT 0, + ai_channel_id VARCHAR(255), + ai_type VARCHAR(255), + ai_enabled_by VARCHAR(255), + ai_enabled_at BIGINT, + question_answers TEXT, + ticket_name VARCHAR(255), + ticket_number VARCHAR(255), + voice_channel_id VARCHAR(255), + created_at BIGINT, + updated_at BIGINT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS ticket_panels ( + id BIGINT PRIMARY KEY, + message_id VARCHAR(255), + channel_id VARCHAR(255), + created_at BIGINT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS ticket_users ( + ticket_id VARCHAR(255), + user_id VARCHAR(255), + PRIMARY KEY (ticket_id, user_id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS profiles ( + user_id VARCHAR(255) PRIMARY KEY, + bio TEXT, + timezone VARCHAR(255), + clocked_in INT DEFAULT 0 + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS settings ( + setting_key VARCHAR(255) PRIMARY KEY, + setting_value LONGTEXT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS blacklisted_users ( + user_id VARCHAR(255) PRIMARY KEY, + reason TEXT, + added_by VARCHAR(255), + created_at BIGINT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + // Load initial state from MySQL + const [tickets] = await poolPromise.query("SELECT * FROM tickets"); + for (const r of tickets) { + state.tickets[r.ticket_id] = { + ticket_id: r.ticket_id, + user_id: r.user_id, + subject: r.subject || "", + description: r.description || "", + department: r.department || "general", + priority: r.priority || "medium", + status: r.status || "open", + aiModeEnabled: r.ai_mode_enabled, + aiChannelId: r.ai_channel_id, + aiType: r.ai_type, + aiEnabledBy: r.ai_enabled_by, + aiEnabledAt: r.ai_enabled_at, + questionAnswers: r.question_answers || "[]", + ticketName: r.ticket_name, + ticketNumber: r.ticket_number, + voiceChannelId: r.voice_channel_id, + created_at: Number(r.created_at), + updated_at: Number(r.updated_at), + }; + } + + const [panels] = await poolPromise.query("SELECT * FROM ticket_panels ORDER BY id ASC"); + state.ticket_panel = panels.map((p) => ({ + id: Number(p.id), + message_id: p.message_id, + channel_id: p.channel_id, + created_at: Number(p.created_at), + })); + + const [ticketUsers] = await poolPromise.query("SELECT * FROM ticket_users"); + for (const tu of ticketUsers) { + state.ticket_users[tu.ticket_id] = state.ticket_users[tu.ticket_id] || []; + if (!state.ticket_users[tu.ticket_id].includes(tu.user_id)) { + state.ticket_users[tu.ticket_id].push(tu.user_id); + } + } + + const [profiles] = await poolPromise.query("SELECT * FROM profiles"); + for (const p of profiles) { + state.profiles[p.user_id] = { + user_id: p.user_id, + bio: p.bio || "", + timezone: p.timezone || "", + clockedIn: p.clocked_in, + }; + } + + const [settings] = await poolPromise.query("SELECT * FROM settings"); + for (const s of settings) { + try { + state.settings[s.setting_key] = JSON.parse(s.setting_value); + } catch { + state.settings[s.setting_key] = s.setting_value; + } + } + + const [blacklisted] = await poolPromise.query("SELECT * FROM blacklisted_users"); + for (const b of blacklisted) { + state.blacklisted_users[b.user_id] = { + user_id: b.user_id, + reason: b.reason || "", + added_by: b.added_by || "", + created_at: Number(b.created_at), + }; + } + + mysqlReady = true; + const clr = { reset: "\x1b[0m", gray: "\x1b[90m", green: "\x1b[32m", white: "\x1b[37m" }; + console.log(`${clr.green}✓${clr.reset} ${clr.white}Database Connected${clr.reset} ${clr.gray}to MySQL (${mysqlOpts.Host}:${mysqlOpts.Port}/${mysqlOpts.Database})${clr.reset}`); + + while (mysqlWriteQueue.length > 0) { + const fn = mysqlWriteQueue.shift(); + try { fn(); } catch (e) {} + } + } catch (err) { + console.error("[Database] Error initializing MySQL tables or state:", err.message); + } + })(); +} + +// ---------------------------------------------------- +// Legacy JSON Migration Utility +// ---------------------------------------------------- +function migrateLegacyJSON() { + if (!fs.existsSync(LEGACY_JSON_PATH)) return; + try { - fs.mkdirSync(path.dirname(DB_PATH), { recursive: true }); - fs.writeFileSync(DB_PATH, JSON.stringify(state, null, 2), "utf8"); + const raw = fs.readFileSync(LEGACY_JSON_PATH, "utf8"); + const jsonState = JSON.parse(raw); + console.log("[Database] Legacy supportbot.json detected. Migrating records to SQL..."); + + if (jsonState.tickets) { + for (const tId of Object.keys(jsonState.tickets)) { + const t = jsonState.tickets[tId]; + if (t && !state.tickets[tId]) { + const ticketObj = { + id: t.ticket_id || tId, + user: t.user_id, + reason: t.subject, + description: t.description, + department: t.department, + priority: t.priority, + aiModeEnabled: t.aiModeEnabled, + aiChannelId: t.aiChannelId, + aiType: t.aiType, + aiEnabledBy: t.aiEnabledBy, + aiEnabledAt: t.aiEnabledAt, + questionAnswers: typeof t.questionAnswers === "string" ? JSON.parse(t.questionAnswers) : t.questionAnswers || [], + name: t.ticketName, + number: t.ticketNumber, + }; + exportsModule.addTicket(ticketObj); + } + } + } + + if (jsonState.ticket_panel && Array.isArray(jsonState.ticket_panel)) { + for (const p of jsonState.ticket_panel) { + exportsModule.saveTicketPanel(p.message_id, p.channel_id); + } + } + + if (jsonState.profiles) { + for (const uId of Object.keys(jsonState.profiles)) { + const prof = jsonState.profiles[uId]; + if (prof) { + state.profiles[uId] = prof; + persistProfile(uId); + } + } + } + + if (jsonState.settings) { + exportsModule.saveSettings(jsonState.settings); + } + + // Archive legacy json file + const backupPath = LEGACY_JSON_PATH + ".bak"; + fs.renameSync(LEGACY_JSON_PATH, backupPath); + console.log(`[Database] Legacy supportbot.json successfully migrated and archived to ${backupPath}`); } catch (e) { - console.error("Failed to persist database:", e); + console.error("[Database] Failed to migrate legacy supportbot.json:", e); + } + + // Migrate legacy BlacklistedUsers.json if present + const legacyBlacklistPath = path.join(__dirname, "../Data/BlacklistedUsers.json"); + if (fs.existsSync(legacyBlacklistPath)) { + try { + const raw = fs.readFileSync(legacyBlacklistPath, "utf8"); + const data = JSON.parse(raw); + if (data && Array.isArray(data.blacklistedUsers)) { + for (const uId of data.blacklistedUsers) { + exportsModule.addBlacklistedUser(uId, "Migrated from BlacklistedUsers.json", "System"); + } + } + fs.renameSync(legacyBlacklistPath, legacyBlacklistPath + ".bak"); + console.log(`[Database] Legacy BlacklistedUsers.json successfully migrated and archived.`); + } catch (e) { + console.error("[Database] Failed to migrate BlacklistedUsers.json:", e); + } } } -const state = load(); +// ---------------------------------------------------- +// SQL Persistence Helpers +// ---------------------------------------------------- +function persistTicket(ticketId) { + const t = state.tickets[ticketId]; + if (!t) return; + + if (isMySQL && mysqlPool) { + const sql = ` + INSERT INTO tickets ( + ticket_id, user_id, subject, description, department, priority, status, + ai_mode_enabled, ai_channel_id, ai_type, ai_enabled_by, ai_enabled_at, + question_answers, ticket_name, ticket_number, voice_channel_id, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + user_id=VALUES(user_id), subject=VALUES(subject), description=VALUES(description), + department=VALUES(department), priority=VALUES(priority), status=VALUES(status), + ai_mode_enabled=VALUES(ai_mode_enabled), ai_channel_id=VALUES(ai_channel_id), + ai_type=VALUES(ai_type), ai_enabled_by=VALUES(ai_enabled_by), ai_enabled_at=VALUES(ai_enabled_at), + question_answers=VALUES(question_answers), ticket_name=VALUES(ticket_name), + ticket_number=VALUES(ticket_number), voice_channel_id=VALUES(voice_channel_id), updated_at=VALUES(updated_at); + `; + const params = [ + t.ticket_id, + t.user_id || "", + t.subject || "", + t.description || "", + t.department || "general", + t.priority || "medium", + t.status || "open", + t.aiModeEnabled ? 1 : 0, + t.aiChannelId || null, + t.aiType || null, + t.aiEnabledBy || null, + t.aiEnabledAt || null, + typeof t.questionAnswers === "string" ? t.questionAnswers : JSON.stringify(t.questionAnswers || []), + t.ticketName || null, + t.ticketNumber || null, + t.voiceChannelId || null, + t.created_at || Date.now(), + t.updated_at || Date.now(), + ]; + mysqlPool.query(sql, params, (err) => { + if (err) console.error("[Database] MySQL persistTicket error:", err.message); + }); + } else if (sqliteDb) { + const stmt = sqliteDb.prepare(` + INSERT INTO tickets ( + ticket_id, user_id, subject, description, department, priority, status, + ai_mode_enabled, ai_channel_id, ai_type, ai_enabled_by, ai_enabled_at, + question_answers, ticket_name, ticket_number, voice_channel_id, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(ticket_id) DO UPDATE SET + user_id=excluded.user_id, subject=excluded.subject, description=excluded.description, + department=excluded.department, priority=excluded.priority, status=excluded.status, + ai_mode_enabled=excluded.ai_mode_enabled, ai_channel_id=excluded.ai_channel_id, + ai_type=excluded.ai_type, ai_enabled_by=excluded.ai_enabled_by, ai_enabled_at=excluded.ai_enabled_at, + question_answers=excluded.question_answers, ticket_name=excluded.ticket_name, + ticket_number=excluded.ticket_number, voice_channel_id=excluded.voice_channel_id, updated_at=excluded.updated_at; + `); + stmt.run( + t.ticket_id, + t.user_id || "", + t.subject || "", + t.description || "", + t.department || "general", + t.priority || "medium", + t.status || "open", + t.aiModeEnabled ? 1 : 0, + t.aiChannelId || null, + t.aiType || null, + t.aiEnabledBy || null, + t.aiEnabledAt || null, + typeof t.questionAnswers === "string" ? t.questionAnswers : JSON.stringify(t.questionAnswers || []), + t.ticketName || null, + t.ticketNumber || null, + t.voiceChannelId || null, + t.created_at || Date.now(), + t.updated_at || Date.now() + ); + } +} + +function persistPanel(panelRow) { + if (isMySQL && mysqlPool) { + mysqlPool.query( + "INSERT INTO ticket_panels (id, message_id, channel_id, created_at) VALUES (?, ?, ?, ?)", + [panelRow.id, panelRow.message_id, panelRow.channel_id, panelRow.created_at], + (err) => { + if (err) console.error("[Database] MySQL persistPanel error:", err.message); + } + ); + } else if (sqliteDb) { + const stmt = sqliteDb.prepare("INSERT INTO ticket_panels (id, message_id, channel_id, created_at) VALUES (?, ?, ?, ?)"); + stmt.run(panelRow.id, panelRow.message_id, panelRow.channel_id, panelRow.created_at); + } +} + +function persistTicketUser(ticketId, userId, action = "add") { + if (action === "add") { + if (isMySQL && mysqlPool) { + mysqlPool.query("INSERT IGNORE INTO ticket_users (ticket_id, user_id) VALUES (?, ?)", [ticketId, userId], (err) => { + if (err) console.error("[Database] MySQL persistTicketUser error:", err.message); + }); + } else if (sqliteDb) { + sqliteDb.prepare("INSERT OR IGNORE INTO ticket_users (ticket_id, user_id) VALUES (?, ?)").run(ticketId, userId); + } + } else { + if (isMySQL && mysqlPool) { + mysqlPool.query("DELETE FROM ticket_users WHERE ticket_id = ? AND user_id = ?", [ticketId, userId], (err) => { + if (err) console.error("[Database] MySQL deleteTicketUser error:", err.message); + }); + } else if (sqliteDb) { + sqliteDb.prepare("DELETE FROM ticket_users WHERE ticket_id = ? AND user_id = ?").run(ticketId, userId); + } + } +} + +function persistProfile(userId) { + const p = state.profiles[userId]; + if (!p) return; + + if (isMySQL && mysqlPool) { + const sql = ` + INSERT INTO profiles (user_id, bio, timezone, clocked_in) VALUES (?, ?, ?, ?) + ON DUPLICATE KEY UPDATE bio=VALUES(bio), timezone=VALUES(timezone), clocked_in=VALUES(clocked_in); + `; + mysqlPool.query(sql, [p.user_id, p.bio || "", p.timezone || "", p.clockedIn ? 1 : 0], (err) => { + if (err) console.error("[Database] MySQL persistProfile error:", err.message); + }); + } else if (sqliteDb) { + const stmt = sqliteDb.prepare(` + INSERT INTO profiles (user_id, bio, timezone, clocked_in) VALUES (?, ?, ?, ?) + ON CONFLICT(user_id) DO UPDATE SET bio=excluded.bio, timezone=excluded.timezone, clocked_in=excluded.clocked_in; + `); + stmt.run(p.user_id, p.bio || "", p.timezone || "", p.clockedIn ? 1 : 0); + } +} + +function persistSettings() { + const settingsObj = state.settings || {}; + for (const k of Object.keys(settingsObj)) { + const val = JSON.stringify(settingsObj[k]); + if (isMySQL && mysqlPool) { + mysqlPool.query( + "INSERT INTO settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)", + [k, val], + (err) => { + if (err) console.error("[Database] MySQL persistSettings error:", err.message); + } + ); + } else if (sqliteDb) { + sqliteDb.prepare("INSERT INTO settings (setting_key, setting_value) VALUES (?, ?) ON CONFLICT(setting_key) DO UPDATE SET setting_value=excluded.setting_value").run(k, val); + } + } +} + +function persistBlacklistedUser(userId, action = "add") { + if (isMySQL && !mysqlReady) { + mysqlWriteQueue.push(() => persistBlacklistedUser(userId, action)); + return; + } + const b = state.blacklisted_users[userId]; + if (action === "add" && b) { + if (isMySQL && mysqlPool) { + const sql = ` + INSERT INTO blacklisted_users (user_id, reason, added_by, created_at) VALUES (?, ?, ?, ?) + ON DUPLICATE KEY UPDATE reason=VALUES(reason), added_by=VALUES(added_by), created_at=VALUES(created_at); + `; + mysqlPool.query(sql, [b.user_id, b.reason || "", b.added_by || "", b.created_at || Date.now()], (err) => { + if (err) console.error("[Database] MySQL persistBlacklistedUser error:", err.message); + }); + } else if (sqliteDb) { + const stmt = sqliteDb.prepare(` + INSERT INTO blacklisted_users (user_id, reason, added_by, created_at) VALUES (?, ?, ?, ?) + ON CONFLICT(user_id) DO UPDATE SET reason=excluded.reason, added_by=excluded.added_by, created_at=excluded.created_at; + `); + stmt.run(b.user_id, b.reason || "", b.added_by || "", b.created_at || Date.now()); + } + } else { + if (isMySQL && mysqlPool) { + mysqlPool.query("DELETE FROM blacklisted_users WHERE user_id = ?", [userId], (err) => { + if (err) console.error("[Database] MySQL removeBlacklistedUser error:", err.message); + }); + } else if (sqliteDb) { + sqliteDb.prepare("DELETE FROM blacklisted_users WHERE user_id = ?").run(userId); + } + } +} function ensureProfile(userId) { if (!state.profiles[userId]) { state.profiles[userId] = { user_id: userId, bio: "", timezone: "", clockedIn: 0 }; - save(state); + persistProfile(userId); } } @@ -43,7 +644,7 @@ function normaliseTicketRow(row) { let questionAnswers = []; if (row.questionAnswers) { try { - questionAnswers = JSON.parse(row.questionAnswers); + questionAnswers = typeof row.questionAnswers === "string" ? JSON.parse(row.questionAnswers) : row.questionAnswers; } catch { questionAnswers = []; } @@ -57,7 +658,7 @@ function normaliseTicketRow(row) { }; } -module.exports = { +const exportsModule = { addTicket(ticket) { const now = Date.now(); const id = ticket.id; @@ -84,7 +685,7 @@ module.exports = { status: existing.status || "open", }; - save(state); + persistTicket(id); if (global.apiServer) { global.apiServer.broadcast("ticket_created", { @@ -104,7 +705,7 @@ module.exports = { if (!t) return; t.questionAnswers = JSON.stringify(questionAnswers); t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, updateTicketVoice(ticketId, voiceChannelId) { @@ -112,7 +713,7 @@ module.exports = { if (!t) return; t.voiceChannelId = voiceChannelId; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, updateTicketStatus(ticketId, status) { @@ -120,7 +721,7 @@ module.exports = { if (!t) return; t.status = status; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); if (global.apiServer && status === "closed") { global.apiServer.broadcast("ticket_closed", { ticket_id: ticketId }); @@ -132,7 +733,7 @@ module.exports = { if (!t) return; t.department = department; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, updateTicketPriority(ticketId, priority) { @@ -140,7 +741,7 @@ module.exports = { if (!t) return; t.priority = priority; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, setTicketAIState(ticketId, aiState = {}) { @@ -152,7 +753,7 @@ module.exports = { t.aiEnabledBy = aiState.enabledBy || null; t.aiEnabledAt = aiState.enabledAt ? new Date(aiState.enabledAt).getTime() : aiState.enabled ? Date.now() : null; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, enableTicketAI(ticketId, aiChannelId = null, aiType = null, enabledBy = null) { @@ -164,7 +765,7 @@ module.exports = { t.aiEnabledBy = enabledBy; t.aiEnabledAt = Date.now(); t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, disableTicketAI(ticketId) { @@ -172,7 +773,7 @@ module.exports = { if (!t) return; t.aiModeEnabled = 0; t.updated_at = Date.now(); - save(state); + persistTicket(ticketId); }, getTicket(ticketId) { @@ -193,8 +794,9 @@ module.exports = { }, saveTicketPanel(messageId, channelId) { - state.ticket_panel.push({ id: Date.now(), message_id: messageId, channel_id: channelId, created_at: Date.now() }); - save(state); + const row = { id: Date.now(), message_id: messageId, channel_id: channelId, created_at: Date.now() }; + state.ticket_panel.push(row); + persistPanel(row); }, getTicketPanel() { @@ -204,19 +806,18 @@ module.exports = { }, addUserToTicket(ticketId, userId) { - state.ticket_users[ticketId] = state.ticket_users[ticketId] || new Set(); - // Sets cannot be serialized directly; store as array - const arr = new Set(state.ticket_users[ticketId]); - arr.add(userId); - state.ticket_users[ticketId] = Array.from(arr); - save(state); + state.ticket_users[ticketId] = state.ticket_users[ticketId] || []; + if (!state.ticket_users[ticketId].includes(userId)) { + state.ticket_users[ticketId].push(userId); + persistTicketUser(ticketId, userId, "add"); + } }, removeUserFromTicket(ticketId, userId) { - const arr = new Set(state.ticket_users[ticketId] || []); - arr.delete(userId); - state.ticket_users[ticketId] = Array.from(arr); - save(state); + if (state.ticket_users[ticketId]) { + state.ticket_users[ticketId] = state.ticket_users[ticketId].filter((u) => u !== userId); + persistTicketUser(ticketId, userId, "remove"); + } }, getTicketUsers(ticketId) { @@ -237,11 +838,64 @@ module.exports = { setClockedIn(userId, clockedIn) { ensureProfile(userId); state.profiles[userId].clockedIn = clockedIn ? 1 : 0; - save(state); + persistProfile(userId); }, saveSettings(obj) { state.settings = obj || {}; - save(state); + persistSettings(); + }, + + addBlacklistedUser(userId, reason = "", addedBy = "") { + state.blacklisted_users[userId] = { + user_id: userId, + reason, + added_by: addedBy, + created_at: Date.now(), + }; + persistBlacklistedUser(userId, "add"); + }, + + removeBlacklistedUser(userId) { + if (state.blacklisted_users[userId]) { + delete state.blacklisted_users[userId]; + persistBlacklistedUser(userId, "remove"); + } + }, + + isUserBlacklisted(userId) { + return Boolean(state.blacklisted_users[userId]); + }, + + getBlacklistedUsers() { + return Object.keys(state.blacklisted_users); + }, + + getBlacklistedUserDetails() { + return Object.values(state.blacklisted_users); + }, + + getDatabaseInfo() { + if (isMySQL) { + const mysqlOpts = dbConfig.MySQL || {}; + return { + driver: "MySQL", + host: mysqlOpts.Host || "127.0.0.1", + port: mysqlOpts.Port || 3306, + database: mysqlOpts.Database || "supportbot", + type: "mysql" + }; + } + const sqliteOpts = dbConfig.SQLite || {}; + return { + driver: "SQLite", + file: sqliteOpts.File || "./Data/supportbot.db", + type: "sqlite" + }; }, }; + +// Initialize database on require +initDatabase(); + +module.exports = exportsModule; diff --git a/Structures/GuildManager.js b/Structures/GuildManager.js index 537117b..3298ce3 100644 --- a/Structures/GuildManager.js +++ b/Structures/GuildManager.js @@ -180,6 +180,7 @@ function buildResourcesFromGuild(guild) { return { guildId: guild.id, guildName: guild.name, + guildIcon: guild.iconURL({ extension: "png", size: 64 }) || null, roles, channels, categories, diff --git a/Structures/TicketID.js b/Structures/TicketID.js index 7fb941e..d7e25a0 100644 --- a/Structures/TicketID.js +++ b/Structures/TicketID.js @@ -1,30 +1,46 @@ // SupportBot | Emerald Services // Ticket ID Structure -const db = require("./Database") +const db = require("./Database"); class TicketNumberID { static async pad() { - let num = await this.get() - let n = num + "" - await this.set(num + 1) - return n.length >= 4 ? n : new Array(4 - n.length + 1).join("0") + n + let num = await this.get(); + let n = num + ""; + await this.set(num + 1); + return n.length >= 4 ? n : new Array(4 - n.length + 1).join("0") + n; } static async get() { - const row = db.getTicketPanel() - if (!row) return await this.set(0) - return row.id + const settings = db.getSettings ? db.getSettings() : {}; + if (typeof settings.ticket_counter === "number") { + return settings.ticket_counter; + } + + const row = db.getTicketPanel ? db.getTicketPanel() : null; + if (row && typeof row.message_id === "string" && row.message_id.startsWith("panel-")) { + const parsed = parseInt(row.message_id.replace("panel-", ""), 10); + if (!isNaN(parsed)) return parsed; + } + + if (row && typeof row.id === "number" && row.id < 1000000) { + return row.id; + } + + return 0; } static async set(value) { - db.saveTicketPanel(`panel-${value}`, "none") - return value + const settings = db.getSettings ? db.getSettings() : {}; + settings.ticket_counter = value; + if (db.saveSettings) db.saveSettings(settings); + if (db.saveTicketPanel) db.saveTicketPanel(`panel-${value}`, "none"); + return value; } static async reset() { - return await this.set(0) + return await this.set(0); } } -module.exports = TicketNumberID +module.exports = TicketNumberID; diff --git a/index.js b/index.js index c03fb79..39529f4 100644 --- a/index.js +++ b/index.js @@ -20,27 +20,30 @@ const client = new Client({ intents: ["Guilds", "GuildMembers", "GuildMessages", "MessageContent"], }); +const { isSetupComplete } = require("./Structures/DashboardSetup.js"); const APIServer = require("./API/server.js"); -// Start dashboard API immediately — do not wait for Discord clientReady const api = new APIServer(client); client.apiServer = api; +const port = api.config?.Port || 25575; if (api.config?.Enabled) { - const port = api.config.Port || 3000; api.start(port); - console.log( - `[Dashboard] API listening on http://localhost:${port} (bot may still be connecting)`, - ); + if (!isSetupComplete()) { + console.log(`\n\x1b[33m\x1b[1m[Setup Required] Go to http://localhost:${port}/setup to set up your bot and dashboard.\x1b[0m\n`); + } } else { console.warn("[Dashboard] API disabled in Configs/api.yml"); } -client.start(configStore.supportbot.General.Token); +const token = configStore.supportbot?.General?.Token; +const isPlaceholderToken = !token || token.includes("BOT_TOKEN") || token.includes("CHANGE_ME") || token.length < 30; -client.on("clientReady", () => { - console.log("[Dashboard] Discord bot is ready — full stats and guild tools are available"); -}); +if (isPlaceholderToken) { + console.warn(`\x1b[33m[SupportBot] Bot token is not configured yet. Complete setup at http://localhost:${port}/setup\x1b[0m`); +} else { + client.start(token); +} // SupportBot - New Logging System diff --git a/package.json b/package.json index 9df8d29..5a9f1ce 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "js-yaml": "^4.1.0", "moment": "^2.29.3", "ms": "^2.1.3", + "mysql2": "^3.23.3", "openai": "^4.50.0", "systeminformation": "^5.31.5", "yaml": "^2.8.3" diff --git a/public/dashboard/assets/index-BpDEEtaJ.js b/public/dashboard/assets/index-BpDEEtaJ.js deleted file mode 100644 index 05bdc74..0000000 --- a/public/dashboard/assets/index-BpDEEtaJ.js +++ /dev/null @@ -1,206 +0,0 @@ -var h3=Object.defineProperty;var g3=(e,n,a)=>n in e?h3(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var $b=(e,n,a)=>g3(e,typeof n!="symbol"?n+"":n,a);function x3(e,n){for(var a=0;ao[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const c of l)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(l){const c={};return l.integrity&&(c.integrity=l.integrity),l.referrerPolicy&&(c.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?c.credentials="include":l.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(l){if(l.ep)return;l.ep=!0;const c=a(l);fetch(l.href,c)}})();function A0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Jm={exports:{}},Fi={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bb;function v3(){if(Bb)return Fi;Bb=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,l,c){var d=null;if(c!==void 0&&(d=""+c),l.key!==void 0&&(d=""+l.key),"key"in l){c={};for(var m in l)m!=="key"&&(c[m]=l[m])}else c=l;return l=c.ref,{$$typeof:e,type:o,key:d,ref:l!==void 0?l:null,props:c}}return Fi.Fragment=n,Fi.jsx=a,Fi.jsxs=a,Fi}var Ub;function b3(){return Ub||(Ub=1,Jm.exports=v3()),Jm.exports}var s=b3(),ep={exports:{}},Pe={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Hb;function y3(){if(Hb)return Pe;Hb=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function w(_){return _===null||typeof _!="object"?null:(_=y&&_[y]||_["@@iterator"],typeof _=="function"?_:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,E={};function N(_,D,G){this.props=_,this.context=D,this.refs=E,this.updater=G||j}N.prototype.isReactComponent={},N.prototype.setState=function(_,D){if(typeof _!="object"&&typeof _!="function"&&_!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,_,D,"setState")},N.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function k(){}k.prototype=N.prototype;function T(_,D,G){this.props=_,this.context=D,this.refs=E,this.updater=G||j}var A=T.prototype=new k;A.constructor=T,S(A,N.prototype),A.isPureReactComponent=!0;var O=Array.isArray;function M(){}var z={H:null,A:null,T:null,S:null},B=Object.prototype.hasOwnProperty;function K(_,D,G){var V=G.ref;return{$$typeof:e,type:_,key:D,ref:V!==void 0?V:null,props:G}}function U(_,D){return K(_.type,D,_.props)}function q(_){return typeof _=="object"&&_!==null&&_.$$typeof===e}function ue(_){var D={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(G){return D[G]})}var pe=/\/+/g;function xe(_,D){return typeof _=="object"&&_!==null&&_.key!=null?ue(""+_.key):D.toString(36)}function se(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(M,M):(_.status="pending",_.then(function(D){_.status==="pending"&&(_.status="fulfilled",_.value=D)},function(D){_.status==="pending"&&(_.status="rejected",_.reason=D)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function L(_,D,G,V,F){var oe=typeof _;(oe==="undefined"||oe==="boolean")&&(_=null);var ae=!1;if(_===null)ae=!0;else switch(oe){case"bigint":case"string":case"number":ae=!0;break;case"object":switch(_.$$typeof){case e:case n:ae=!0;break;case b:return ae=_._init,L(ae(_._payload),D,G,V,F)}}if(ae)return F=F(_),ae=V===""?"."+xe(_,0):V,O(F)?(G="",ae!=null&&(G=ae.replace(pe,"$&/")+"/"),L(F,D,G,"",function(Y){return Y})):F!=null&&(q(F)&&(F=U(F,G+(F.key==null||_&&_.key===F.key?"":(""+F.key).replace(pe,"$&/")+"/")+ae)),D.push(F)),1;ae=0;var be=V===""?".":V+":";if(O(_))for(var ve=0;ve<_.length;ve++)V=_[ve],oe=be+xe(V,ve),ae+=L(V,D,G,oe,F);else if(ve=w(_),typeof ve=="function")for(_=ve.call(_),ve=0;!(V=_.next()).done;)V=V.value,oe=be+xe(V,ve++),ae+=L(V,D,G,oe,F);else if(oe==="object"){if(typeof _.then=="function")return L(se(_),D,G,V,F);throw D=String(_),Error("Objects are not valid as a React child (found: "+(D==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":D)+"). If you meant to render a collection of children, use an array instead.")}return ae}function I(_,D,G){if(_==null)return _;var V=[],F=0;return L(_,V,"","",function(oe){return D.call(G,oe,F++)}),V}function H(_){if(_._status===-1){var D=_._result;D=D(),D.then(function(G){(_._status===0||_._status===-1)&&(_._status=1,_._result=G)},function(G){(_._status===0||_._status===-1)&&(_._status=2,_._result=G)}),_._status===-1&&(_._status=0,_._result=D)}if(_._status===1)return _._result.default;throw _._result}var Z=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var D=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(D))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},te={map:I,forEach:function(_,D,G){I(_,function(){D.apply(this,arguments)},G)},count:function(_){var D=0;return I(_,function(){D++}),D},toArray:function(_){return I(_,function(D){return D})||[]},only:function(_){if(!q(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return Pe.Activity=g,Pe.Children=te,Pe.Component=N,Pe.Fragment=a,Pe.Profiler=l,Pe.PureComponent=T,Pe.StrictMode=o,Pe.Suspense=p,Pe.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=z,Pe.__COMPILER_RUNTIME={__proto__:null,c:function(_){return z.H.useMemoCache(_)}},Pe.cache=function(_){return function(){return _.apply(null,arguments)}},Pe.cacheSignal=function(){return null},Pe.cloneElement=function(_,D,G){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var V=S({},_.props),F=_.key;if(D!=null)for(oe in D.key!==void 0&&(F=""+D.key),D)!B.call(D,oe)||oe==="key"||oe==="__self"||oe==="__source"||oe==="ref"&&D.ref===void 0||(V[oe]=D[oe]);var oe=arguments.length-2;if(oe===1)V.children=G;else if(1>>1,te=L[Z];if(0>>1;Z<_;){var D=2*(Z+1)-1,G=L[D],V=D+1,F=L[V];if(0>l(G,H))Vl(F,G)?(L[Z]=F,L[V]=H,Z=V):(L[Z]=G,L[D]=H,Z=D);else if(Vl(F,H))L[Z]=F,L[V]=H,Z=V;else break e}}return I}function l(L,I){var H=L.sortIndex-I.sortIndex;return H!==0?H:L.id-I.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;e.unstable_now=function(){return c.now()}}else{var d=Date,m=d.now();e.unstable_now=function(){return d.now()-m}}var p=[],h=[],b=1,g=null,y=3,w=!1,j=!1,S=!1,E=!1,N=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function A(L){for(var I=a(h);I!==null;){if(I.callback===null)o(h);else if(I.startTime<=L)o(h),I.sortIndex=I.expirationTime,n(p,I);else break;I=a(h)}}function O(L){if(S=!1,A(L),!j)if(a(p)!==null)j=!0,M||(M=!0,ue());else{var I=a(h);I!==null&&se(O,I.startTime-L)}}var M=!1,z=-1,B=5,K=-1;function U(){return E?!0:!(e.unstable_now()-KL&&U());){var Z=g.callback;if(typeof Z=="function"){g.callback=null,y=g.priorityLevel;var te=Z(g.expirationTime<=L);if(L=e.unstable_now(),typeof te=="function"){g.callback=te,A(L),I=!0;break t}g===a(p)&&o(p),A(L)}else o(p);g=a(p)}if(g!==null)I=!0;else{var _=a(h);_!==null&&se(O,_.startTime-L),I=!1}}break e}finally{g=null,y=H,w=!1}I=void 0}}finally{I?ue():M=!1}}}var ue;if(typeof T=="function")ue=function(){T(q)};else if(typeof MessageChannel<"u"){var pe=new MessageChannel,xe=pe.port2;pe.port1.onmessage=q,ue=function(){xe.postMessage(null)}}else ue=function(){N(q,0)};function se(L,I){z=N(function(){L(e.unstable_now())},I)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(L){L.callback=null},e.unstable_forceFrameRate=function(L){0>L||125Z?(L.sortIndex=H,n(h,L),a(p)===null&&L===a(h)&&(S?(k(z),z=-1):S=!0,se(O,H-Z))):(L.sortIndex=te,n(p,L),j||w||(j=!0,M||(M=!0,ue()))),L},e.unstable_shouldYield=U,e.unstable_wrapCallback=function(L){var I=y;return function(){var H=y;y=I;try{return L.apply(this,arguments)}finally{y=H}}}})(rp)),rp}var Fb;function C3(){return Fb||(Fb=1,np.exports=w3()),np.exports}var ap={exports:{}},ln={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Wb;function S3(){if(Wb)return ln;Wb=1;var e=Ku();function n(p){var h="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),ap.exports=S3(),ap.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var qb;function j3(){if(qb)return Wi;qb=1;var e=C3(),n=Ku(),a=M0();function o(t){var r="https://react.dev/errors/"+t;if(1te||(t.current=Z[te],Z[te]=null,te--)}function G(t,r){te++,Z[te]=t.current,t.current=r}var V=_(null),F=_(null),oe=_(null),ae=_(null);function be(t,r){switch(G(oe,r),G(F,t),G(V,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?lb(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=lb(r),t=cb(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}D(V),G(V,t)}function ve(){D(V),D(F),D(oe)}function Y(t){t.memoizedState!==null&&G(ae,t);var r=V.current,i=cb(r,t.type);r!==i&&(G(F,t),G(V,i))}function le(t){F.current===t&&(D(V),D(F)),ae.current===t&&(D(ae),Ui._currentValue=H)}var ye,Te;function Le(t){if(ye===void 0)try{throw Error()}catch(i){var r=i.stack.trim().match(/\n( *(at )?)/);ye=r&&r[1]||"",Te=-1)":-1x||P[u]!==Q[x]){var ie=` -`+P[u].replace(" at new "," at ");return t.displayName&&ie.includes("")&&(ie=ie.replace("",t.displayName)),ie}while(1<=u&&0<=x);break}}}finally{rt=!1,Error.prepareStackTrace=i}return(i=t?t.displayName||t.name:"")?Le(i):""}function Mt(t,r){switch(t.tag){case 26:case 27:case 5:return Le(t.type);case 16:return Le("Lazy");case 13:return t.child!==r&&r!==null?Le("Suspense Fallback"):Le("Suspense");case 19:return Le("SuspenseList");case 0:case 15:return ht(t.type,!1);case 11:return ht(t.type.render,!1);case 1:return ht(t.type,!0);case 31:return Le("Activity");default:return""}}function Tr(t){try{var r="",i=null;do r+=Mt(t,i),i=t,t=t.return;while(t);return r}catch(u){return` -Error generating stack: `+u.message+` -`+u.stack}}var _t=Object.prototype.hasOwnProperty,Ya=e.unstable_scheduleCallback,qa=e.unstable_cancelCallback,qt=e.unstable_shouldYield,dr=e.unstable_requestPaint,Kt=e.unstable_now,ti=e.unstable_getCurrentPriorityLevel,fr=e.unstable_ImmediatePriority,Lo=e.unstable_UserBlockingPriority,Rr=e.unstable_NormalPriority,Xt=e.unstable_LowPriority,Qn=e.unstable_IdlePriority,zo=e.log,mr=e.unstable_setDisableYieldValue,pr=null,Ht=null;function ee(t){if(typeof zo=="function"&&mr(t),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(pr,t)}catch{}}var re=Math.clz32?Math.clz32:De,ke=Math.log,we=Math.LN2;function De(t){return t>>>=0,t===0?32:31-(ke(t)/we|0)|0}var at=256,ct=262144,mt=4194304;function Zt(t){var r=t&42;if(r!==0)return r;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Me(t,r,i){var u=t.pendingLanes;if(u===0)return 0;var x=0,v=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var R=u&134217727;return R!==0?(u=R&~v,u!==0?x=Zt(u):(C&=R,C!==0?x=Zt(C):i||(i=R&~t,i!==0&&(x=Zt(i))))):(R=u&~v,R!==0?x=Zt(R):C!==0?x=Zt(C):i||(i=u&~t,i!==0&&(x=Zt(i)))),x===0?0:r!==0&&r!==x&&(r&v)===0&&(v=x&-x,i=r&-r,v>=i||v===32&&(i&4194048)!==0)?r:x}function Je(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function St(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function kt(){var t=mt;return mt<<=1,(mt&62914560)===0&&(mt=4194304),t}function Jn(t){for(var r=[],i=0;31>i;i++)r.push(t);return r}function wt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function dn(t,r,i,u,x,v){var C=t.pendingLanes;t.pendingLanes=i,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=i,t.entangledLanes&=i,t.errorRecoveryDisabledLanes&=i,t.shellSuspendCounter=0;var R=t.entanglements,P=t.expirationTimes,Q=t.hiddenUpdates;for(i=C&~i;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var cN=/[\n"\\]/g;function $n(t){return t.replace(cN,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function Wd(t,r,i,u,x,v,C,R){t.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?t.type=C:t.removeAttribute("type"),r!=null?C==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+In(r)):t.value!==""+In(r)&&(t.value=""+In(r)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),r!=null?Yd(t,C,In(r)):i!=null?Yd(t,C,In(i)):u!=null&&t.removeAttribute("value"),x==null&&v!=null&&(t.defaultChecked=!!v),x!=null&&(t.checked=x&&typeof x!="function"&&typeof x!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?t.name=""+In(R):t.removeAttribute("name")}function nx(t,r,i,u,x,v,C,R){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(t.type=v),r!=null||i!=null){if(!(v!=="submit"&&v!=="reset"||r!=null)){Fd(t);return}i=i!=null?""+In(i):"",r=r!=null?""+In(r):i,R||r===t.value||(t.value=r),t.defaultValue=r}u=u??x,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=R?t.checked:!!u,t.defaultChecked=!!u,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C),Fd(t)}function Yd(t,r,i){r==="number"&&Gl(t.ownerDocument)===t||t.defaultValue===""+i||(t.defaultValue=""+i)}function Vo(t,r,i,u){if(t=t.options,r){r={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qd=!1;if(_r)try{var oi={};Object.defineProperty(oi,"passive",{get:function(){Qd=!0}}),window.addEventListener("test",oi,oi),window.removeEventListener("test",oi,oi)}catch{Qd=!1}var ia=null,Jd=null,Wl=null;function cx(){if(Wl)return Wl;var t,r=Jd,i=r.length,u,x="value"in ia?ia.value:ia.textContent,v=x.length;for(t=0;t=li),hx=" ",gx=!1;function xx(t,r){switch(t){case"keyup":return PN.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function vx(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Yo=!1;function $N(t,r){switch(t){case"compositionend":return vx(r);case"keypress":return r.which!==32?null:(gx=!0,hx);case"textInput":return t=r.data,t===hx&&gx?null:t;default:return null}}function BN(t,r){if(Yo)return t==="compositionend"||!af&&xx(t,r)?(t=cx(),Wl=Jd=ia=null,Yo=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:i,offset:r-t};t=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=Ex(i)}}function Tx(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?Tx(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function Rx(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=Gl(t.document);r instanceof t.HTMLIFrameElement;){try{var i=typeof r.contentWindow.location.href=="string"}catch{i=!1}if(i)t=r.contentWindow;else break;r=Gl(t.document)}return r}function lf(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var qN=_r&&"documentMode"in document&&11>=document.documentMode,qo=null,cf=null,fi=null,uf=!1;function Ax(t,r,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;uf||qo==null||qo!==Gl(u)||(u=qo,"selectionStart"in u&&lf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),fi&&di(fi,u)||(fi=u,u=$c(cf,"onSelect"),0>=C,x-=C,hr=1<<32-re(r)+x|i<Ue?(Ke=Re,Re=null):Ke=Re.sibling;var tt=J(W,Re,X[Ue],ce);if(tt===null){Re===null&&(Re=Ke);break}t&&Re&&tt.alternate===null&&r(W,Re),$=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt,Re=Ke}if(Ue===X.length)return i(W,Re),Qe&&Dr(W,Ue),_e;if(Re===null){for(;UeUe?(Ke=Re,Re=null):Ke=Re.sibling;var Ra=J(W,Re,tt.value,ce);if(Ra===null){Re===null&&(Re=Ke);break}t&&Re&&Ra.alternate===null&&r(W,Re),$=v(Ra,$,Ue),et===null?_e=Ra:et.sibling=Ra,et=Ra,Re=Ke}if(tt.done)return i(W,Re),Qe&&Dr(W,Ue),_e;if(Re===null){for(;!tt.done;Ue++,tt=X.next())tt=de(W,tt.value,ce),tt!==null&&($=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt);return Qe&&Dr(W,Ue),_e}for(Re=u(Re);!tt.done;Ue++,tt=X.next())tt=ne(Re,W,Ue,tt.value,ce),tt!==null&&(t&&tt.alternate!==null&&Re.delete(tt.key===null?Ue:tt.key),$=v(tt,$,Ue),et===null?_e=tt:et.sibling=tt,et=tt);return t&&Re.forEach(function(p3){return r(W,p3)}),Qe&&Dr(W,Ue),_e}function ft(W,$,X,ce){if(typeof X=="object"&&X!==null&&X.type===S&&X.key===null&&(X=X.props.children),typeof X=="object"&&X!==null){switch(X.$$typeof){case w:e:{for(var _e=X.key;$!==null;){if($.key===_e){if(_e=X.type,_e===S){if($.tag===7){i(W,$.sibling),ce=x($,X.props.children),ce.return=W,W=ce;break e}}else if($.elementType===_e||typeof _e=="object"&&_e!==null&&_e.$$typeof===B&&so(_e)===$.type){i(W,$.sibling),ce=x($,X.props),vi(ce,X),ce.return=W,W=ce;break e}i(W,$);break}else r(W,$);$=$.sibling}X.type===S?(ce=to(X.props.children,W.mode,ce,X.key),ce.return=W,W=ce):(ce=nc(X.type,X.key,X.props,null,W.mode,ce),vi(ce,X),ce.return=W,W=ce)}return C(W);case j:e:{for(_e=X.key;$!==null;){if($.key===_e)if($.tag===4&&$.stateNode.containerInfo===X.containerInfo&&$.stateNode.implementation===X.implementation){i(W,$.sibling),ce=x($,X.children||[]),ce.return=W,W=ce;break e}else{i(W,$);break}else r(W,$);$=$.sibling}ce=xf(X,W.mode,ce),ce.return=W,W=ce}return C(W);case B:return X=so(X),ft(W,$,X,ce)}if(se(X))return Ne(W,$,X,ce);if(ue(X)){if(_e=ue(X),typeof _e!="function")throw Error(o(150));return X=_e.call(X),Oe(W,$,X,ce)}if(typeof X.then=="function")return ft(W,$,cc(X),ce);if(X.$$typeof===T)return ft(W,$,oc(W,X),ce);uc(W,X)}return typeof X=="string"&&X!==""||typeof X=="number"||typeof X=="bigint"?(X=""+X,$!==null&&$.tag===6?(i(W,$.sibling),ce=x($,X),ce.return=W,W=ce):(i(W,$),ce=gf(X,W.mode,ce),ce.return=W,W=ce),C(W)):i(W,$)}return function(W,$,X,ce){try{xi=0;var _e=ft(W,$,X,ce);return os=null,_e}catch(Re){if(Re===as||Re===ic)throw Re;var et=jn(29,Re,null,W.mode);return et.lanes=ce,et.return=W,et}finally{}}}var lo=Jx(!0),ev=Jx(!1),fa=!1;function Rf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Af(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function ma(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function pa(t,r,i){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(nt&2)!==0){var x=u.pending;return x===null?r.next=r:(r.next=x.next,x.next=r),u.pending=r,r=tc(t),Px(t,null,i),r}return ec(t,u,r,i),tc(t)}function bi(t,r,i){if(r=r.updateQueue,r!==null&&(r=r.shared,(i&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,i|=u,r.lanes=i,fn(t,i)}}function Mf(t,r){var i=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var x=null,v=null;if(i=i.firstBaseUpdate,i!==null){do{var C={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};v===null?x=v=C:v=v.next=C,i=i.next}while(i!==null);v===null?x=v=r:v=v.next=r}else x=v=r;i={baseState:u.baseState,firstBaseUpdate:x,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},t.updateQueue=i;return}t=i.lastBaseUpdate,t===null?i.firstBaseUpdate=r:t.next=r,i.lastBaseUpdate=r}var _f=!1;function yi(){if(_f){var t=rs;if(t!==null)throw t}}function wi(t,r,i,u){_f=!1;var x=t.updateQueue;fa=!1;var v=x.firstBaseUpdate,C=x.lastBaseUpdate,R=x.shared.pending;if(R!==null){x.shared.pending=null;var P=R,Q=P.next;P.next=null,C===null?v=Q:C.next=Q,C=P;var ie=t.alternate;ie!==null&&(ie=ie.updateQueue,R=ie.lastBaseUpdate,R!==C&&(R===null?ie.firstBaseUpdate=Q:R.next=Q,ie.lastBaseUpdate=P))}if(v!==null){var de=x.baseState;C=0,ie=Q=P=null,R=v;do{var J=R.lane&-536870913,ne=J!==R.lane;if(ne?(qe&J)===J:(u&J)===J){J!==0&&J===ns&&(_f=!0),ie!==null&&(ie=ie.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});e:{var Ne=t,Oe=R;J=r;var ft=i;switch(Oe.tag){case 1:if(Ne=Oe.payload,typeof Ne=="function"){de=Ne.call(ft,de,J);break e}de=Ne;break e;case 3:Ne.flags=Ne.flags&-65537|128;case 0:if(Ne=Oe.payload,J=typeof Ne=="function"?Ne.call(ft,de,J):Ne,J==null)break e;de=g({},de,J);break e;case 2:fa=!0}}J=R.callback,J!==null&&(t.flags|=64,ne&&(t.flags|=8192),ne=x.callbacks,ne===null?x.callbacks=[J]:ne.push(J))}else ne={lane:J,tag:R.tag,payload:R.payload,callback:R.callback,next:null},ie===null?(Q=ie=ne,P=de):ie=ie.next=ne,C|=J;if(R=R.next,R===null){if(R=x.shared.pending,R===null)break;ne=R,R=ne.next,ne.next=null,x.lastBaseUpdate=ne,x.shared.pending=null}}while(!0);ie===null&&(P=de),x.baseState=P,x.firstBaseUpdate=Q,x.lastBaseUpdate=ie,v===null&&(x.shared.lanes=0),ba|=C,t.lanes=C,t.memoizedState=de}}function tv(t,r){if(typeof t!="function")throw Error(o(191,t));t.call(r)}function nv(t,r){var i=t.callbacks;if(i!==null)for(t.callbacks=null,t=0;tv?v:8;var C=L.T,R={};L.T=R,Zf(t,!1,r,i);try{var P=x(),Q=L.S;if(Q!==null&&Q(R,P),P!==null&&typeof P=="object"&&typeof P.then=="function"){var ie=r4(P,u);ji(t,r,ie,Rn(t))}else ji(t,r,u,Rn(t))}catch(de){ji(t,r,{then:function(){},status:"rejected",reason:de},Rn())}finally{I.p=v,C!==null&&R.types!==null&&(C.types=R.types),L.T=C}}function c4(){}function Kf(t,r,i,u){if(t.tag!==5)throw Error(o(476));var x=Dv(t).queue;Ov(t,x,r,H,i===null?c4:function(){return Lv(t),i(u)})}function Dv(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:H,baseState:H,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:H},next:null};var i={};return r.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:i},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function Lv(t){var r=Dv(t);r.next===null&&(r=t.alternate.memoizedState),ji(t,r.next.queue,{},Rn())}function Xf(){return en(Ui)}function zv(){return Rt().memoizedState}function Pv(){return Rt().memoizedState}function u4(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var i=Rn();t=ma(i);var u=pa(r,t,i);u!==null&&(yn(u,r,i),bi(u,r,i)),r={cache:Nf()},t.payload=r;return}r=r.return}}function d4(t,r,i){var u=Rn();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},yc(t)?$v(r,i):(i=pf(t,r,i,u),i!==null&&(yn(i,t,u),Bv(i,r,u)))}function Iv(t,r,i){var u=Rn();ji(t,r,i,u)}function ji(t,r,i,u){var x={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(yc(t))$v(r,x);else{var v=t.alternate;if(t.lanes===0&&(v===null||v.lanes===0)&&(v=r.lastRenderedReducer,v!==null))try{var C=r.lastRenderedState,R=v(C,i);if(x.hasEagerState=!0,x.eagerState=R,Sn(R,C))return ec(t,r,x,0),pt===null&&Jl(),!1}catch{}finally{}if(i=pf(t,r,x,u),i!==null)return yn(i,t,u),Bv(i,r,u),!0}return!1}function Zf(t,r,i,u){if(u={lane:2,revertLane:Rm(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},yc(t)){if(r)throw Error(o(479))}else r=pf(t,i,u,2),r!==null&&yn(r,t,2)}function yc(t){var r=t.alternate;return t===$e||r!==null&&r===$e}function $v(t,r){is=mc=!0;var i=t.pending;i===null?r.next=r:(r.next=i.next,i.next=r),t.pending=r}function Bv(t,r,i){if((i&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,i|=u,r.lanes=i,fn(t,i)}}var Ni={readContext:en,use:gc,useCallback:jt,useContext:jt,useEffect:jt,useImperativeHandle:jt,useLayoutEffect:jt,useInsertionEffect:jt,useMemo:jt,useReducer:jt,useRef:jt,useState:jt,useDebugValue:jt,useDeferredValue:jt,useTransition:jt,useSyncExternalStore:jt,useId:jt,useHostTransitionStatus:jt,useFormState:jt,useActionState:jt,useOptimistic:jt,useMemoCache:jt,useCacheRefresh:jt};Ni.useEffectEvent=jt;var Uv={readContext:en,use:gc,useCallback:function(t,r){return cn().memoizedState=[t,r===void 0?null:r],t},useContext:en,useEffect:jv,useImperativeHandle:function(t,r,i){i=i!=null?i.concat([t]):null,vc(4194308,4,Tv.bind(null,r,t),i)},useLayoutEffect:function(t,r){return vc(4194308,4,t,r)},useInsertionEffect:function(t,r){vc(4,2,t,r)},useMemo:function(t,r){var i=cn();r=r===void 0?null:r;var u=t();if(co){ee(!0);try{t()}finally{ee(!1)}}return i.memoizedState=[u,r],u},useReducer:function(t,r,i){var u=cn();if(i!==void 0){var x=i(r);if(co){ee(!0);try{i(r)}finally{ee(!1)}}}else x=r;return u.memoizedState=u.baseState=x,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:x},u.queue=t,t=t.dispatch=d4.bind(null,$e,t),[u.memoizedState,t]},useRef:function(t){var r=cn();return t={current:t},r.memoizedState=t},useState:function(t){t=Gf(t);var r=t.queue,i=Iv.bind(null,$e,r);return r.dispatch=i,[t.memoizedState,i]},useDebugValue:Yf,useDeferredValue:function(t,r){var i=cn();return qf(i,t,r)},useTransition:function(){var t=Gf(!1);return t=Ov.bind(null,$e,t.queue,!0,!1),cn().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,i){var u=$e,x=cn();if(Qe){if(i===void 0)throw Error(o(407));i=i()}else{if(i=r(),pt===null)throw Error(o(349));(qe&127)!==0||lv(u,r,i)}x.memoizedState=i;var v={value:i,getSnapshot:r};return x.queue=v,jv(uv.bind(null,u,v,t),[t]),u.flags|=2048,cs(9,{destroy:void 0},cv.bind(null,u,v,i,r),null),i},useId:function(){var t=cn(),r=pt.identifierPrefix;if(Qe){var i=gr,u=hr;i=(u&~(1<<32-re(u)-1)).toString(32)+i,r="_"+r+"R_"+i,i=pc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?C.createElement("select",{is:u.is}):C.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?C.createElement(x,{is:u.is}):C.createElement(x)}}v[Qt]=r,v[pn]=u;e:for(C=r.child;C!==null;){if(C.tag===5||C.tag===6)v.appendChild(C.stateNode);else if(C.tag!==4&&C.tag!==27&&C.child!==null){C.child.return=C,C=C.child;continue}if(C===r)break e;for(;C.sibling===null;){if(C.return===null||C.return===r)break e;C=C.return}C.sibling.return=C.return,C=C.sibling}r.stateNode=v;e:switch(nn(v,x,u),x){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&Br(r)}}return vt(r),dm(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,i),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&Br(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(t=oe.current,es(r)){if(t=r.stateNode,i=r.memoizedProps,u=null,x=Jt,x!==null)switch(x.tag){case 27:case 5:u=x.memoizedProps}t[Qt]=r,t=!!(t.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||sb(t.nodeValue,i)),t||ua(r,!0)}else t=Bc(t).createTextNode(u),t[Qt]=r,r.stateNode=t}return vt(r),null;case 31:if(i=r.memoizedState,t===null||t.memoizedState!==null){if(u=es(r),i!==null){if(t===null){if(!u)throw Error(o(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(o(557));t[Qt]=r}else no(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;vt(r),t=!1}else i=wf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=i),t=!0;if(!t)return r.flags&256?(En(r),r):(En(r),null);if((r.flags&128)!==0)throw Error(o(558))}return vt(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(x=es(r),u!==null&&u.dehydrated!==null){if(t===null){if(!x)throw Error(o(318));if(x=r.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(o(317));x[Qt]=r}else no(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;vt(r),x=!1}else x=wf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=x),x=!0;if(!x)return r.flags&256?(En(r),r):(En(r),null)}return En(r),(r.flags&128)!==0?(r.lanes=i,r):(i=u!==null,t=t!==null&&t.memoizedState!==null,i&&(u=r.child,x=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(x=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==x&&(u.flags|=2048)),i!==t&&i&&(r.child.flags|=8192),Nc(r,r.updateQueue),vt(r),null);case 4:return ve(),t===null&&Om(r.stateNode.containerInfo),vt(r),null;case 10:return zr(r.type),vt(r),null;case 19:if(D(Tt),u=r.memoizedState,u===null)return vt(r),null;if(x=(r.flags&128)!==0,v=u.rendering,v===null)if(x)ki(u,!1);else{if(Nt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(v=fc(t),v!==null){for(r.flags|=128,ki(u,!1),t=v.updateQueue,r.updateQueue=t,Nc(r,t),r.subtreeFlags=0,t=i,i=r.child;i!==null;)Ix(i,t),i=i.sibling;return G(Tt,Tt.current&1|2),Qe&&Dr(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&Kt()>Ac&&(r.flags|=128,x=!0,ki(u,!1),r.lanes=4194304)}else{if(!x)if(t=fc(v),t!==null){if(r.flags|=128,x=!0,t=t.updateQueue,r.updateQueue=t,Nc(r,t),ki(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!Qe)return vt(r),null}else 2*Kt()-u.renderingStartTime>Ac&&i!==536870912&&(r.flags|=128,x=!0,ki(u,!1),r.lanes=4194304);u.isBackwards?(v.sibling=r.child,r.child=v):(t=u.last,t!==null?t.sibling=v:r.child=v,u.last=v)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=Kt(),t.sibling=null,i=Tt.current,G(Tt,x?i&1|2:i&1),Qe&&Dr(r,u.treeForkCount),t):(vt(r),null);case 22:case 23:return En(r),Df(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(i&536870912)!==0&&(r.flags&128)===0&&(vt(r),r.subtreeFlags&6&&(r.flags|=8192)):vt(r),i=r.updateQueue,i!==null&&Nc(r,i.retryQueue),i=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==i&&(r.flags|=2048),t!==null&&D(oo),null;case 24:return i=null,t!==null&&(i=t.memoizedState.cache),r.memoizedState.cache!==i&&(r.flags|=2048),zr(Ot),vt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function g4(t,r){switch(bf(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return zr(Ot),ve(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return le(r),null;case 31:if(r.memoizedState!==null){if(En(r),r.alternate===null)throw Error(o(340));no()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(En(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(o(340));no()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return D(Tt),null;case 4:return ve(),null;case 10:return zr(r.type),null;case 22:case 23:return En(r),Df(),t!==null&&D(oo),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return zr(Ot),null;case 25:return null;default:return null}}function d1(t,r){switch(bf(r),r.tag){case 3:zr(Ot),ve();break;case 26:case 27:case 5:le(r);break;case 4:ve();break;case 31:r.memoizedState!==null&&En(r);break;case 13:En(r);break;case 19:D(Tt);break;case 10:zr(r.type);break;case 22:case 23:En(r),Df(),t!==null&&D(oo);break;case 24:zr(Ot)}}function Ti(t,r){try{var i=r.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var x=u.next;i=x;do{if((i.tag&t)===t){u=void 0;var v=i.create,C=i.inst;u=v(),C.destroy=u}i=i.next}while(i!==x)}}catch(R){st(r,r.return,R)}}function xa(t,r,i){try{var u=r.updateQueue,x=u!==null?u.lastEffect:null;if(x!==null){var v=x.next;u=v;do{if((u.tag&t)===t){var C=u.inst,R=C.destroy;if(R!==void 0){C.destroy=void 0,x=r;var P=i,Q=R;try{Q()}catch(ie){st(x,P,ie)}}}u=u.next}while(u!==v)}}catch(ie){st(r,r.return,ie)}}function f1(t){var r=t.updateQueue;if(r!==null){var i=t.stateNode;try{nv(r,i)}catch(u){st(t,t.return,u)}}}function m1(t,r,i){i.props=uo(t.type,t.memoizedProps),i.state=t.memoizedState;try{i.componentWillUnmount()}catch(u){st(t,r,u)}}function Ri(t,r){try{var i=t.ref;if(i!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof i=="function"?t.refCleanup=i(u):i.current=u}}catch(x){st(t,r,x)}}function xr(t,r){var i=t.ref,u=t.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(x){st(t,r,x)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(x){st(t,r,x)}else i.current=null}function p1(t){var r=t.type,i=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break e;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(x){st(t,t.return,x)}}function fm(t,r,i){try{var u=t.stateNode;I4(u,t.type,i,r),u[pn]=r}catch(x){st(t,t.return,x)}}function h1(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&ja(t.type)||t.tag===4}function mm(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||h1(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&ja(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function pm(t,r,i){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(t,r):(r=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,r.appendChild(t),i=i._reactRootContainer,i!=null||r.onclick!==null||(r.onclick=Mr));else if(u!==4&&(u===27&&ja(t.type)&&(i=t.stateNode,r=null),t=t.child,t!==null))for(pm(t,r,i),t=t.sibling;t!==null;)pm(t,r,i),t=t.sibling}function Ec(t,r,i){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?i.insertBefore(t,r):i.appendChild(t);else if(u!==4&&(u===27&&ja(t.type)&&(i=t.stateNode),t=t.child,t!==null))for(Ec(t,r,i),t=t.sibling;t!==null;)Ec(t,r,i),t=t.sibling}function g1(t){var r=t.stateNode,i=t.memoizedProps;try{for(var u=t.type,x=r.attributes;x.length;)r.removeAttributeNode(x[0]);nn(r,u,i),r[Qt]=t,r[pn]=i}catch(v){st(t,t.return,v)}}var Ur=!1,zt=!1,hm=!1,x1=typeof WeakSet=="function"?WeakSet:Set,Gt=null;function x4(t,r){if(t=t.containerInfo,zm=Yc,t=Rx(t),lf(t)){if("selectionStart"in t)var i={start:t.selectionStart,end:t.selectionEnd};else e:{i=(i=t.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var x=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{i.nodeType,v.nodeType}catch{i=null;break e}var C=0,R=-1,P=-1,Q=0,ie=0,de=t,J=null;t:for(;;){for(var ne;de!==i||x!==0&&de.nodeType!==3||(R=C+x),de!==v||u!==0&&de.nodeType!==3||(P=C+u),de.nodeType===3&&(C+=de.nodeValue.length),(ne=de.firstChild)!==null;)J=de,de=ne;for(;;){if(de===t)break t;if(J===i&&++Q===x&&(R=C),J===v&&++ie===u&&(P=C),(ne=de.nextSibling)!==null)break;de=J,J=de.parentNode}de=ne}i=R===-1||P===-1?null:{start:R,end:P}}else i=null}i=i||{start:0,end:0}}else i=null;for(Pm={focusedElem:t,selectionRange:i},Yc=!1,Gt=r;Gt!==null;)if(r=Gt,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Gt=t;else for(;Gt!==null;){switch(r=Gt,v=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(i=0;i title"))),nn(v,u,i),v[Qt]=t,Vt(v),u=v;break e;case"link":var C=Sb("link","href",x).get(u+(i.href||""));if(C){for(var R=0;Rft&&(C=ft,ft=Oe,Oe=C);var W=kx(R,Oe),$=kx(R,ft);if(W&&$&&(ne.rangeCount!==1||ne.anchorNode!==W.node||ne.anchorOffset!==W.offset||ne.focusNode!==$.node||ne.focusOffset!==$.offset)){var X=de.createRange();X.setStart(W.node,W.offset),ne.removeAllRanges(),Oe>ft?(ne.addRange(X),ne.extend($.node,$.offset)):(X.setEnd($.node,$.offset),ne.addRange(X))}}}}for(de=[],ne=R;ne=ne.parentNode;)ne.nodeType===1&&de.push({element:ne,left:ne.scrollLeft,top:ne.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Ri?32:i,L.T=null,i=Cm,Cm=null;var v=wa,C=Wr;if(It=0,ps=wa=null,Wr=0,(nt&6)!==0)throw Error(o(331));var R=nt;if(nt|=4,T1(v.current),N1(v,v.current,C,i),nt=R,Li(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(pr,v)}catch{}return!0}finally{I.p=x,L.T=u,W1(t,r)}}function q1(t,r,i){r=Un(i,r),r=tm(t.stateNode,r,2),t=pa(t,r,2),t!==null&&(wt(t,2),vr(t))}function st(t,r,i){if(t.tag===3)q1(t,t,i);else for(;r!==null;){if(r.tag===3){q1(r,t,i);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(ya===null||!ya.has(u))){t=Un(i,t),i=Kv(2),u=pa(r,i,2),u!==null&&(Xv(i,u,r,t),wt(u,2),vr(u));break}}r=r.return}}function Em(t,r,i){var u=t.pingCache;if(u===null){u=t.pingCache=new y4;var x=new Set;u.set(r,x)}else x=u.get(r),x===void 0&&(x=new Set,u.set(r,x));x.has(i)||(vm=!0,x.add(i),t=N4.bind(null,t,r,i),r.then(t,t))}function N4(t,r,i){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&i,t.warmLanes&=~i,pt===t&&(qe&i)===i&&(Nt===4||Nt===3&&(qe&62914560)===qe&&300>Kt()-Rc?(nt&2)===0&&hs(t,0):bm|=i,ms===qe&&(ms=0)),vr(t)}function K1(t,r){r===0&&(r=kt()),t=eo(t,r),t!==null&&(wt(t,r),vr(t))}function E4(t){var r=t.memoizedState,i=0;r!==null&&(i=r.retryLane),K1(t,i)}function k4(t,r){var i=0;switch(t.tag){case 31:case 13:var u=t.stateNode,x=t.memoizedState;x!==null&&(i=x.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),K1(t,i)}function T4(t,r){return Ya(t,r)}var zc=null,xs=null,km=!1,Pc=!1,Tm=!1,Sa=0;function vr(t){t!==xs&&t.next===null&&(xs===null?zc=xs=t:xs=xs.next=t),Pc=!0,km||(km=!0,A4())}function Li(t,r){if(!Tm&&Pc){Tm=!0;do for(var i=!1,u=zc;u!==null;){if(t!==0){var x=u.pendingLanes;if(x===0)var v=0;else{var C=u.suspendedLanes,R=u.pingedLanes;v=(1<<31-re(42|t)+1)-1,v&=x&~(C&~R),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(i=!0,J1(u,v))}else v=qe,v=Me(u,u===pt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||Je(u,v)||(i=!0,J1(u,v));u=u.next}while(i);Tm=!1}}function R4(){X1()}function X1(){Pc=km=!1;var t=0;Sa!==0&&B4()&&(t=Sa);for(var r=Kt(),i=null,u=zc;u!==null;){var x=u.next,v=Z1(u,r);v===0?(u.next=null,i===null?zc=x:i.next=x,x===null&&(xs=i)):(i=u,(t!==0||(v&3)!==0)&&(Pc=!0)),u=x}It!==0&&It!==5||Li(t),Sa!==0&&(Sa=0)}function Z1(t,r){for(var i=t.suspendedLanes,u=t.pingedLanes,x=t.expirationTimes,v=t.pendingLanes&-62914561;0R)break;var ie=P.transferSize,de=P.initiatorType;ie&&ib(de)&&(P=P.responseEnd,C+=ie*(P"u"?null:document;function bb(t,r,i){var u=vs;if(u&&typeof r=="string"&&r){var x=$n(r);x='link[rel="'+t+'"][href="'+x+'"]',typeof i=="string"&&(x+='[crossorigin="'+i+'"]'),vb.has(x)||(vb.add(x),t={rel:t,crossOrigin:i,href:r},u.querySelector(x)===null&&(r=u.createElement("link"),nn(r,"link",t),Vt(r),u.head.appendChild(r)))}}function K4(t){Yr.D(t),bb("dns-prefetch",t,null)}function X4(t,r){Yr.C(t,r),bb("preconnect",t,r)}function Z4(t,r,i){Yr.L(t,r,i);var u=vs;if(u&&t&&r){var x='link[rel="preload"][as="'+$n(r)+'"]';r==="image"&&i&&i.imageSrcSet?(x+='[imagesrcset="'+$n(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(x+='[imagesizes="'+$n(i.imageSizes)+'"]')):x+='[href="'+$n(t)+'"]';var v=x;switch(r){case"style":v=bs(t);break;case"script":v=ys(t)}Yn.has(v)||(t=g({rel:"preload",href:r==="image"&&i&&i.imageSrcSet?void 0:t,as:r},i),Yn.set(v,t),u.querySelector(x)!==null||r==="style"&&u.querySelector($i(v))||r==="script"&&u.querySelector(Bi(v))||(r=u.createElement("link"),nn(r,"link",t),Vt(r),u.head.appendChild(r)))}}function Q4(t,r){Yr.m(t,r);var i=vs;if(i&&t){var u=r&&typeof r.as=="string"?r.as:"script",x='link[rel="modulepreload"][as="'+$n(u)+'"][href="'+$n(t)+'"]',v=x;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=ys(t)}if(!Yn.has(v)&&(t=g({rel:"modulepreload",href:t},r),Yn.set(v,t),i.querySelector(x)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(Bi(v)))return}u=i.createElement("link"),nn(u,"link",t),Vt(u),i.head.appendChild(u)}}}function J4(t,r,i){Yr.S(t,r,i);var u=vs;if(u&&t){var x=Uo(u).hoistableStyles,v=bs(t);r=r||"default";var C=x.get(v);if(!C){var R={loading:0,preload:null};if(C=u.querySelector($i(v)))R.loading=5;else{t=g({rel:"stylesheet",href:t,"data-precedence":r},i),(i=Yn.get(v))&&Gm(t,i);var P=C=u.createElement("link");Vt(P),nn(P,"link",t),P._p=new Promise(function(Q,ie){P.onload=Q,P.onerror=ie}),P.addEventListener("load",function(){R.loading|=1}),P.addEventListener("error",function(){R.loading|=2}),R.loading|=4,Hc(C,r,u)}C={type:"stylesheet",instance:C,count:1,state:R},x.set(v,C)}}}function e3(t,r){Yr.X(t,r);var i=vs;if(i&&t){var u=Uo(i).hoistableScripts,x=ys(t),v=u.get(x);v||(v=i.querySelector(Bi(x)),v||(t=g({src:t,async:!0},r),(r=Yn.get(x))&&Fm(t,r),v=i.createElement("script"),Vt(v),nn(v,"link",t),i.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function t3(t,r){Yr.M(t,r);var i=vs;if(i&&t){var u=Uo(i).hoistableScripts,x=ys(t),v=u.get(x);v||(v=i.querySelector(Bi(x)),v||(t=g({src:t,async:!0,type:"module"},r),(r=Yn.get(x))&&Fm(t,r),v=i.createElement("script"),Vt(v),nn(v,"link",t),i.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function yb(t,r,i,u){var x=(x=oe.current)?Uc(x):null;if(!x)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(r=bs(i.href),i=Uo(x).hoistableStyles,u=i.get(r),u||(u={type:"style",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){t=bs(i.href);var v=Uo(x).hoistableStyles,C=v.get(t);if(C||(x=x.ownerDocument||x,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(t,C),(v=x.querySelector($i(t)))&&!v._p&&(C.instance=v,C.state.loading=5),Yn.has(t)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},Yn.set(t,i),v||n3(x,t,i,C.state))),r&&u===null)throw Error(o(528,""));return C}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=i.async,i=i.src,typeof i=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=ys(i),i=Uo(x).hoistableScripts,u=i.get(r),u||(u={type:"script",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function bs(t){return'href="'+$n(t)+'"'}function $i(t){return'link[rel="stylesheet"]['+t+"]"}function wb(t){return g({},t,{"data-precedence":t.precedence,precedence:null})}function n3(t,r,i,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),nn(r,"link",i),Vt(r),t.head.appendChild(r))}function ys(t){return'[src="'+$n(t)+'"]'}function Bi(t){return"script[async]"+t}function Cb(t,r,i){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+$n(i.href)+'"]');if(u)return r.instance=u,Vt(u),u;var x=g({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),Vt(u),nn(u,"style",x),Hc(u,i.precedence,t),r.instance=u;case"stylesheet":x=bs(i.href);var v=t.querySelector($i(x));if(v)return r.state.loading|=4,r.instance=v,Vt(v),v;u=wb(i),(x=Yn.get(x))&&Gm(u,x),v=(t.ownerDocument||t).createElement("link"),Vt(v);var C=v;return C._p=new Promise(function(R,P){C.onload=R,C.onerror=P}),nn(v,"link",u),r.state.loading|=4,Hc(v,i.precedence,t),r.instance=v;case"script":return v=ys(i.src),(x=t.querySelector(Bi(v)))?(r.instance=x,Vt(x),x):(u=i,(x=Yn.get(v))&&(u=g({},i),Fm(u,x)),t=t.ownerDocument||t,x=t.createElement("script"),Vt(x),nn(x,"link",u),t.head.appendChild(x),r.instance=x);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,Hc(u,i.precedence,t));return r.instance}function Hc(t,r,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=u.length?u[u.length-1]:null,v=x,C=0;C title"):null)}function r3(t,r,i){if(i===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function Nb(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function a3(t,r,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var x=bs(u.href),v=r.querySelector($i(x));if(v){r=v._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=Gc.bind(t),r.then(t,t)),i.state.loading|=4,i.instance=v,Vt(v);return}v=r.ownerDocument||r,u=wb(u),(x=Yn.get(x))&&Gm(u,x),v=v.createElement("link"),Vt(v);var C=v;C._p=new Promise(function(R,P){C.onload=R,C.onerror=P}),nn(v,"link",u),i.instance=v}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(i,r),(r=i.state.preload)&&(i.state.loading&3)===0&&(t.count++,i=Gc.bind(t),r.addEventListener("load",i),r.addEventListener("error",i))}}var Wm=0;function o3(t,r){return t.stylesheets&&t.count===0&&Wc(t,t.stylesheets),0Wm?50:800)+r);return t.unsuspend=i,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(x)}}:null}function Gc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Fc=null;function Wc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Fc=new Map,r.forEach(s3,t),Fc=null,Gc.call(t))}function s3(t,r){if(!(r.state.loading&4)){var i=Fc.get(t);if(i)var u=i.get(null);else{i=new Map,Fc.set(t,i);for(var x=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),tp.exports=j3(),tp.exports}var E3=N3();/** - * react-router v7.15.1 - * - * 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 - */var Xb="popstate";function Zb(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function k3(e={}){function n(o,l){var h;let c=(h=l.state)==null?void 0:h.masked,{pathname:d,search:m,hash:p}=c||o.location;return Up("",{pathname:d,search:m,hash:p},l.state&&l.state.usr||null,l.state&&l.state.key||"default",c?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,l){return typeof l=="string"?l:sl(l)}return R3(n,a,null,e)}function yt(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function Xn(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function T3(){return Math.random().toString(36).substring(2,10)}function Qb(e,n){return{usr:e.state,key:e.key,idx:n,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Up(e,n,a=null,o,l){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof n=="string"?$s(n):n,state:a,key:n&&n.key||o||T3(),mask:l}}function sl({pathname:e="/",search:n="",hash:a=""}){return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function $s(e){let n={};if(e){let a=e.indexOf("#");a>=0&&(n.hash=e.substring(a),e=e.substring(0,a));let o=e.indexOf("?");o>=0&&(n.search=e.substring(o),e=e.substring(0,o)),e&&(n.pathname=e)}return n}function R3(e,n,a,o={}){let{window:l=document.defaultView,v5Compat:c=!1}=o,d=l.history,m="POP",p=null,h=b();h==null&&(h=0,d.replaceState({...d.state,idx:h},""));function b(){return(d.state||{idx:null}).idx}function g(){m="POP";let E=b(),N=E==null?null:E-h;h=E,p&&p({action:m,location:S.location,delta:N})}function y(E,N){m="PUSH";let k=Zb(E)?E:Up(S.location,E,N);h=b()+1;let T=Qb(k,h),A=S.createHref(k.mask||k);try{d.pushState(T,"",A)}catch(O){if(O instanceof DOMException&&O.name==="DataCloneError")throw O;l.location.assign(A)}c&&p&&p({action:m,location:S.location,delta:1})}function w(E,N){m="REPLACE";let k=Zb(E)?E:Up(S.location,E,N);h=b();let T=Qb(k,h),A=S.createHref(k.mask||k);d.replaceState(T,"",A),c&&p&&p({action:m,location:S.location,delta:0})}function j(E){return A3(E)}let S={get action(){return m},get location(){return e(l,d)},listen(E){if(p)throw new Error("A history only accepts one active listener");return l.addEventListener(Xb,g),p=E,()=>{l.removeEventListener(Xb,g),p=null}},createHref(E){return n(l,E)},createURL:j,encodeLocation(E){let N=j(E);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:y,replace:w,go(E){return d.go(E)}};return S}function A3(e,n=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),yt(a,"No window.location.(origin|href) available to create URL");let o=typeof e=="string"?e:sl(e);return o=o.replace(/ $/,"%20"),!n&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function _0(e,n,a="/"){return M3(e,n,a,!1)}function M3(e,n,a,o,l){let c=typeof n=="string"?$s(n):n,d=Jr(c.pathname||"/",a);if(d==null)return null;let m=_3(e),p=null,h=G3(d);for(let b=0;p==null&&b{let b={relativePath:h===void 0?d.path||"":h,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&p)return;yt(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let g=sr([o,b.relativePath]),y=a.concat(b);d.children&&d.children.length>0&&(yt(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${g}".`),O0(d.children,n,y,g,p)),!(d.path==null&&!d.index)&&n.push({path:g,score:B3(g,d.index),routesMeta:y})};return e.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))c(d,m);else for(let h of D0(d.path))c(d,m,!0,h)}),n}function D0(e){let n=e.split("/");if(n.length===0)return[];let[a,...o]=n,l=a.endsWith("?"),c=a.replace(/\?$/,"");if(o.length===0)return l?[c,""]:[c];let d=D0(o.join("/")),m=[];return m.push(...d.map(p=>p===""?c:[c,p].join("/"))),l&&m.push(...d),m.map(p=>e.startsWith("/")&&p===""?"/":p)}function O3(e){e.sort((n,a)=>n.score!==a.score?a.score-n.score:U3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var D3=/^:[\w-]+$/,L3=3,z3=2,P3=1,I3=10,$3=-2,Jb=e=>e==="*";function B3(e,n){let a=e.split("/"),o=a.length;return a.some(Jb)&&(o+=$3),n&&(o+=z3),a.filter(l=>!Jb(l)).reduce((l,c)=>l+(D3.test(c)?L3:c===""?P3:I3),o)}function U3(e,n){return e.length===n.length&&e.slice(0,-1).every((o,l)=>o===n[l])?e[e.length-1]-n[n.length-1]:0}function H3(e,n,a=!1){let{routesMeta:o}=e,l={},c="/",d=[];for(let m=0;m{if(b==="*"){let j=m[y]||"";d=c.slice(0,c.length-j.length).replace(/(.)\/+$/,"$1")}const w=m[y];return g&&!w?h[b]=void 0:h[b]=(w||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:d,pattern:e}}function V3(e,n=!1,a=!0){Xn(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 o=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,h,b)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let g=b.charAt(h+d.length);return g&&g!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(o.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,n?void 0:"i"),o]}function G3(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return Xn(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),e}}function Jr(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=e.charAt(a);return o&&o!=="/"?null:e.slice(a)||"/"}var F3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function W3(e,n="/"){let{pathname:a,search:o="",hash:l=""}=typeof e=="string"?$s(e):e,c;return a?(a=L0(a),a.startsWith("/")?c=ey(a.substring(1),"/"):c=ey(a,n)):c=n,{pathname:c,search:K3(o),hash:X3(l)}}function ey(e,n){let a=Ru(n).split("/");return e.split("/").forEach(l=>{l===".."?a.length>1&&a.pop():l!=="."&&a.push(l)}),a.length>1?a.join("/"):"/"}function op(e,n,a,o){return`Cannot include a '${e}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Y3(e){return e.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Mh(e){let n=Y3(e);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function Xu(e,n,a,o=!1){let l;typeof e=="string"?l=$s(e):(l={...e},yt(!l.pathname||!l.pathname.includes("?"),op("?","pathname","search",l)),yt(!l.pathname||!l.pathname.includes("#"),op("#","pathname","hash",l)),yt(!l.search||!l.search.includes("#"),op("#","search","hash",l)));let c=e===""||l.pathname==="",d=c?"/":l.pathname,m;if(d==null)m=a;else{let g=n.length-1;if(!o&&d.startsWith("..")){let y=d.split("/");for(;y[0]==="..";)y.shift(),g-=1;l.pathname=y.join("/")}m=g>=0?n[g]:"/"}let p=W3(l,m),h=d&&d!=="/"&&d.endsWith("/"),b=(c||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(h||b)&&(p.pathname+="/"),p}var L0=e=>e.replace(/\/\/+/g,"/"),sr=e=>L0(e.join("/")),Ru=e=>e.replace(/\/+$/,""),q3=e=>Ru(e).replace(/^\/*/,"/"),K3=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,X3=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,Z3=class{constructor(e,n,a,o=!1){this.status=e,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function Q3(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function J3(e){let n=e.map(a=>a.route.path).filter(Boolean);return sr(n)||"/"}var z0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function P0(e,n){let a=e;if(typeof a!="string"||!F3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,l=!1;if(z0)try{let c=new URL(window.location.href),d=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=Jr(d.pathname,n);d.origin===c.origin&&m!=null?a=m+d.search+d.hash:l=!0}catch{Xn(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:l,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var I0=["POST","PUT","PATCH","DELETE"];new Set(I0);var eE=["GET",...I0];new Set(eE);var Bs=f.createContext(null);Bs.displayName="DataRouter";var Zu=f.createContext(null);Zu.displayName="DataRouterState";var $0=f.createContext(!1);function tE(){return f.useContext($0)}var B0=f.createContext({isTransitioning:!1});B0.displayName="ViewTransition";var nE=f.createContext(new Map);nE.displayName="Fetchers";var rE=f.createContext(null);rE.displayName="Await";var Dn=f.createContext(null);Dn.displayName="Navigation";var bl=f.createContext(null);bl.displayName="Location";var cr=f.createContext({outlet:null,matches:[],isDataRoute:!1});cr.displayName="Route";var _h=f.createContext(null);_h.displayName="RouteError";var U0="REACT_ROUTER_ERROR",aE="REDIRECT",oE="ROUTE_ERROR_RESPONSE";function sE(e){if(e.startsWith(`${U0}:${aE}:{`))try{let n=JSON.parse(e.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function iE(e){if(e.startsWith(`${U0}:${oE}:{`))try{let n=JSON.parse(e.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new Z3(n.status,n.statusText,n.data)}catch{}}function lE(e,{relative:n}={}){yt(Us(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(Dn),{hash:l,pathname:c,search:d}=yl(e,{relative:n}),m=c;return a!=="/"&&(m=c==="/"?a:sr([a,c])),o.createHref({pathname:m,search:d,hash:l})}function Us(){return f.useContext(bl)!=null}function Ln(){return yt(Us(),"useLocation() may be used only in the context of a component."),f.useContext(bl).location}var H0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function V0(e){f.useContext(Dn).static||f.useLayoutEffect(e)}function Ro(){let{isDataRoute:e}=f.useContext(cr);return e?SE():cE()}function cE(){yt(Us(),"useNavigate() may be used only in the context of a component.");let e=f.useContext(Bs),{basename:n,navigator:a}=f.useContext(Dn),{matches:o}=f.useContext(cr),{pathname:l}=Ln(),c=JSON.stringify(Mh(o)),d=f.useRef(!1);return V0(()=>{d.current=!0}),f.useCallback((p,h={})=>{if(Xn(d.current,H0),!d.current)return;if(typeof p=="number"){a.go(p);return}let b=Xu(p,JSON.parse(c),l,h.relative==="path");e==null&&n!=="/"&&(b.pathname=b.pathname==="/"?n:sr([n,b.pathname])),(h.replace?a.replace:a.push)(b,h.state,h)},[n,a,c,l,e])}var uE=f.createContext(null);function dE(e){let n=f.useContext(cr).outlet;return f.useMemo(()=>n&&f.createElement(uE.Provider,{value:e},n),[n,e])}function yl(e,{relative:n}={}){let{matches:a}=f.useContext(cr),{pathname:o}=Ln(),l=JSON.stringify(Mh(a));return f.useMemo(()=>Xu(e,JSON.parse(l),o,n==="path"),[e,l,o,n])}function fE(e,n){return G0(e,n)}function G0(e,n,a){var E;yt(Us(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(Dn),{matches:l}=f.useContext(cr),c=l[l.length-1],d=c?c.params:{},m=c?c.pathname:"/",p=c?c.pathnameBase:"/",h=c&&c.route;{let N=h&&h.path||"";W0(m,!h||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let b=Ln(),g;if(n){let N=typeof n=="string"?$s(n):n;yt(p==="/"||((E=N.pathname)==null?void 0:E.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${N.pathname}" was given in the \`location\` prop.`),g=N}else g=b;let y=g.pathname||"/",w=y;if(p!=="/"){let N=p.replace(/^\//,"").split("/");w="/"+y.replace(/^\//,"").split("/").slice(N.length).join("/")}let j=a&&a.state.matches.length?a.state.matches.map(N=>Object.assign(N,{route:a.manifest[N.route.id]||N.route})):_0(e,{pathname:w});Xn(h||j!=null,`No routes matched location "${g.pathname}${g.search}${g.hash}" `),Xn(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${g.pathname}${g.search}${g.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let S=xE(j&&j.map(N=>Object.assign({},N,{params:Object.assign({},d,N.params),pathname:sr([p,o.encodeLocation?o.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?p:sr([p,o.encodeLocation?o.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),l,a);return n&&S?f.createElement(bl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...g},navigationType:"POP"}},S):S}function mE(){let e=CE(),n=Q3(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",l={padding:"0.5rem",backgroundColor:o},c={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",e),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:c},"ErrorBoundary")," or"," ",f.createElement("code",{style:c},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:l},a):null,d)}var pE=f.createElement(mE,null),F0=class extends f.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){this.props.onError?this.props.onError(e,n):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=iE(e.digest);a&&(e=a)}let n=e!==void 0?f.createElement(cr.Provider,{value:this.props.routeContext},f.createElement(_h.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?f.createElement(hE,{error:e},n):n}};F0.contextType=$0;var sp=new WeakMap;function hE({children:e,error:n}){let{basename:a}=f.useContext(Dn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=sE(n.digest);if(o){let l=sp.get(n);if(l)throw l;let c=P0(o.location,a);if(z0&&!sp.get(n))if(c.isExternal||o.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:o.replace}));throw sp.set(n,d),d}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return e}function gE({routeContext:e,match:n,children:a}){let o=f.useContext(Bs);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(cr.Provider,{value:e},a)}function xE(e,n=[],a){let o=a==null?void 0:a.state;if(e==null){if(!o)return null;if(o.errors)e=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)e=o.matches;else return null}let l=e,c=o==null?void 0:o.errors;if(c!=null){let b=l.findIndex(g=>g.route.id&&(c==null?void 0:c[g.route.id])!==void 0);yt(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),l=l.slice(0,Math.min(l.length,b+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let b=0;b=0?l=l.slice(0,m+1):l=[l[0]];break}}}}let p=a==null?void 0:a.onError,h=o&&p?(b,g)=>{var y,w;p(b,{location:o.location,params:((w=(y=o.matches)==null?void 0:y[0])==null?void 0:w.params)??{},pattern:J3(o.matches),errorInfo:g})}:void 0;return l.reduceRight((b,g,y)=>{let w,j=!1,S=null,E=null;o&&(w=c&&g.route.id?c[g.route.id]:void 0,S=g.route.errorElement||pE,d&&(m<0&&y===0?(W0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,E=null):m===y&&(j=!0,E=g.route.hydrateFallbackElement||null)));let N=n.concat(l.slice(0,y+1)),k=()=>{let T;return w?T=S:j?T=E:g.route.Component?T=f.createElement(g.route.Component,null):g.route.element?T=g.route.element:T=b,f.createElement(gE,{match:g,routeContext:{outlet:b,matches:N,isDataRoute:o!=null},children:T})};return o&&(g.route.ErrorBoundary||g.route.errorElement||y===0)?f.createElement(F0,{location:o.location,revalidation:o.revalidation,component:S,error:w,children:k(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:h}):k()},null)}function Oh(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function vE(e){let n=f.useContext(Bs);return yt(n,Oh(e)),n}function bE(e){let n=f.useContext(Zu);return yt(n,Oh(e)),n}function yE(e){let n=f.useContext(cr);return yt(n,Oh(e)),n}function Dh(e){let n=yE(e),a=n.matches[n.matches.length-1];return yt(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function wE(){return Dh("useRouteId")}function CE(){var o;let e=f.useContext(_h),n=bE("useRouteError"),a=Dh("useRouteError");return e!==void 0?e:(o=n.errors)==null?void 0:o[a]}function SE(){let{router:e}=vE("useNavigate"),n=Dh("useNavigate"),a=f.useRef(!1);return V0(()=>{a.current=!0}),f.useCallback(async(l,c={})=>{Xn(a.current,H0),a.current&&(typeof l=="number"?await e.navigate(l):await e.navigate(l,{fromRouteId:n,...c}))},[e,n])}var ty={};function W0(e,n,a){!n&&!ty[e]&&(ty[e]=!0,Xn(!1,a))}f.memo(jE);function jE({routes:e,manifest:n,future:a,state:o,isStatic:l,onError:c}){return G0(e,void 0,{manifest:n,state:o,isStatic:l,onError:c})}function Qr({to:e,replace:n,state:a,relative:o}){yt(Us()," may be used only in the context of a component.");let{static:l}=f.useContext(Dn);Xn(!l," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:c}=f.useContext(cr),{pathname:d}=Ln(),m=Ro(),p=Xu(e,Mh(c),d,o==="path"),h=JSON.stringify(p);return f.useEffect(()=>{m(JSON.parse(h),{replace:n,state:a,relative:o})},[m,h,o,n,a]),null}function NE(e){return dE(e.context)}function rn(e){yt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function EE({basename:e="/",children:n=null,location:a,navigationType:o="POP",navigator:l,static:c=!1,useTransitions:d}){yt(!Us(),"You cannot render a inside another . You should never have more than one in your app.");let m=e.replace(/^\/*/,"/"),p=f.useMemo(()=>({basename:m,navigator:l,static:c,useTransitions:d,future:{}}),[m,l,c,d]);typeof a=="string"&&(a=$s(a));let{pathname:h="/",search:b="",hash:g="",state:y=null,key:w="default",mask:j}=a,S=f.useMemo(()=>{let E=Jr(h,m);return E==null?null:{location:{pathname:E,search:b,hash:g,state:y,key:w,mask:j},navigationType:o}},[m,h,b,g,y,w,o,j]);return Xn(S!=null,` is not able to match the URL "${h}${b}${g}" because it does not start with the basename, so the won't render anything.`),S==null?null:f.createElement(Dn.Provider,{value:p},f.createElement(bl.Provider,{children:n,value:S}))}function ny({children:e,location:n}){return fE(Hp(e),n)}function Hp(e,n=[]){let a=[];return f.Children.forEach(e,(o,l)=>{if(!f.isValidElement(o))return;let c=[...n,l];if(o.type===f.Fragment){a.push.apply(a,Hp(o.props.children,c));return}yt(o.type===rn,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),yt(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||c.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=Hp(o.props.children,c)),a.push(d)}),a}var xu="get",vu="application/x-www-form-urlencoded";function Qu(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function kE(e){return Qu(e)&&e.tagName.toLowerCase()==="button"}function TE(e){return Qu(e)&&e.tagName.toLowerCase()==="form"}function RE(e){return Qu(e)&&e.tagName.toLowerCase()==="input"}function AE(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function ME(e,n){return e.button===0&&(!n||n==="_self")&&!AE(e)}function Vp(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,a)=>{let o=e[a];return n.concat(Array.isArray(o)?o.map(l=>[a,l]):[[a,o]])},[]))}function _E(e,n){let a=Vp(e);return n&&n.forEach((o,l)=>{a.has(l)||n.getAll(l).forEach(c=>{a.append(l,c)})}),a}var eu=null;function OE(){if(eu===null)try{new FormData(document.createElement("form"),0),eu=!1}catch{eu=!0}return eu}var DE=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function ip(e){return e!=null&&!DE.has(e)?(Xn(!1,`"${e}" is not a valid \`encType\` for \`\`/\`\` and will default to "${vu}"`),null):e}function LE(e,n){let a,o,l,c,d;if(TE(e)){let m=e.getAttribute("action");o=m?Jr(m,n):null,a=e.getAttribute("method")||xu,l=ip(e.getAttribute("enctype"))||vu,c=new FormData(e)}else if(kE(e)||RE(e)&&(e.type==="submit"||e.type==="image")){let m=e.form;if(m==null)throw new Error('Cannot submit a `,O=>`${A}-${O.id}`)}const E=y`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${w(n.skinTones,(k,T)=>y`
${k}
`,k=>k)}
${w(n.currentEmojisWithCategories,(k,T)=>y`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,N=(k,T)=>{for(const A of e.querySelectorAll(`[${k}]`))T(A,A.getAttribute(k))};if(p){e.appendChild(E);for(const k of["click","focusout","input","keydown","keyup"])N(`data-on-${k}`,(T,A)=>{T.addEventListener(k,o[A])});N("data-ref",(k,T)=>{c[T]=k}),d.addEventListener("abort",()=>{e.removeChild(E)})}N("data-action",(k,T)=>{let A=m.get(T);A||m.set(T,A=new WeakSet),A.has(k)||(A.add(k),l[T](k))})}const Wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function gP(e){let n=!1,a;const o=new Map,l=new Set;let c;const d=()=>{if(n)return;const h=[...l];l.clear();try{for(const b of h)b()}finally{c=!1,l.size&&(c=!0,Wu(d))}},m=new Proxy({},{get(h,b){if(a){let g=o.get(b);g||(g=new Set,o.set(b,g)),g.add(a)}return h[b]},set(h,b,g){if(h[b]!==g){h[b]=g;const y=o.get(b);if(y){for(const w of y)l.add(w);c||(c=!0,Wu(d))}}return!0}}),p=h=>{const b=()=>{const g=a;a=b;try{return h()}finally{a=g}};return b()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function zp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const Pp=[],{assign:mu}=Object;function vP(e,n){const a={},o=new AbortController,l=o.signal,{state:c,createEffect:d}=gP(l),m=new Map;mu(c,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),mu(c,n),mu(c,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Pz,isRtl:!1,currentGroupIndex:0,groups:Mp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{c.currentGroup!==c.groups[c.currentGroupIndex]&&(c.currentGroup=c.groups[c.currentGroupIndex])});const p=Y=>{e.getElementById(Y).focus()},h=Y=>e.getElementById(`emo-${Y.id}`),b=(Y,le)=>{a.rootElement.dispatchEvent(new CustomEvent(Y,{detail:le,bubbles:!0,composed:!0}))},g=(Y,le)=>Y.id===le.id,y=(Y,le)=>{const{category:ye,emojis:Te}=Y,{category:Le,emojis:rt}=le;return ye!==Le?!1:zp(Te,rt,g)},w=Y=>{zp(c.currentEmojis,Y,g)||(c.currentEmojis=Y)},j=Y=>{c.searchMode!==Y&&(c.searchMode=Y)},S=Y=>{zp(c.currentEmojisWithCategories,Y,y)||(c.currentEmojisWithCategories=Y)},E=(Y,le)=>le&&Y.skins&&Y.skins[le]||Y.unicode,T={labelWithSkin:(Y,le)=>eP([Y.name||E(Y,le),Y.annotation,...Y.shortcodes||Pp].filter(Boolean)).join(", "),titleForEmoji:Y=>Y.annotation||(Y.shortcodes||Pp).join(", "),unicodeWithSkin:E},A={onClickSkinToneButton:F,onEmojiClick:D,onNavClick:H,onNavKeydown:Z,onSearchKeydown:I,onSkinToneOptionsClick:V,onSkinToneOptionsFocusOut:be,onSkinToneOptionsKeydown:oe,onSkinToneOptionsKeyup:ae,onSearchInput:ve},O={calculateEmojiGridStyle:B,updateOnIntersection:K};let M=!0;d(()=>{hP(e,c,T,A,O,a,l,m,M),M=!1}),c.emojiVersion||Op().then(Y=>{Y||(c.message=c.i18n.emojiUnsupportedMessage)}),d(()=>{async function Y(){let le=!1;const ye=setTimeout(()=>{le=!0,c.message=c.i18n.loadingMessage},Lz);try{await c.database.ready(),c.databaseLoaded=!0}catch(Te){console.error(Te),c.message=c.i18n.networkErrorMessage}finally{clearTimeout(ye),le&&(le=!1,c.message="")}}c.database&&Y()}),d(()=>{c.pickerStyle=` - --num-groups: ${c.groups.length}; - --indicator-opacity: ${c.searchMode?0:1}; - --num-skintones: ${i0};`}),d(()=>{c.customEmoji&&c.database&&z()}),d(()=>{c.customEmoji&&c.customEmoji.length?c.groups!==Nh&&(c.groups=Nh):c.groups!==Mp&&(c.currentGroupIndex&&c.currentGroupIndex--,c.groups=Mp)}),d(()=>{async function Y(){c.databaseLoaded&&(c.currentSkinTone=await c.database.getPreferredSkinTone())}Y()}),d(()=>{c.skinTones=Array(i0).fill().map((Y,le)=>qz(c.skinToneEmoji,le))}),d(()=>{c.skinToneButtonText=c.skinTones[c.currentSkinTone]}),d(()=>{c.skinToneButtonLabel=c.i18n.skinToneLabel.replace("{skinTone}",c.i18n.skinTones[c.currentSkinTone])}),d(()=>{async function Y(){const{database:le}=c,ye=(await Promise.all(Iz.map(Te=>le.getEmojiByUnicodeOrName(Te)))).filter(Boolean);c.defaultFavoriteEmojis=ye}c.databaseLoaded&&Y()});function z(){const{customEmoji:Y,database:le}=c,ye=Y||Pp;le.customEmoji!==ye&&(le.customEmoji=ye)}d(()=>{async function Y(){z();const{database:le,defaultFavoriteEmojis:ye,numColumns:Te}=c,Le=await le.getTopFavoriteEmoji(Te),rt=await xe(H5([...Le,...ye],ht=>ht.unicode||ht.name).slice(0,Te));c.currentFavorites=rt}c.databaseLoaded&&c.defaultFavoriteEmojis&&Y()});function B(Y){Zz(Y,l,()=>{{const le=getComputedStyle(a.rootElement),ye=parseInt(le.getPropertyValue("--num-columns"),10),Te=le.getPropertyValue("direction")==="rtl";c.numColumns=ye,c.isRtl=Te}})}function K(Y){xP(Y,l,le=>{for(const{target:ye,isIntersecting:Te}of le)ye.classList.toggle("onscreen",Te)})}d(()=>{async function Y(){const{searchText:le,currentGroup:ye,databaseLoaded:Te,customEmoji:Le}=c;if(!Te)c.currentEmojis=[],c.searchMode=!1;else if(le.length>=Oz){const rt=await L(le);c.searchText===le&&(w(rt),j(!0))}else{const{id:rt}=ye;if(rt!==-1||Le&&Le.length){const ht=await se(rt);c.currentGroup.id===rt&&(w(ht),j(!1))}}}Y()});const U=()=>{Nu(()=>tP(a.tabpanelElement))};d(()=>{const{currentEmojis:Y,emojiVersion:le}=c,ye=Y.filter(Te=>Te.unicode).filter(Te=>l0(Te)&&!Eh.has(Te.unicode));if(!le&&ye.length)w(Y),Nu(()=>q(ye));else{const Te=le?Y:Y.filter(ue);w(Te),U()}});function q(Y){Jz(Y,a.baselineEmoji,h)?U():c.currentEmojis=[...c.currentEmojis]}function ue(Y){return!Y.unicode||!l0(Y)||Eh.get(Y.unicode)}async function pe(Y){const le=c.emojiVersion||await Op();return Y.filter(({version:ye})=>!ye||ye<=le)}async function xe(Y){return Kz(Y,c.emojiVersion||await Op())}async function se(Y){const le=Y===-1?c.customEmoji:await c.database.getEmojiByGroup(Y);return xe(await pe(le))}async function L(Y){return xe(await pe(await c.database.getEmojiBySearchQuery(Y)))}d(()=>{}),d(()=>{function Y(){const{searchMode:ye,currentEmojis:Te}=c;if(ye)return[{category:"",emojis:Te}];const Le=new Map;for(const rt of Te){const ht=rt.category||"";let Mt=Le.get(ht);Mt||(Mt=[],Le.set(ht,Mt)),Mt.push(rt)}return[...Le.entries()].map(([rt,ht])=>({category:rt,emojis:ht})).sort((rt,ht)=>c.customCategorySorting(rt.category,ht.category))}const le=Y();S(le)}),d(()=>{c.activeSearchItemId=c.activeSearchItem!==-1&&c.currentEmojis[c.activeSearchItem].id}),d(()=>{const{rawSearchText:Y}=c;B5(()=>{c.searchText=(Y||"").trim(),c.activeSearchItem=-1})});function I(Y){if(!c.searchMode||!c.currentEmojis.length)return;const le=ye=>{yr(Y),c.activeSearchItem=Dp(ye,c.activeSearchItem,c.currentEmojis)};switch(Y.key){case"ArrowDown":return le(!1);case"ArrowUp":return le(!0);case"Enter":if(c.activeSearchItem===-1)c.activeSearchItem=0;else return yr(Y),_(c.currentEmojis[c.activeSearchItem].id)}}function H(Y){const{target:le}=Y,ye=le.closest(".nav-button");if(!ye)return;const Te=parseInt(ye.dataset.groupId,10);a.searchElement.value="",c.rawSearchText="",c.searchText="",c.activeSearchItem=-1,c.currentGroupIndex=c.groups.findIndex(Le=>Le.id===Te)}function Z(Y){const{target:le,key:ye}=Y,Te=Le=>{Le&&(yr(Y),Le.focus())};switch(ye){case"ArrowLeft":return Te(le.previousElementSibling);case"ArrowRight":return Te(le.nextElementSibling);case"Home":return Te(le.parentElement.firstElementChild);case"End":return Te(le.parentElement.lastElementChild)}}async function te(Y){const le=await c.database.getEmojiByUnicodeOrName(Y),ye=[...c.currentEmojis,...c.currentFavorites].find(Le=>Le.id===Y),Te=ye.unicode&&E(ye,c.currentSkinTone);return await c.database.incrementFavoriteEmojiCount(Y),{emoji:le,skinTone:c.currentSkinTone,...Te&&{unicode:Te},...ye.name&&{name:ye.name}}}async function _(Y){const le=te(Y);b("emoji-click-sync",le),b("emoji-click",await le)}function D(Y){const{target:le}=Y;if(!le.classList.contains("emoji"))return;yr(Y);const ye=le.id.substring(4);_(ye)}function G(Y){c.currentSkinTone=Y,c.skinTonePickerExpanded=!1,p("skintone-button"),b("skin-tone-change",{skinTone:Y}),c.database.setPreferredSkinTone(Y)}function V(Y){const{target:{id:le}}=Y,ye=le&&le.match(/^skintone-(\d)/);if(!ye)return;yr(Y);const Te=parseInt(ye[1],10);G(Te)}function F(Y){c.skinTonePickerExpanded=!c.skinTonePickerExpanded,c.activeSkinTone=c.currentSkinTone,c.skinTonePickerExpanded&&(yr(Y),Nu(()=>p("skintone-list")))}d(()=>{c.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{c.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):c.skinTonePickerExpandedAfterAnimation=!1});function oe(Y){if(!c.skinTonePickerExpanded)return;const le=async ye=>{yr(Y),c.activeSkinTone=ye};switch(Y.key){case"ArrowUp":return le(Dp(!0,c.activeSkinTone,c.skinTones));case"ArrowDown":return le(Dp(!1,c.activeSkinTone,c.skinTones));case"Home":return le(0);case"End":return le(c.skinTones.length-1);case"Enter":return yr(Y),G(c.activeSkinTone);case"Escape":return yr(Y),c.skinTonePickerExpanded=!1,p("skintone-button")}}function ae(Y){if(c.skinTonePickerExpanded)switch(Y.key){case" ":return yr(Y),G(c.activeSkinTone)}}async function be(Y){const{relatedTarget:le}=Y;(!le||le.id!=="skintone-list")&&(c.skinTonePickerExpanded=!1)}function ve(Y){c.rawSearchText=Y.target.value}return{$set(Y){mu(c,Y)},$destroy(){o.abort()}}}const bP="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",yP="en";var wP={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},CP=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const V5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],SP=`:host{--emoji-font-family:${U5}}`;class Hg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=CP+SP,this.shadowRoot.appendChild(a),this._ctx={locale:yP,dataSource:bP,skinToneEmoji:zz,customCategorySorting:$z,customEmoji:null,i18n:wP,emojiVersion:null,...n};for(const o of V5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){h0(this),this._cmp||(this._cmp=vP(this.shadowRoot,this._ctx))}disconnectedCallback(){h0(this),Wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,c)=>c.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new _z({locale:n,dataSource:a}))}_dbFlush(){Wu(()=>this._dbCreate())}}const G5={};for(const e of V5)G5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(Hg.prototype,G5);function h0(e){e instanceof Hg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Hg);function jP({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=c=>{var p;const d=c.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),s.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const NP=/^<(a?):([^:>]+):(\d{17,20})>$/;function Eu(e,n,a=!1){return`${a?"`}function F5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(NP);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function W5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function EP(e,n=[]){const a=F5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:Eu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==Eu(o.name,o.id,o.animated))return{kind:"custom",value:Eu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function kP({value:e,guildEmojis:n,size:a="md"}){const o=EP(e,n),l=a==="lg"?"size-10":"size-7",c=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?s.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?s.jsxs("span",{className:"inline-flex items-center gap-3",children:[s.jsx("img",{src:W5(o.id,o.animated),alt:o.name??"custom emoji",className:fe(l,"shrink-0 rounded-md"),loading:"lazy"}),s.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[s.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),s.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):s.jsx("span",{className:fe(c,"leading-none"),title:o.value,children:o.value})}function TP({id:e,label:n,description:a,value:o,onChange:l,readOnly:c}){const[d,m]=f.useState(!1),[p,h]=f.useState("server"),[b,g]=f.useState(null),[y,w]=f.useState(""),[j,S]=f.useState(!1),[E,N]=f.useState(""),k=f.useCallback(async(U=!1)=>{S(!0),w("");try{const q=await Ee.getGuildResources(U);q.data?(g(q.data),Array.isArray(q.data.emojis)||w("Server response is missing emojis. Restart the bot after updating.")):w("No guild data returned.")}catch(q){w(q instanceof Error?q.message:"Could not load server emojis")}finally{S(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const T=f.useMemo(()=>Array.isArray(b==null?void 0:b.emojis)?b.emojis:[],[b]),A=f.useMemo(()=>{const U=E.trim().toLowerCase();return U?T.filter(q=>q.name.toLowerCase().includes(U)):T},[T,E]),O=String(o??""),M=F5(O);function z(U){l(U),m(!1)}function B(U){l(Eu(U.name,U.id,U.animated)),m(!1)}function K(){l("")}return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:e,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,s.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx(kP,{value:o,guildEmojis:T,size:"lg"})}),s.jsxs("div",{className:"flex shrink-0 gap-2",children:[s.jsx(he,{type:"button",variant:"secondary",size:"sm",disabled:c,onClick:()=>m(!0),children:"Choose emoji"}),O?s.jsx(he,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:K,children:"Clear"}):null]})]}),s.jsx(zl,{open:d,onOpenChange:m,children:s.jsxs(qs,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[s.jsxs(Ks,{className:"space-y-1 border-b border-border px-5 py-4",children:[s.jsx(Xs,{children:"Choose emoji"}),s.jsxs(Zs,{children:["Server emojis save as"," ",s.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),s.jsxs(N5,{value:p,onValueChange:U=>h(U),className:"flex min-h-0 flex-1 flex-col",children:[s.jsxs(zg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[s.jsx(xo,{value:"server",children:"Server"}),s.jsx(xo,{value:"unicode",children:"All emojis"})]}),s.jsxs(wh,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[s.jsxs("div",{className:"relative mb-3",children:[s.jsx(ge,{icon:ad,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Search by name…",value:E,onChange:U=>N(U.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),b?s.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[b.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,s.jsx($l,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?s.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((U,q)=>s.jsx(Be,{className:"aspect-square rounded-lg"},q))}):y?s.jsxs("div",{className:"space-y-3 p-4 text-center",children:[s.jsx("p",{className:"text-sm text-destructive",children:y}),s.jsx(he,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):A.length===0?s.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):s.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:A.map(U=>{const q=M.kind==="custom"&&M.id===U.id;return s.jsx("button",{type:"button",title:`:${U.name}:`,className:fe("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>B(U),children:s.jsx("img",{src:U.url??W5(U.id,U.animated),alt:U.name,className:"size-8 object-contain",loading:"lazy"})},U.id)})})})]}),s.jsx(wh,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:s.jsx(jP,{onPick:z})})]})]})}),s.jsx(Ie,{value:O,disabled:c,onChange:U=>l(U.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const g0="BOT_TOKEN",RP="MODEL_API_KEY";function Vg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return s.jsx(_L,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return s.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[s.jsxs("div",{children:[s.jsx(ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),s.jsx(At,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(RL,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),s.jsxs(No,{value:String(n??""),disabled:o,onValueChange:a,children:[s.jsx(Ba,{id:l,className:"border-border bg-secondary/30",children:s.jsx(Eo,{placeholder:"Select…"})}),s.jsx(Ua,{children:e.options.map(d=>s.jsx(an,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=jr(String(n??"#000000"));return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Id,{value:d,onChange:a}),s.jsx(Ie,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(jr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return s.jsx(TP,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return s.jsx(OL,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===g0||n===RP||!n?"":"••••••••••••";return s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(Ie,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(e.placeholder??g0))},className:"border-border bg-secondary/30"})]})}const c="border-border bg-secondary/30";return e.type==="textarea"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),s.jsx(Ld,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${c}`})]}):s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:l,children:e.label}),e.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,s.jsx(Ie,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:c})]})}const Xe=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));Xe.displayName="Card";const it=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("flex flex-col space-y-1.5 p-6",e),...n}));it.displayName="CardHeader";const lt=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("font-semibold leading-none tracking-tight",e),...n}));lt.displayName="CardTitle";const Et=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("text-sm text-muted-foreground",e),...n}));Et.displayName="CardDescription";const Ze=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("p-6 pt-0",e),...n}));Ze.displayName="CardContent";const Gg=f.forwardRef(({className:e,...n},a)=>s.jsx("div",{ref:a,className:fe("flex items-center p-6 pt-0",e),...n}));Gg.displayName="CardFooter";function x0(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function AP(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Fg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const c=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:c,label:x0(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...Fg(l,c));continue}a.push({path:c,label:x0(o),type:AP(o,l)})}return a}function MP(e){const n=Fg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function To(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function xl(e,n,a){const o=n.split("."),l=structuredClone(e);let c=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const OP=e=>{switch(e){case"success":return zP;case"info":return IP;case"warning":return PP;case"error":return $P;default:return null}},DP=Array(12).fill(0),LP=({visible:e,className:n})=>me.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},me.createElement("div",{className:"sonner-spinner"},DP.map((a,o)=>me.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),zP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),PP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),IP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),$P=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},me.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),BP=me.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},me.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),me.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),UP=()=>{const[e,n]=me.useState(document.hidden);return me.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let kh=1;class HP{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,c=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:kh++,d=this.toasts.find(p=>p.id===c),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),d?this.toasts=this.toasts.map(p=>p.id===c?(this.publish({...p,...n,id:c,title:o}),{...p,...n,id:c,dismissible:m,title:o}):p):this.addToast({title:o,...l,dismissible:m,id:c}),c},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let c=o!==void 0,d;const m=l.then(async h=>{if(d=["resolve",h],me.isValidElement(h))c=!1,this.create({id:o,type:"default",message:h});else if(GP(h)&&!h.ok){c=!1;const g=typeof a.error=="function"?await a.error(`HTTP error! status: ${h.status}`):a.error,y=typeof a.description=="function"?await a.description(`HTTP error! status: ${h.status}`):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"error",description:y,...j})}else if(h instanceof Error){c=!1;const g=typeof a.error=="function"?await a.error(h):a.error,y=typeof a.description=="function"?await a.description(h):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"error",description:y,...j})}else if(a.success!==void 0){c=!1;const g=typeof a.success=="function"?await a.success(h):a.success,y=typeof a.description=="function"?await a.description(h):a.description,j=typeof g=="object"&&!me.isValidElement(g)?g:{message:g};this.create({id:o,type:"success",description:y,...j})}}).catch(async h=>{if(d=["reject",h],a.error!==void 0){c=!1;const b=typeof a.error=="function"?await a.error(h):a.error,g=typeof a.description=="function"?await a.description(h):a.description,w=typeof b=="object"&&!me.isValidElement(b)?b:{message:b};this.create({id:o,type:"error",description:g,...w})}}).finally(()=>{c&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),p=()=>new Promise((h,b)=>m.then(()=>d[0]==="reject"?b(d[1]):h(d[1])).catch(b));return typeof o!="string"&&typeof o!="number"?{unwrap:p}:Object.assign(o,{unwrap:p})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||kh++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const wn=new HP,VP=(e,n)=>{const a=(n==null?void 0:n.id)||kh++;return wn.addToast({title:e,...n,id:a}),a},GP=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",FP=VP,WP=()=>wn.toasts,YP=()=>wn.getActiveToasts(),Bt=Object.assign(FP,{success:wn.success,info:wn.info,warning:wn.warning,error:wn.error,custom:wn.custom,message:wn.message,promise:wn.promise,dismiss:wn.dismiss,loading:wn.loading},{getHistory:WP,getToasts:YP});_P("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function pu(e){return e.label!==void 0}const qP=3,KP="24px",XP="16px",v0=4e3,ZP=356,QP=14,JP=45,eI=200;function wr(...e){return e.filter(Boolean).join(" ")}function tI(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const nI=e=>{var n,a,o,l,c,d,m,p,h;const{invert:b,toast:g,unstyled:y,interacting:w,setHeights:j,visibleToasts:S,heights:E,index:N,toasts:k,expanded:T,removeToast:A,defaultRichColors:O,closeButton:M,style:z,cancelButtonStyle:B,actionButtonStyle:K,className:U="",descriptionClassName:q="",duration:ue,position:pe,gap:xe,expandByDefault:se,classNames:L,icons:I,closeButtonAriaLabel:H="Close toast"}=e,[Z,te]=me.useState(null),[_,D]=me.useState(null),[G,V]=me.useState(!1),[F,oe]=me.useState(!1),[ae,be]=me.useState(!1),[ve,Y]=me.useState(!1),[le,ye]=me.useState(!1),[Te,Le]=me.useState(0),[rt,ht]=me.useState(0),Mt=me.useRef(g.duration||ue||v0),Tr=me.useRef(null),_t=me.useRef(null),Ya=N===0,qa=N+1<=S,qt=g.type,dr=g.dismissible!==!1,Kt=g.className||"",ti=g.descriptionClassName||"",fr=me.useMemo(()=>E.findIndex(Me=>Me.toastId===g.id)||0,[E,g.id]),Lo=me.useMemo(()=>{var Me;return(Me=g.closeButton)!=null?Me:M},[g.closeButton,M]),Rr=me.useMemo(()=>g.duration||ue||v0,[g.duration,ue]),Xt=me.useRef(0),Qn=me.useRef(0),zo=me.useRef(0),mr=me.useRef(null),[pr,Ht]=pe.split("-"),ee=me.useMemo(()=>E.reduce((Me,Je,St)=>St>=fr?Me:Me+Je.height,0),[E,fr]),re=UP(),ke=g.invert||b,we=qt==="loading";Qn.current=me.useMemo(()=>fr*xe+ee,[fr,ee]),me.useEffect(()=>{Mt.current=Rr},[Rr]),me.useEffect(()=>{V(!0)},[]),me.useEffect(()=>{const Me=_t.current;if(Me){const Je=Me.getBoundingClientRect().height;return ht(Je),j(St=>[{toastId:g.id,height:Je,position:g.position},...St]),()=>j(St=>St.filter(kt=>kt.toastId!==g.id))}},[j,g.id]),me.useLayoutEffect(()=>{if(!G)return;const Me=_t.current,Je=Me.style.height;Me.style.height="auto";const St=Me.getBoundingClientRect().height;Me.style.height=Je,ht(St),j(kt=>kt.find(wt=>wt.toastId===g.id)?kt.map(wt=>wt.toastId===g.id?{...wt,height:St}:wt):[{toastId:g.id,height:St,position:g.position},...kt])},[G,g.title,g.description,j,g.id,g.jsx,g.action,g.cancel]);const De=me.useCallback(()=>{oe(!0),Le(Qn.current),j(Me=>Me.filter(Je=>Je.toastId!==g.id)),setTimeout(()=>{A(g)},eI)},[g,A,j,Qn]);me.useEffect(()=>{if(g.promise&&qt==="loading"||g.duration===1/0||g.type==="loading")return;let Me;return T||w||re?(()=>{if(zo.current{Mt.current!==1/0&&(Xt.current=new Date().getTime(),Me=setTimeout(()=>{g.onAutoClose==null||g.onAutoClose.call(g,g),De()},Mt.current))})(),()=>clearTimeout(Me)},[T,w,g,qt,re,De]),me.useEffect(()=>{g.delete&&(De(),g.onDismiss==null||g.onDismiss.call(g,g))},[De,g.delete]);function at(){var Me;if(I!=null&&I.loading){var Je;return me.createElement("div",{className:wr(L==null?void 0:L.loader,g==null||(Je=g.classNames)==null?void 0:Je.loader,"sonner-loader"),"data-visible":qt==="loading"},I.loading)}return me.createElement(LP,{className:wr(L==null?void 0:L.loader,g==null||(Me=g.classNames)==null?void 0:Me.loader),visible:qt==="loading"})}const ct=g.icon||(I==null?void 0:I[qt])||OP(qt);var mt,Zt;return me.createElement("li",{tabIndex:0,ref:_t,className:wr(U,Kt,L==null?void 0:L.toast,g==null||(n=g.classNames)==null?void 0:n.toast,L==null?void 0:L.default,L==null?void 0:L[qt],g==null||(a=g.classNames)==null?void 0:a[qt]),"data-sonner-toast":"","data-rich-colors":(mt=g.richColors)!=null?mt:O,"data-styled":!(g.jsx||g.unstyled||y),"data-mounted":G,"data-promise":!!g.promise,"data-swiped":le,"data-removed":F,"data-visible":qa,"data-y-position":pr,"data-x-position":Ht,"data-index":N,"data-front":Ya,"data-swiping":ae,"data-dismissible":dr,"data-type":qt,"data-invert":ke,"data-swipe-out":ve,"data-swipe-direction":_,"data-expanded":!!(T||se&&G),"data-testid":g.testId,style:{"--index":N,"--toasts-before":N,"--z-index":k.length-N,"--offset":`${F?Te:Qn.current}px`,"--initial-height":se?"auto":`${rt}px`,...z,...g.style},onDragEnd:()=>{be(!1),te(null),mr.current=null},onPointerDown:Me=>{Me.button!==2&&(we||!dr||(Tr.current=new Date,Le(Qn.current),Me.target.setPointerCapture(Me.pointerId),Me.target.tagName!=="BUTTON"&&(be(!0),mr.current={x:Me.clientX,y:Me.clientY})))},onPointerUp:()=>{var Me,Je,St;if(ve||!dr)return;mr.current=null;const kt=Number(((Me=_t.current)==null?void 0:Me.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Jn=Number(((Je=_t.current)==null?void 0:Je.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),wt=new Date().getTime()-((St=Tr.current)==null?void 0:St.getTime()),dn=Z==="x"?kt:Jn,Ka=Math.abs(dn)/wt;if(Math.abs(dn)>=JP||Ka>.11){Le(Qn.current),g.onDismiss==null||g.onDismiss.call(g,g),D(Z==="x"?kt>0?"right":"left":Jn>0?"down":"up"),De(),Y(!0);return}else{var fn,mn;(fn=_t.current)==null||fn.style.setProperty("--swipe-amount-x","0px"),(mn=_t.current)==null||mn.style.setProperty("--swipe-amount-y","0px")}ye(!1),be(!1),te(null)},onPointerMove:Me=>{var Je,St,kt;if(!mr.current||!dr||((Je=window.getSelection())==null?void 0:Je.toString().length)>0)return;const wt=Me.clientY-mr.current.y,dn=Me.clientX-mr.current.x;var Ka;const fn=(Ka=e.swipeDirections)!=null?Ka:tI(pe);!Z&&(Math.abs(dn)>1||Math.abs(wt)>1)&&te(Math.abs(dn)>Math.abs(wt)?"x":"y");let mn={x:0,y:0};const Po=er=>1/(1.5+Math.abs(er)/20);if(Z==="y"){if(fn.includes("top")||fn.includes("bottom"))if(fn.includes("top")&&wt<0||fn.includes("bottom")&&wt>0)mn.y=wt;else{const er=wt*Po(wt);mn.y=Math.abs(er)0)mn.x=dn;else{const er=dn*Po(dn);mn.x=Math.abs(er)0||Math.abs(mn.y)>0)&&ye(!0),(St=_t.current)==null||St.style.setProperty("--swipe-amount-x",`${mn.x}px`),(kt=_t.current)==null||kt.style.setProperty("--swipe-amount-y",`${mn.y}px`)}},Lo&&!g.jsx&&qt!=="loading"?me.createElement("button",{"aria-label":H,"data-disabled":we,"data-close-button":!0,onClick:we||!dr?()=>{}:()=>{De(),g.onDismiss==null||g.onDismiss.call(g,g)},className:wr(L==null?void 0:L.closeButton,g==null||(o=g.classNames)==null?void 0:o.closeButton)},(Zt=I==null?void 0:I.close)!=null?Zt:BP):null,(qt||g.icon||g.promise)&&g.icon!==null&&((I==null?void 0:I[qt])!==null||g.icon)?me.createElement("div",{"data-icon":"",className:wr(L==null?void 0:L.icon,g==null||(l=g.classNames)==null?void 0:l.icon)},g.promise||g.type==="loading"&&!g.icon?g.icon||at():null,g.type!=="loading"?ct:null):null,me.createElement("div",{"data-content":"",className:wr(L==null?void 0:L.content,g==null||(c=g.classNames)==null?void 0:c.content)},me.createElement("div",{"data-title":"",className:wr(L==null?void 0:L.title,g==null||(d=g.classNames)==null?void 0:d.title)},g.jsx?g.jsx:typeof g.title=="function"?g.title():g.title),g.description?me.createElement("div",{"data-description":"",className:wr(q,ti,L==null?void 0:L.description,g==null||(m=g.classNames)==null?void 0:m.description)},typeof g.description=="function"?g.description():g.description):null),me.isValidElement(g.cancel)?g.cancel:g.cancel&&pu(g.cancel)?me.createElement("button",{"data-button":!0,"data-cancel":!0,style:g.cancelButtonStyle||B,onClick:Me=>{pu(g.cancel)&&dr&&(g.cancel.onClick==null||g.cancel.onClick.call(g.cancel,Me),De())},className:wr(L==null?void 0:L.cancelButton,g==null||(p=g.classNames)==null?void 0:p.cancelButton)},g.cancel.label):null,me.isValidElement(g.action)?g.action:g.action&&pu(g.action)?me.createElement("button",{"data-button":!0,"data-action":!0,style:g.actionButtonStyle||K,onClick:Me=>{pu(g.action)&&(g.action.onClick==null||g.action.onClick.call(g.action,Me),!Me.defaultPrevented&&De())},className:wr(L==null?void 0:L.actionButton,g==null||(h=g.classNames)==null?void 0:h.actionButton)},g.action.label):null)};function b0(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function rI(e,n){const a={};return[e,n].forEach((o,l)=>{const c=l===1,d=c?"--mobile-offset":"--offset",m=c?XP:KP;function p(h){["top","right","bottom","left"].forEach(b=>{a[`${d}-${b}`]=typeof h=="number"?`${h}px`:h})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(h=>{o[h]===void 0?a[`${d}-${h}`]=m:a[`${d}-${h}`]=typeof o[h]=="number"?`${o[h]}px`:o[h]}):p(m)}),a}const aI=me.forwardRef(function(n,a){const{id:o,invert:l,position:c="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:p,className:h,offset:b,mobileOffset:g,theme:y="light",richColors:w,duration:j,style:S,visibleToasts:E=qP,toastOptions:N,dir:k=b0(),gap:T=QP,icons:A,containerAriaLabel:O="Notifications"}=n,[M,z]=me.useState([]),B=me.useMemo(()=>o?M.filter(G=>G.toasterId===o):M.filter(G=>!G.toasterId),[M,o]),K=me.useMemo(()=>Array.from(new Set([c].concat(B.filter(G=>G.position).map(G=>G.position)))),[B,c]),[U,q]=me.useState([]),[ue,pe]=me.useState(!1),[xe,se]=me.useState(!1),[L,I]=me.useState(y!=="system"?y:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=me.useRef(null),Z=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),te=me.useRef(null),_=me.useRef(!1),D=me.useCallback(G=>{z(V=>{var F;return(F=V.find(oe=>oe.id===G.id))!=null&&F.delete||wn.dismiss(G.id),V.filter(({id:oe})=>oe!==G.id)})},[]);return me.useEffect(()=>wn.subscribe(G=>{if(G.dismiss){requestAnimationFrame(()=>{z(V=>V.map(F=>F.id===G.id?{...F,delete:!0}:F))});return}setTimeout(()=>{X0.flushSync(()=>{z(V=>{const F=V.findIndex(oe=>oe.id===G.id);return F!==-1?[...V.slice(0,F),{...V[F],...G},...V.slice(F+1)]:[G,...V]})})})}),[M]),me.useEffect(()=>{if(y!=="system"){I(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?I("dark"):I("light")),typeof window>"u")return;const G=window.matchMedia("(prefers-color-scheme: dark)");try{G.addEventListener("change",({matches:V})=>{I(V?"dark":"light")})}catch{G.addListener(({matches:F})=>{try{I(F?"dark":"light")}catch(oe){console.error(oe)}})}},[y]),me.useEffect(()=>{M.length<=1&&pe(!1)},[M]),me.useEffect(()=>{const G=V=>{var F;if(d.every(be=>V[be]||V.code===be)){var ae;pe(!0),(ae=H.current)==null||ae.focus()}V.code==="Escape"&&(document.activeElement===H.current||(F=H.current)!=null&&F.contains(document.activeElement))&&pe(!1)};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[d]),me.useEffect(()=>{if(H.current)return()=>{te.current&&(te.current.focus({preventScroll:!0}),te.current=null,_.current=!1)}},[H.current]),me.createElement("section",{ref:a,"aria-label":`${O} ${Z}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},K.map((G,V)=>{var F;const[oe,ae]=G.split("-");return B.length?me.createElement("ol",{key:G,dir:k==="auto"?b0():k,tabIndex:-1,ref:H,className:h,"data-sonner-toaster":!0,"data-sonner-theme":L,"data-y-position":oe,"data-x-position":ae,style:{"--front-toast-height":`${((F=U[0])==null?void 0:F.height)||0}px`,"--width":`${ZP}px`,"--gap":`${T}px`,...S,...rI(b,g)},onBlur:be=>{_.current&&!be.currentTarget.contains(be.relatedTarget)&&(_.current=!1,te.current&&(te.current.focus({preventScroll:!0}),te.current=null))},onFocus:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||_.current||(_.current=!0,te.current=be.relatedTarget)},onMouseEnter:()=>pe(!0),onMouseMove:()=>pe(!0),onMouseLeave:()=>{xe||pe(!1)},onDragEnd:()=>pe(!1),onPointerDown:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||se(!0)},onPointerUp:()=>se(!1)},B.filter(be=>!be.position&&V===0||be.position===G).map((be,ve)=>{var Y,le;return me.createElement(nI,{key:be.id,icons:A,index:ve,toast:be,defaultRichColors:w,duration:(Y=N==null?void 0:N.duration)!=null?Y:j,className:N==null?void 0:N.className,descriptionClassName:N==null?void 0:N.descriptionClassName,invert:l,visibleToasts:E,closeButton:(le=N==null?void 0:N.closeButton)!=null?le:p,interacting:xe,position:G,style:N==null?void 0:N.style,unstyled:N==null?void 0:N.unstyled,classNames:N==null?void 0:N.classNames,cancelButtonStyle:N==null?void 0:N.cancelButtonStyle,actionButtonStyle:N==null?void 0:N.actionButtonStyle,closeButtonAriaLabel:N==null?void 0:N.closeButtonAriaLabel,removeToast:D,toasts:B.filter(ye=>ye.position==be.position),heights:U.filter(ye=>ye.position==be.position),setHeights:q,expandByDefault:m,gap:T,expanded:ue,swipeDirections:n.swipeDirections})})):null}))});async function ku(e){const n=Bt.loading("Saving changes…");try{const a=await e();if(Bt.success("Changes saved",{id:n}),a.botRestart){const o=Bt.loading("Restarting bot…");a.botRestart.success?Bt.success("Bot started",{id:o}):Bt.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Bt.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function oI({filename:e}){const{canEditConfig:n}=Ut(),a=!n("supportbot"),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),S=f.useCallback(async()=>{p(!0),y(""),j("");try{const O=(await Ee.getAddonConfigJson(e)).data??{};l(O),d(structuredClone(O))}catch(A){y(A instanceof Error?A.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{S()},[S]);const E=o?MP(o):null;function N(A,O){l(M=>M&&xl(M,A,O))}async function k(){if(!(a||!o)){b(!0),y(""),j("");try{const A=await ku(()=>Ee.saveAddonConfig(e,o));j(A.message||"Saved."),await S()}catch(A){y(A instanceof Error?A.message:"Save failed")}finally{b(!1)}}}if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o||!E)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load"})});const T=c&&JSON.stringify(o)!==JSON.stringify(c);return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(he,{variant:"outline",size:"sm",onClick:S,disabled:m||h,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:k,disabled:h||!T,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]}),g?s.jsxs(We,{variant:"destructive",children:[s.jsx(ge,{icon:Bh,size:18}),s.jsx(Ye,{children:g})]}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,E.map(A=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:A.title}),A.description?s.jsx(Et,{children:A.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:A.fields.map(O=>s.jsx("div",{className:O.type==="textarea"||O.type==="stringList"?"sm:col-span-2":"",children:s.jsx(Vg,{field:O,value:To(o,O.path),readOnly:a,onChange:M=>N(O.path,M)})},O.path))})]},A.title))]})}function sI(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function iI(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=Fg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",p=l.get(m)??[];p.push(d),l.set(m,p)}const c=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:sI(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((p,h)=>p.path.localeCompare(h.path))}));return[...e,...c]}function y0(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,o=Array(n);a=e.length?e.apply(this,l):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};hu.initial(e),hu.handler(n);var a={current:e},o=Ji(MI)(a,n),l=Ji(AI)(a),c=Ji(hu.changes)(e),d=Ji(RI)(a);function m(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(b){return b};return hu.selector(h),h(a.current)}function p(h){bI(o,l,c,d)(h)}return[m,p]}function RI(e,n){return vl(n)?n(e.current):n}function AI(e,n){return e.current=j0(j0({},e.current),n),n}function MI(e,n,a){return vl(n)?n(e.current):Object.keys(a).forEach(function(o){var l;return(l=n[o])===null||l===void 0?void 0:l.call(n,e.current[o])}),a}var _I={create:TI},OI={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function DI(e){return function n(){for(var a=this,o=arguments.length,l=new Array(o),c=0;c=e.length?e.apply(this,l):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:e,n)}var Mn=s$;function al(){}function Rs(e,n,a,o){return i$(e,o)||l$(e,n,a,o)}function i$(e,n){return e.editor.getModel(eN(e,n))}function l$(e,n,a,o){return e.editor.createModel(n,a,o?eN(e,o):void 0)}function eN(e,n){return e.Uri.parse(n)}function c$({original:e,modified:n,language:a,originalLanguage:o,modifiedLanguage:l,originalModelPath:c,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:h="light",loading:b="Loading...",options:g={},height:y="100%",width:w="100%",className:j,wrapperProps:S={},beforeMount:E=al,onMount:N=al}){let[k,T]=f.useState(!1),[A,O]=f.useState(!0),M=f.useRef(null),z=f.useRef(null),B=f.useRef(null),K=f.useRef(N),U=f.useRef(E),q=f.useRef(!1);J5(()=>{let se=Z5.init();return se.then(L=>(z.current=L)&&O(!1)).catch(L=>(L==null?void 0:L.type)!=="cancelation"&&console.error("Monaco initialization: error:",L)),()=>M.current?xe():se.cancel()}),Mn(()=>{if(M.current&&z.current){let se=M.current.getOriginalEditor(),L=Rs(z.current,e||"",o||a||"text",c||"");L!==se.getModel()&&se.setModel(L)}},[c],k),Mn(()=>{if(M.current&&z.current){let se=M.current.getModifiedEditor(),L=Rs(z.current,n||"",l||a||"text",d||"");L!==se.getModel()&&se.setModel(L)}},[d],k),Mn(()=>{let se=M.current.getModifiedEditor();se.getOption(z.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],k),Mn(()=>{var se,L;(L=(se=M.current)==null?void 0:se.getModel())==null||L.original.setValue(e||"")},[e],k),Mn(()=>{let{original:se,modified:L}=M.current.getModel();z.current.editor.setModelLanguage(se,o||a||"text"),z.current.editor.setModelLanguage(L,l||a||"text")},[a,o,l],k),Mn(()=>{var se;(se=z.current)==null||se.editor.setTheme(h)},[h],k),Mn(()=>{var se;(se=M.current)==null||se.updateOptions(g)},[g],k);let ue=f.useCallback(()=>{var I;if(!z.current)return;U.current(z.current);let se=Rs(z.current,e||"",o||a||"text",c||""),L=Rs(z.current,n||"",l||a||"text",d||"");(I=M.current)==null||I.setModel({original:se,modified:L})},[a,n,l,e,o,c,d]),pe=f.useCallback(()=>{var se;!q.current&&B.current&&(M.current=z.current.editor.createDiffEditor(B.current,{automaticLayout:!0,...g}),ue(),(se=z.current)==null||se.editor.setTheme(h),T(!0),q.current=!0)},[g,h,ue]);f.useEffect(()=>{k&&K.current(M.current,z.current)},[k]),f.useEffect(()=>{!A&&!k&&pe()},[A,k,pe]);function xe(){var L,I,H,Z;let se=(L=M.current)==null?void 0:L.getModel();m||((I=se==null?void 0:se.original)==null||I.dispose()),p||((H=se==null?void 0:se.modified)==null||H.dispose()),(Z=M.current)==null||Z.dispose()}return me.createElement(Q5,{width:w,height:y,isEditorReady:k,loading:b,_ref:B,className:j,wrapperProps:S})}var u$=c$;f.memo(u$);function d$(e){let n=f.useRef();return f.useEffect(()=>{n.current=e},[e]),n.current}var f$=d$,gu=new Map;function m$({defaultValue:e,defaultLanguage:n,defaultPath:a,value:o,language:l,path:c,theme:d="light",line:m,loading:p="Loading...",options:h={},overrideServices:b={},saveViewState:g=!0,keepCurrentModel:y=!1,width:w="100%",height:j="100%",className:S,wrapperProps:E={},beforeMount:N=al,onMount:k=al,onChange:T,onValidate:A=al}){let[O,M]=f.useState(!1),[z,B]=f.useState(!0),K=f.useRef(null),U=f.useRef(null),q=f.useRef(null),ue=f.useRef(k),pe=f.useRef(N),xe=f.useRef(),se=f.useRef(o),L=f$(c),I=f.useRef(!1),H=f.useRef(!1);J5(()=>{let _=Z5.init();return _.then(D=>(K.current=D)&&B(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>U.current?te():_.cancel()}),Mn(()=>{var D,G,V,F;let _=Rs(K.current,e||o||"",n||l||"",c||a||"");_!==((D=U.current)==null?void 0:D.getModel())&&(g&&gu.set(L,(G=U.current)==null?void 0:G.saveViewState()),(V=U.current)==null||V.setModel(_),g&&((F=U.current)==null||F.restoreViewState(gu.get(c))))},[c],O),Mn(()=>{var _;(_=U.current)==null||_.updateOptions(h)},[h],O),Mn(()=>{!U.current||o===void 0||(U.current.getOption(K.current.editor.EditorOption.readOnly)?U.current.setValue(o):o!==U.current.getValue()&&(H.current=!0,U.current.executeEdits("",[{range:U.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),U.current.pushUndoStop(),H.current=!1))},[o],O),Mn(()=>{var D,G;let _=(D=U.current)==null?void 0:D.getModel();_&&l&&((G=K.current)==null||G.editor.setModelLanguage(_,l))},[l],O),Mn(()=>{var _;m!==void 0&&((_=U.current)==null||_.revealLine(m))},[m],O),Mn(()=>{var _;(_=K.current)==null||_.editor.setTheme(d)},[d],O);let Z=f.useCallback(()=>{var _;if(!(!q.current||!K.current)&&!I.current){pe.current(K.current);let D=c||a,G=Rs(K.current,o||e||"",n||l||"",D||"");U.current=(_=K.current)==null?void 0:_.editor.create(q.current,{model:G,automaticLayout:!0,...h},b),g&&U.current.restoreViewState(gu.get(D)),K.current.editor.setTheme(d),m!==void 0&&U.current.revealLine(m),M(!0),I.current=!0}},[e,n,a,o,l,c,h,b,g,d,m]);f.useEffect(()=>{O&&ue.current(U.current,K.current)},[O]),f.useEffect(()=>{!z&&!O&&Z()},[z,O,Z]),se.current=o,f.useEffect(()=>{var _,D;O&&T&&((_=xe.current)==null||_.dispose(),xe.current=(D=U.current)==null?void 0:D.onDidChangeModelContent(G=>{H.current||T(U.current.getValue(),G)}))},[O,T]),f.useEffect(()=>{if(O){let _=K.current.editor.onDidChangeMarkers(D=>{var V;let G=(V=U.current.getModel())==null?void 0:V.uri;if(G&&D.find(F=>F.path===G.path)){let F=K.current.editor.getModelMarkers({resource:G});A==null||A(F)}});return()=>{_==null||_.dispose()}}return()=>{}},[O,A]);function te(){var _,D;(_=xe.current)==null||_.dispose(),y?g&&gu.set(c,U.current.saveViewState()):(D=U.current.getModel())==null||D.dispose(),U.current.dispose()}return me.createElement(Q5,{width:w,height:j,isEditorReady:O,loading:p,_ref:q,className:S,wrapperProps:E})}var p$=m$,h$=f.memo(p$),g$=h$;function x$(e){return e!==null&&typeof e=="object"&&"Command"in e}function v$(e){return Object.entries(e).filter(([,n])=>x$(n)).map(([n,a])=>({key:n,...a}))}function b$({data:e,onChange:n}){const a=v$(e);function o(l,c){const d=e[l];n({...e,[l]:{...d,...c}})}return a.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(ge,{icon:Da,size:18})}),s.jsx(lt,{className:"text-base",children:l.key})]}),s.jsxs(Ze,{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),s.jsx(At,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:c=>o(l.key,{Enabled:c})})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(ze,{children:"Slash command"}),s.jsx(Ie,{value:l.Command??"",onChange:c=>o(l.key,{Command:c.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(ze,{children:"Description"}),s.jsx(Ie,{value:l.Description??"",onChange:c=>o(l.key,{Description:c.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function y$(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=To(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=To(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function w$(e,n,a,o){const l={};for(const c of n)for(const d of c.fields){const m=To(a,d.path),p=To(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(l[`${e}:${d.path}`]=m)}return l}function C$({configFile:e}){const{canEditConfig:n}=Ut(),a=!n(e),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState("visual"),[N,k]=f.useState(""),[T,A]=f.useState(""),[O]=Ju(),[M,z]=f.useState(()=>O.get("tab")||null),B=D_(e),K=f.useMemo(()=>!B||B==="commands"||!o?B:iI(B,o),[B,o]);f.useEffect(()=>{var I;if(K&&K!=="commands"){const H=O.get("tab");if(H&&K.find(Z=>Z.title.toLowerCase()===H.toLowerCase())){const Z=K.find(te=>te.title.toLowerCase()===H.toLowerCase());Z&&Z.title!==M&&z(Z.title)}else(!M||!K.find(Z=>Z.title===M))&&z(((I=K[0])==null?void 0:I.title)||null)}},[K,M,O]);const U=f.useCallback(async()=>{p(!0),y(""),j("");try{const H=(await Ee.getConfigJson(e)).data??{},Z=y$(e,H);l(Z),d(Z);const _=(await Ee.getConfigRaw(e)).data??"",D=E8(_,e);k(D),A(D)}catch(I){y(I instanceof Error?I.message:"Failed to load config")}finally{p(!1)}},[e]);f.useEffect(()=>{U()},[U]);function q(I,H){l(Z=>Z&&xl(Z,I,H))}async function ue(){if(!(a||N===T)){b(!0),y(""),j("");try{const I=await ku(()=>Ee.saveConfigRaw(e,N));j(I.message||"Config saved."),await U()}catch(I){y(I instanceof Error?I.message:"Save failed")}finally{b(!1)}}}async function pe(){if(!(a||!o||!c)){if(S==="yaml"){await ue();return}b(!0),y(""),j("");try{if(B==="commands"){const I={};for(const Z of Object.keys(o))JSON.stringify(o[Z])!==JSON.stringify(c[Z])&&(I[`${e}:${Z}`]=o[Z]);if(Object.keys(I).length===0){j("No changes to save.");return}const H=await ku(()=>Ee.updateConfigFields(I));j(H.message||"")}else if(K&&K!=="commands"){const I=w$(e,K,o,c);if(Object.keys(I).length===0){j("No changes to save.");return}const H=await ku(()=>Ee.updateConfigFields(I));j(H.message||"")}await U()}catch(I){y(I instanceof Error?I.message:"Save failed")}finally{b(!1)}}}if(B===null)return s.jsx(We,{children:s.jsx(Ye,{children:"No visual editor available for this file."})});if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load"})});const xe=c&&JSON.stringify(o)!==JSON.stringify(c),L=S==="yaml"?N!==T:xe;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(he,{type:"button",variant:S==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>E("visual"),children:"Visual"}),s.jsx(he,{type:"button",variant:S==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>E("yaml"),children:"YAML"})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[L?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(he,{variant:"outline",size:"sm",onClick:U,disabled:m||h,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:pe,disabled:h||!L,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save"]})]})]}),g?s.jsxs(We,{variant:"destructive",children:[s.jsx(ge,{icon:Bh,size:18}),s.jsx(Ye,{children:g})]}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,S==="yaml"?s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:"Raw YAML"}),s.jsx(Et,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),s.jsx(Ze,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:s.jsx(g$,{height:"100%",language:"yaml",theme:"vs-dark",value:N,onChange:I=>k(I||""),options:{readOnly:a,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):B==="commands"?s.jsx(b$,{data:o,onChange:I=>l(I)}):K&&K!=="commands"?s.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[s.jsx("nav",{className:"flex flex-col gap-1",children:K.map(I=>s.jsx("button",{onClick:()=>z(I.title),className:fe("text-left px-3 py-2 text-sm rounded-md transition-colors",M===I.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:I.title},I.title))}),s.jsx("div",{className:"min-w-0",children:K.filter(I=>I.title===M).map(I=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:I.title}),I.description?s.jsx(Et,{children:I.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:I.fields.map(H=>s.jsx("div",{className:H.type==="textarea"||H.type==="stringList"?"sm:col-span-2":"",children:s.jsx(Vg,{field:H,value:To(o,H.path),readOnly:a,onChange:Z=>q(H.path,Z)})},H.path))})]},I.title))})]}):null]})}const S$=Ee.listConfigs(),j$={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function N$(){var T,A;const{permissions:e,canViewConfig:n}=Ut(),{files:a}=f2(),[o,l]=Ju(),c=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>S$.filter(O=>n(O)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),h=f.useMemo(()=>[...m,...p.map(O=>el(O))],[m,p]),b=h[0]??"",[g,y]=f.useState(()=>c&&h.includes(c)?c:b);if(f.useEffect(()=>{c&&h.includes(c)?y(c):h.includes(g)||(y(b),b&&l({file:b}))},[c,h,g,b,l]),h.length===0)return s.jsx(Qr,{to:Wh(e),replace:!0});const w=O8(g),j=(w==null?void 0:w.type)==="addon",S=j?w.file:null,E=j?m2(S):j$[g]??"Configuration",N=j?!!((T=e==null?void 0:e.configs.supportbot)!=null&&T.edit):e?!!((A=e.configs[g])!=null&&A.edit):!1,k=j?S:`${g}.yml`;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),s.jsx("p",{className:"text-muted-foreground",children:N?`Edit ${k} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${k} — you do not have permission to save changes.`})]}),s.jsx("div",{className:"mt-6",children:j&&S?s.jsx(oI,{filename:S},S):s.jsx(C$,{configFile:g},g)})]})}const E$={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function k$(e){return e?E$[e]||"Sign-in failed. Please try again.":""}function T$(){const{branding:e}=od(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ut(),[l]=Ju(),c=f.useMemo(()=>k$(l.get("error")),[l]);return!a&&n?s.jsx(Qr,{to:"/",replace:!0}):s.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:s.jsxs(Xe,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),s.jsxs(it,{className:"space-y-6 pt-10 pb-4 text-center",children:[s.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:s.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),s.jsxs("div",{children:[s.jsx(lt,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:e.title||"SupportBot"}),s.jsx(Et,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),s.jsxs(Ze,{className:"space-y-6 pb-10",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),s.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",s.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),c?s.jsx(We,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:s.jsx(Ye,{className:"font-medium",children:c})}):null,s.jsxs(he,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[s.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),s.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:s.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const Os=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:Hh},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:y8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:oy},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:rd},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:Fp},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:oy}];function R$(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function A$({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return s.jsx("div",{className:"min-h-svh bg-background",children:s.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[s.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?s.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):s.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:s.jsx(ge,{icon:Hh,size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),s.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function M$({currentIndex:e,validation:n}){const a=(e+1)/Os.length*100;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[s.jsxs("span",{children:["Step ",e+1," of ",Os.length]}),s.jsxs("span",{children:[Math.round(a),"%"]})]}),s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),s.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:Os.map((o,l)=>{var h;const c=R$(o.id),d=(h=n[c])==null?void 0:h.ok,m=l===e,p=ls.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx(ge,{icon:ed,size:14}),o.globalName||o.username,s.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?s.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:e.error})}):null}function O$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",s.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",s.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"botToken",children:"Bot token"}),s.jsx(Ie,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:c=>n({...e,botToken:c.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.botToken}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function D$({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"secretKey",children:"Session secret"}),s.jsx(Ie,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.secretKey}),s.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[s.jsx(he,{type:"button",variant:"outline",onClick:c,children:"Generate secure secret"}),s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function L$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",s.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{htmlFor:"clientId",children:"Client ID"}),s.jsx(Ie,{id:"clientId",value:e.clientId,onChange:c=>n({...e,clientId:c.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{htmlFor:"clientSecret",children:"Client Secret"}),s.jsx(Ie,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:c=>n({...e,clientSecret:c.target.value}),className:"h-11 font-mono text-sm"})]})]}),s.jsx(ei,{result:a.oauth}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function z$({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",s.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"redirectUri",children:"Redirect URI"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Ie,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),s.jsx(he,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:s.jsx(ge,{icon:t2,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?s.jsx(ei,{result:a.redirectUri}):s.jsx(We,{className:"border-border bg-secondary",children:s.jsx(Ye,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function P$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",s.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",s.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"owners",children:"Owner user IDs"}),s.jsx(Ld,{id:"owners",value:e.ownerUserIds,onChange:c=>n({...e,ownerUserIds:c.target.value}),placeholder:`829112572816130058 -987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),s.jsx(ei,{result:a.owners}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function I$({onContinue:e}){return s.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:s.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[s.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:s.jsx(ge,{icon:ed,size:40})}),s.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),s.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",s.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),s.jsx(We,{className:"mt-6 text-left",children:s.jsx(Ye,{children:"After restarting, sign in with Discord to open the dashboard."})}),s.jsx(he,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $$({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:c}){const d=e===Os.length-1;return s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(he,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[s.jsx(ge,{icon:J0,size:18,className:"mr-1"}),"Back"]}),s.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?s.jsx(he,{type:"button",size:"lg",disabled:a||n,onClick:c,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):s.jsxs(he,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",s.jsx(ge,{icon:Uh,size:18,className:"ml-1"})]})})]})}function B$({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),s.jsx(Ie,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:e.emeraldApiKey,onChange:c=>n({...e,emeraldApiKey:c.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),s.jsx(ei,{result:a.emeraldApi}),s.jsx("div",{className:"mt-auto",children:s.jsx(he,{type:"button",variant:"secondary",disabled:o,onClick:l,children:o?"Checking…":e.emeraldApiKey?"Verify key":"Skip step"})})]})}function U$(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function H$(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function E0(e){return e==="oauth"?"oauth":e==="owners"?"owners":e==="emeraldApi"?"emeraldApi":e}function V$(){const e=Ro(),{branding:n}=od(),{loading:a,error:o,refresh:l,status:c}=Pj(),[d,m]=f.useState(0),[p,h]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[b,g]=f.useState({}),[y,w]=f.useState(!1),[j,S]=f.useState(!1),[E,N]=f.useState(""),[k,T]=f.useState(!1),A=Os[d];f.useEffect(()=>{c!=null&&c.suggestedRedirectUri&&!p.redirectUri&&h(q=>({...q,redirectUri:c.suggestedRedirectUri}))},[c==null?void 0:c.suggestedRedirectUri,p.redirectUri]);const O=f.useMemo(()=>({botToken:p.botToken,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:H$(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function M(){w(!0),N("");try{const q=await Ee.validateSetup(O);return g(ue=>{var pe;return{...ue,...(pe=q.data)==null?void 0:pe.results}}),q.data}catch(q){return N(q instanceof Error?q.message:"Validation failed"),null}finally{w(!1)}}async function z(){var pe,xe;const q=E0(A.id),ue=await M();return!!((xe=(pe=ue==null?void 0:ue.results)==null?void 0:pe[q])!=null&&xe.ok)}async function B(){const q=E0(A.id),ue=b[q];!(ue!=null&&ue.ok)&&!await z()||m(pe=>Math.min(pe+1,Os.length-1))}async function K(){S(!0),N("");try{const q=await M();if(!(q!=null&&q.ok)){N("Fix the steps marked with errors before finishing.");return}await Ee.completeSetup(O),T(!0)}catch(q){N(q instanceof Error?q.message:"Could not save setup")}finally{S(!1)}}function U(){const q={values:p,setValues:h,validation:b,validating:y};switch(A.id){case"botToken":return s.jsx(O$,{...q,onValidate:()=>void z()});case"secretKey":return s.jsx(D$,{...q,onGenerate:()=>h(ue=>({...ue,secretKey:U$()})),onValidate:()=>void z()});case"oauth":return s.jsx(L$,{...q,onValidate:()=>void z()});case"redirectUri":return s.jsx(z$,{values:p,setValues:h,validation:b});case"owners":return s.jsx(P$,{...q,onValidate:()=>void z()});case"emeraldApi":return s.jsx(B$,{...q,onValidate:()=>void z()})}}return a?s.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:s.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[s.jsx(Be,{className:"h-14 w-64"}),s.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[s.jsx(Be,{className:"hidden h-80 lg:block"}),s.jsx(Be,{className:"h-[520px] rounded-2xl"})]})]})}):s.jsxs(A$,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?s.jsx(We,{variant:"destructive",className:"mb-6",children:s.jsx(Ye,{children:o})}):null,E?s.jsx(We,{variant:"destructive",className:"mb-6",children:s.jsx(Ye,{children:E})}):null,k?s.jsx(I$,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):s.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[s.jsx(M$,{currentIndex:d,validation:b}),s.jsx(_$,{step:A,footer:s.jsx($$,{currentIndex:d,validating:y,saving:j,onBack:()=>m(q=>Math.max(0,q-1)),onNext:()=>void B(),onFinish:()=>void K()}),children:U()})]})]})}const G$={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function F$({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return s.jsxs(Ft,{to:a,className:fe("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[s.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:s.jsx(ge,{icon:n,size:20})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate font-semibold",children:e}),s.jsx("span",{className:fe("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",G$[l]),children:o})]})]})}function W$({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),p=d-m/100*d;return s.jsxs("div",{className:fe("relative inline-flex",a),children:[s.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:l})]}),s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[s.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),s.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const Y$={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function q$({title:e,subtitle:n,icon:a,href:o,status:l,meta:c="Open in dashboard"}){const d=Y$[l];return s.jsxs(Ft,{to:o,className:fe("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsx("span",{className:fe("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),s.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),s.jsx("span",{className:fe("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),s.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ge,{icon:a,size:16})}),s.jsx("span",{className:"text-xs text-muted-foreground",children:c})]}),s.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[s.jsx(ge,{icon:rd,size:14,className:"opacity-60"}),s.jsx(ge,{icon:vo,size:14,className:"opacity-60 group-hover:text-primary"}),s.jsx(ge,{icon:Uh,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function K$({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:Fh(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return s.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[s.jsxs(lt,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),s.jsx(he,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),s.jsxs(Ze,{className:"pt-0",children:[s.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>s.jsxs(Ia,{className:"size-9 border-2 border-card ring-0",children:[s.jsx(Co,{src:e.bot.avatar,alt:""}),s.jsx($a,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?s.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),s.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),s.jsx(Xe,{className:"overflow-hidden border-border bg-secondary",children:s.jsx(Ze,{className:"p-5",children:s.jsxs("div",{className:"space-y-3",children:[s.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:s.jsx(ge,{icon:b8,size:22})}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),s.jsx(he,{asChild:!0,size:"sm",className:"w-full",children:s.jsxs(Ft,{to:"/settings",children:[s.jsx(ge,{icon:td,size:16,className:"mr-2"}),"Open settings"]})})]})})}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[s.jsx(lt,{className:"text-sm font-semibold",children:"System activity"}),s.jsx(he,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),s.jsxs(Ze,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>s.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[s.jsxs(Ia,{className:"size-9",children:[s.jsx(Co,{src:e.bot.avatar,alt:e.bot.username}),s.jsx($a,{className:"bg-secondary text-xs",children:"SB"})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),s.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),s.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),s.jsx(he,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:s.jsxs(Ft,{to:"/system",children:["All system details",s.jsx(ge,{icon:Uh,size:14})]})})]})]}),s.jsx(Xe,{className:"border-border bg-card",children:s.jsxs(Ze,{className:"flex items-center gap-3 p-4",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ge,{icon:vo,size:18})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const tN={todo:"Needs setup",progress:"In progress",done:"Active"};function Th(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function X$(){return s.jsxs("div",{className:"flex gap-6",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-44 rounded-2xl"}),s.jsx(Be,{className:"h-44 rounded-2xl"})]}),s.jsx(Be,{className:"h-8 w-48"}),s.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>s.jsx(Be,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),s.jsx(Be,{className:"h-8 w-56"}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>s.jsx(Be,{className:"h-20 rounded-2xl"},n))})]}),s.jsx(Be,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function Z$(){const{stats:e,loading:n,error:a}=sd(),[o,l]=f.useState("all"),c=f.useMemo(()=>{if(!e)return 0;const b=e.tickets.total||0;return b===0?100:Math.round(e.tickets.closed/b*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?Ts.filter(b=>b.category==="tickets"):o==="all"?Ts:Ts.filter(b=>b.category===o),[o]);if(n)return s.jsx(X$,{});if(a||!e)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:a||"No stats available"})});const m=e.tickets.open,p=e.tickets.closed,h=e.tickets.total;return s.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Xe,{className:"overflow-hidden border-border bg-card",children:s.jsxs(Ze,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",s.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),s.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),s.jsx(he,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:s.jsx(Ft,{to:"/transcripts",children:"Review"})})]}),s.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[s.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),s.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),s.jsx(Xe,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:s.jsxs(Ze,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),s.jsxs("ul",{className:"space-y-1.5 text-sm",children:[s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[h," total"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),s.jsx(W$,{percent:c,size:120})]})})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),s.jsx(N5,{value:o,onValueChange:b=>l(b),children:s.jsxs(zg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[s.jsx(xo,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),s.jsx(xo,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),s.jsx(xo,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),L_.filter(b=>b.id!=="all").map(b=>s.jsx(xo,{value:b.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:b.label},b.id))]})})]}),s.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:ll,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:ed,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(b=>{const g=Th(b.id,e.modules,b.description);return{id:b.id,title:b.title,subtitle:g.subtitle,icon:b.icon,href:b.href,status:g.status,meta:g.status==="done"?"View settings":"Configure"}})).map(b=>s.jsx(q$,{title:b.title,subtitle:b.subtitle,icon:b.icon,href:b.href,status:b.status,meta:b.meta},b.id))})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),s.jsx(Ft,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Ts.slice(0,4).map(b=>{const g=Th(b.id,e.modules);return s.jsx(F$,{title:b.title,icon:b.icon,href:b.href,badge:tN[g.status],status:g.status},b.id)})})]})]}),s.jsx(K$,{stats:e})]})}function Q$(){const{permissions:e}=Ut();return qn(e,"overview")?s.jsx(Z$,{}):s.jsx(Qr,{to:Wh(e),replace:!0})}function Kr({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ut();return a?s.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?qn(l,e)?s.jsx(s.Fragment,{children:n}):s.jsx(Qr,{to:Wh(l),replace:!0}):s.jsx(Qr,{to:"/login",replace:!0})}function J$(){const{hasPermission:e}=Ut(),n=e("settings.update"),a=Ro(),[o,l]=f.useState([]),[c,d]=f.useState(""),[m,p]=f.useState(!0),[h,b]=f.useState(""),[g,y]=f.useState(""),[w,j]=f.useState(null),S=f.useCallback(async()=>{p(!0),b("");try{const N=await Ee.getAddonsCatalog();N.data&&(l(N.data.addons),d(N.data.repository))}catch(N){b(N instanceof Error?N.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(N){if(n){j(N.id),y(""),b("");try{const k=await Ee.installAddon(N.id);y(k.message||`${N.name} installed.`),await S();const T=N.configFiles[0];T&&a(`/configs?file=${el(T)}`)}catch(k){b(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),s.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:S,disabled:m,children:[s.jsx(ge,{icon:r2,size:16,className:fe("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),h?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:h})}):null,g?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:g})}):null,s.jsxs("section",{className:"space-y-4",children:[s.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"})]}):s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(N=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs(lt,{className:"flex items-center gap-2 text-lg",children:[s.jsx(ge,{icon:Gh,size:20,className:"text-primary"}),N.name]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(An,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:N.price===0||!N.price?"Free":`$${N.price}`}),N.installed?s.jsxs(An,{variant:"secondary",className:"shrink-0 gap-1",children:[s.jsx(ge,{icon:j8,size:14}),"Installed"]}):null]})]}),s.jsx(Et,{children:N.description})]}),s.jsxs(Ze,{className:"space-y-2 text-xs text-muted-foreground",children:[N.is_external?s.jsxs("p",{children:["Available on: ",s.jsx("span",{className:"font-medium text-foreground",children:N.external_store||"External Store"})]}):null,N.configFiles&&N.configFiles.length>0?s.jsxs("p",{children:["Config:"," ",N.configFiles.map((k,T)=>s.jsxs("span",{children:[T>0?", ":null,s.jsx(Ft,{to:`/configs?file=${el(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),s.jsxs(Gg,{className:"flex flex-wrap gap-2",children:[N.is_external?s.jsx(he,{variant:"outline",size:"sm",asChild:!0,children:s.jsx("a",{href:N.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,N.installed&&N.configFiles&&N.configFiles[0]?s.jsx(he,{size:"sm",variant:"secondary",asChild:!0,children:s.jsx(Ft,{to:`/configs?file=${el(N.configFiles[0])}`,children:"Edit config"})}):null,N.installed?s.jsx(he,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):N.is_external?null:s.jsxs(he,{size:"sm",disabled:!n||w===N.id,onClick:()=>E(N),children:[s.jsx(ge,{icon:td,size:14,className:"mr-1"}),w===N.id?"Installing…":"Install"]})]})]},N.id))})]})]})}function eB(){const{permissions:e}=Ut(),[n,a]=f.useState(!1),[o,l]=f.useState(!1),[c,d]=f.useState(""),[m,p]=f.useState(""),[h,b]=f.useState(""),[g,y]=f.useState("Administrator"),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState("General"),T=i2(e,"supportbot"),A=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Bt.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),l(!1);try{const O=await Ee.buildAddon({name:m.toLowerCase(),description:h||"A custom command",permission:g,embed:{title:w,description:S||"Hello from your custom command!",color:N}});l(!0),d(O.message||"Restart required."),Bt.success(`Addon ${m}.js created successfully!`)}catch(O){Bt.error(O instanceof Error?O.message:"Failed to build addon")}finally{a(!1)}};return T?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),s.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?s.jsxs(We,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[s.jsx(Vy,{className:"h-4 w-4"}),s.jsxs(Ye,{className:"ml-2",children:["Successfully built ",s.jsxs("strong",{children:[m,".js"]}),"! ",c]})]}):null,s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Xe,{children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Command Details"}),s.jsx(Et,{children:"Configure how users trigger the command."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Command Name"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-muted-foreground",children:"/"}),s.jsx(Ie,{placeholder:"ping",value:m,onChange:O=>p(O.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Description"}),s.jsx(Ie,{placeholder:"Replies with a custom embed",value:h,onChange:O=>b(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Required Permission"}),s.jsxs(No,{value:g,onValueChange:y,children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsxs(Ua,{children:[s.jsx(an,{value:"none",children:"@everyone"}),s.jsx(an,{value:"Administrator",children:"Administrator"}),s.jsx(an,{value:"ManageMessages",children:"Manage Messages"}),s.jsx(an,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),s.jsxs(Xe,{children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Response Embed"}),s.jsx(Et,{children:"What the bot will reply with."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Title (Optional)"}),s.jsx(Ie,{placeholder:"Hello!",value:w,onChange:O=>j(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Description"}),s.jsx(Ld,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:S,onChange:O=>E(O.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Embed Color"}),s.jsxs(No,{value:N,onValueChange:k,children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsxs(Ua,{children:[s.jsx(an,{value:"General",children:"Theme General"}),s.jsx(an,{value:"Success",children:"Theme Success"}),s.jsx(an,{value:"Warning",children:"Theme Warning"}),s.jsx(an,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs(Xe,{className:"sticky top-6 border-primary/20",children:[s.jsx(it,{children:s.jsxs(lt,{className:"text-sm font-medium flex items-center gap-2",children:[s.jsx(ge,{icon:C8,size:16,className:"text-primary"}),"Live Preview"]})}),s.jsx(Ze,{children:s.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),s.jsxs("div",{className:"flex-1 space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),s.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[s.jsx(Vy,{size:10})," BOT"]}),s.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),s.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[w&&s.jsx("div",{className:"mb-1 font-semibold text-white",children:w}),s.jsx("div",{className:"whitespace-pre-wrap",children:S||"Hello from your custom command!"})]})]})]})})}),s.jsx(Gg,{children:s.jsxs(he,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:A,children:[s.jsx(ge,{icon:Da,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):s.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const Wg="supportbot-dashboard-accent",ol="#45b46c",tB=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function nB(e){const n=jr(e,ol),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,c=Math.max(a,o,l),d=Math.min(a,o,l),m=(c+d)/2;let p=0,h=0;if(c!==d){const b=c-d;switch(h=m>.5?b/(2-c-d):b/(c+d),c){case a:p=((o-l)/b+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function iB({canEdit:e}){const[n,a]=f.useState(!1),[o,l]=f.useState(""),[c,d]=f.useState(!1);async function m(){if(e){a(!0),l("");try{const p=await Ee.resetDashboard();l(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){l(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return e?s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),s.jsxs(zl,{open:c,onOpenChange:d,children:[s.jsx(x_,{asChild:!0,children:s.jsx(he,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),s.jsxs(qs,{children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:"Are you absolutely sure?"}),s.jsx(Zs,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&s.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),s.jsxs(Pl,{children:[s.jsx(he,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),s.jsx(he,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function lB({canEdit:e}){const{branding:n,setBrandingLocal:a}=od(),o=f.useRef(null),[l,c]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,h]=f.useState(!1),[b,g]=f.useState(!1),[y,w]=f.useState("");f.useEffect(()=>{c(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function S(){if(e){h(!0),w("");try{const T=await Ee.updateBranding({title:l,pageTitle:d});T.data&&a(T.data),w(T.message||"Branding saved.")}catch(T){w(T instanceof Error?T.message:"Save failed")}finally{h(!1)}}}async function E(T){if(!(!e||!T)){g(!0),w("");try{const A=await sB(T),O=await Ee.uploadBrandingFavicon(A);O.data&&a(O.data),w(O.message||"Favicon uploaded.")}catch(A){w(A instanceof Error?A.message:"Upload failed")}finally{g(!1),o.current&&(o.current.value="")}}}async function N(){if(e){g(!0),w("");try{const T=await Ee.removeBrandingFavicon();T.data&&a(T.data),w(T.message||"Favicon removed.")}catch(T){w(T instanceof Error?T.message:"Remove failed")}finally{g(!1)}}}const k=l.trim()!==n.title||d.trim()!==n.pageTitle;return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"brand-title",children:"Sidebar title"}),s.jsx(Ie,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:T=>c(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),s.jsx(Ie,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),e?s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(he,{type:"button",disabled:p||!k,onClick:()=>void S(),children:p?"Saving…":"Save titles"}),y&&k?s.jsx("span",{className:"text-xs text-muted-foreground",children:y}):null]}):null]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?s.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-2"}):s.jsx(ge,{icon:d8,size:24,className:"text-muted-foreground/50"})}),s.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||b,onChange:T=>{var A;return void E(((A=T.target.files)==null?void 0:A[0])??null)}}),s.jsxs("div",{className:"flex flex-col gap-2",children:[e?s.jsxs("div",{className:"flex gap-2",children:[s.jsx(he,{type:"button",variant:"secondary",disabled:b,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:b?"Uploading…":"Upload Favicon"}),n.hasFavicon?s.jsx(he,{type:"button",variant:"destructive",disabled:b,onClick:()=>void N(),children:"Remove"}):null]}):s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!k&&y?s.jsx("span",{className:"text-xs text-muted-foreground",children:y}):null]})]})]})]})}function cB(){var g,y,w,j,S,E,N,k,T,A,O;const{hasPermission:e}=Ut(),n=e("settings.update"),[a,o]=f.useState(!0),[l,c]=f.useState(!1),[d,m]=f.useState(""),[p,h]=f.useState(null);f.useEffect(()=>{Ee.getConfigJson("api").then(M=>{M.data&&h(M.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function b(){var M,z,B,K,U,q,ue,pe,xe,se,L;if(!(!n||!p)){c(!0),m("");try{const I={"api:API.Port":(M=p.API)==null?void 0:M.Port,"api:API.EmeraldAPIKey":(z=p.API)==null?void 0:z.EmeraldAPIKey,"api:API.TrustProxy":(B=p.API)==null?void 0:B.TrustProxy,"api:API.OAuth.Enabled":(U=(K=p.API)==null?void 0:K.OAuth)==null?void 0:U.Enabled,"api:API.OAuth.ClientId":(ue=(q=p.API)==null?void 0:q.OAuth)==null?void 0:ue.ClientId,"api:API.OAuth.ClientSecret":(xe=(pe=p.API)==null?void 0:pe.OAuth)==null?void 0:xe.ClientSecret,"api:API.OAuth.RedirectUri":(L=(se=p.API)==null?void 0:se.OAuth)==null?void 0:L.RedirectUri};await Ee.updateConfigFields(I),m("API settings saved and backend restarted.")}catch(I){m(I instanceof Error?I.message:"Save failed")}finally{c(!1)}}}return a?s.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"API Port"}),s.jsx(Ie,{type:"number",value:((g=p.API)==null?void 0:g.Port)||"",disabled:!n,onChange:M=>h({...p,API:{...p.API,Port:parseInt(M.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Emerald API Key"}),s.jsx(Ie,{type:"password",value:((y=p.API)==null?void 0:y.EmeraldAPIKey)||"",disabled:!n,onChange:M=>h({...p,API:{...p.API,EmeraldAPIKey:M.target.value}}),className:"border-border bg-secondary/30"})]})]}),s.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[s.jsx(At,{checked:((w=p.API)==null?void 0:w.TrustProxy)||!1,disabled:!n,onCheckedChange:M=>h({...p,API:{...p.API,TrustProxy:M}})}),s.jsx(ze,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),s.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[s.jsx(At,{checked:((S=(j=p.API)==null?void 0:j.OAuth)==null?void 0:S.Enabled)||!1,disabled:!n,onCheckedChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,Enabled:M}}})}}),s.jsx(ze,{className:"text-sm",children:"Enable OAuth"})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Client ID"}),s.jsx(Ie,{value:((N=(E=p.API)==null?void 0:E.OAuth)==null?void 0:N.ClientId)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientId:M.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Client Secret"}),s.jsx(Ie,{type:"password",value:((T=(k=p.API)==null?void 0:k.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,ClientSecret:M.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(ze,{children:"Redirect URI"}),s.jsx(Ie,{value:((O=(A=p.API)==null?void 0:A.OAuth)==null?void 0:O.RedirectUri)||"",disabled:!n,onChange:M=>{var z;return h({...p,API:{...p.API,OAuth:{...(z=p.API)==null?void 0:z.OAuth,RedirectUri:M.target.value}}})},className:"border-border bg-secondary/30"}),s.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?s.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[s.jsx(he,{type:"button",disabled:l,onClick:()=>void b(),children:l?"Saving…":"Save API Config"}),d?s.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function uB(){const{hasPermission:e}=Ut(),n=e("settings.update"),[a,o]=f.useState(null),[l,c]=f.useState(!0),[d,m]=f.useState(!1),[p,h]=f.useState(""),[b,g]=f.useState(""),[y,w]=f.useState(()=>rN()??ol),[j,S]=f.useState(""),[E,N]=f.useState("appearance"),k=f.useCallback(async()=>{c(!0),h("");try{const A=await Ee.checkForUpdates();A.data&&o(A.data)}catch(A){h(A instanceof Error?A.message:"Could not check for updates")}finally{c(!1)}},[]);f.useEffect(()=>{k()},[k]);async function T(A){if(A.updateAvailable){m(!0),h(""),g("");try{const O=await Ee.runUpdate(A.id,A.latest,A.zipUrl);g(O.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await k()}catch(O){h(O instanceof Error?O.message:"Update failed")}finally{m(!1)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),s.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),s.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[s.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:s.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[s.jsx(he,{variant:E==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("appearance"),children:"Appearance"}),s.jsx(he,{variant:E==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("api"),children:"API Config"}),s.jsx(he,{variant:E==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>N("updates"),children:"Update Checker"}),n&&s.jsx(he,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${E==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>N("danger"),children:"Danger Zone"})]})}),s.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[E==="appearance"&&s.jsx("div",{className:"space-y-6",children:s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Dashboard appearance"}),s.jsx(Et,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsx(lB,{canEdit:n}),s.jsxs("div",{className:"border-t border-border pt-4",children:[s.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),s.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Id,{value:y,onChange:A=>{w(A),k0(A),S("Accent updated.")}}),s.jsx(Ie,{id:"accent-colour",value:y,onChange:A=>w(A.target.value),onBlur:()=>{const A=jr(y,ol);w(A),k0(A),S("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),s.jsx(he,{type:"button",variant:"outline",onClick:()=>{aB(),w(ol),S("Reset to default purple.")},children:"Reset to default"})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[s.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),s.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),s.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?s.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]})}),E==="danger"&&n&&s.jsxs(Xe,{className:"border-destructive/50 bg-destructive/5",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg text-destructive",children:"Danger Zone"}),s.jsx(Et,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),s.jsx(Ze,{children:s.jsx(iB,{canEdit:n})})]}),E==="api"&&s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"API Configuration"}),s.jsx(Et,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),s.jsx(Ze,{children:s.jsx(cB,{})})]}),E==="updates"&&s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Software updates"}),s.jsx(Et,{children:"Manage updates for the bot and dashboard."})]}),s.jsxs(Ze,{className:"space-y-4",children:[l?s.jsx(Be,{className:"h-24 w-full"}):a&&a.length>0?s.jsx("div",{className:"space-y-4",children:a.map(A=>s.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("p",{className:"font-medium text-sm",children:[s.jsx("a",{href:A.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:A.name})," ","(",A.branch," branch)"]}),s.jsxs("div",{className:"flex gap-x-4 text-sm",children:[s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",A.current]})]}),s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",A.latest]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[A.updateAvailable?s.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):s.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),A.updateAvailable&&n?s.jsxs(he,{type:"button",size:"sm",onClick:()=>void T(A),disabled:d,children:[d?s.jsx(ge,{icon:r2,size:16,className:"mr-2 animate-spin"}):s.jsx(ge,{icon:td,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,A.updateAvailable&&!n?s.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},A.id))}):null,p?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:p})}):null,b?s.jsx(We,{children:s.jsx(Ye,{children:b})}):null,s.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:s.jsxs(he,{type:"button",variant:"outline",onClick:k,disabled:l||d,children:[s.jsx(ge,{icon:or,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function Yg(e){const[n,a]=f.useState(!1),o=f.useRef(e);return o.current=e,f.useEffect(()=>{let l=null,c=null;const d=()=>{l=new EventSource("/api/stream"),l.onopen=()=>{a(!0)},l.addEventListener("connected",()=>{a(!0)}),l.addEventListener("metrics",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onMetrics)==null||h.call(p,b)}catch{}}),l.addEventListener("log",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onLog)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessage)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message_deleted",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessageDeleted)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_message_updated",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketMessageUpdated)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_created",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketCreated)==null||h.call(p,b)}catch{}}),l.addEventListener("ticket_closed",m=>{var p,h;try{const b=JSON.parse(m.data);(h=(p=o.current).onTicketClosed)==null||h.call(p,b)}catch{}}),l.onerror=()=>{a(!1),l==null||l.close(),c=window.setTimeout(d,4e3)}};return d(),()=>{c&&window.clearTimeout(c),l&&l.close()}},[]),{connected:n}}function Ct({label:e,value:n,mono:a=!1}){return s.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),s.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const dB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function fB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function mB(){var E;const{stats:e,loading:n,error:a,refresh:o}=sd(),[l,c]=f.useState(null),[d,m]=f.useState(null),[p,h]=f.useState(!1),[b,g]=f.useState(null),{connected:y}=Yg({onMetrics:N=>{g(N)}}),w=f.useCallback(async()=>{const[N,k]=await Promise.all([Ee.getGuildStatus().catch(()=>null),Ee.health().catch(()=>null)]);N!=null&&N.data&&c(N.data),k!=null&&k.success&&k.data&&m({dashboard:k.data.dashboard,botReady:k.data.botReady,oauthEnabled:k.data.oauthEnabled,setupComplete:k.data.setupComplete})},[]);f.useEffect(()=>{w()},[w]);async function j(){h(!0);try{await Promise.all([o(),w()])}finally{h(!1)}}if(n&&!e)return s.jsxs("div",{className:"space-y-6",children:[s.jsx(Be,{className:"h-10 w-64"}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-56 rounded-2xl"}),s.jsx(Be,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:a||"Could not load system details."})});const S=e.bot.ping<200;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(he,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:s.jsxs(Ft,{to:"/",children:[s.jsx(ge,{icon:J0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),s.jsxs(he,{type:"button",variant:"outline",disabled:p,onClick:()=>void j(),children:[s.jsx(ge,{icon:or,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Discord bot"}),s.jsx(Et,{children:"Connection and identity"})]}),s.jsxs(Ze,{children:[s.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[s.jsxs(Ia,{className:"size-12",children:[s.jsx(Co,{src:e.bot.avatar,alt:e.bot.username}),s.jsx($a,{children:"SB"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:e.bot.username}),s.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),s.jsxs("dl",{children:[s.jsx(Ct,{label:"Version",value:`v${e.bot.version}`,mono:!0}),s.jsx(Ct,{label:"Gateway latency",value:s.jsxs("span",{className:S?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),s.jsx(Ct,{label:"Process uptime",value:Fh(e.bot.uptime)}),s.jsx(Ct,{label:"Connected servers",value:e.servers.toLocaleString()}),s.jsx(Ct,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?s.jsx(Ct,{label:"Invite link",value:s.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(lt,{className:"text-lg",children:"Host machine"}),s.jsx(Et,{children:"Server resources running this instance"})]}),s.jsxs(An,{variant:y?"default":"outline",className:"text-xs",children:[s.jsx("span",{className:`mr-1.5 inline-block h-2 w-2 rounded-full ${y?"bg-emerald-500 animate-pulse":"bg-muted"}`}),y?"Live Stream":"Polling"]})]}),s.jsx(Ze,{children:s.jsxs("dl",{children:[s.jsx(Ct,{label:"Memory used",value:b?`${(b.ram_used_mb/1024).toFixed(2)} GB / ${(b.ram_total_mb/1024).toFixed(2)} GB`:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),s.jsx(Ct,{label:"Memory usage",value:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:(b?b.ram_percent:e.hosting.ram_percent)>85?"text-amber-500 font-bold":"text-foreground font-medium",children:[b?b.ram_percent:e.hosting.ram_percent,"%"]}),s.jsx("div",{className:"w-24 h-2 bg-secondary rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${b?b.ram_percent:e.hosting.ram_percent}%`}})})]})}),s.jsx(Ct,{label:"CPU load (1 min avg)",value:b?String(b.cpu_load):e.hosting.cpu_load,mono:!0}),s.jsx(Ct,{label:"Host uptime",value:e.hosting.uptime})]})})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Tickets"}),s.jsx(Et,{children:"Database snapshot"})]}),s.jsx(Ze,{children:s.jsxs("dl",{children:[s.jsx(Ct,{label:"Total tickets",value:e.tickets.total}),s.jsx(Ct,{label:"Open",value:s.jsx("span",{className:"text-primary",children:e.tickets.open})}),s.jsx(Ct,{label:"Closed",value:e.tickets.closed}),s.jsx(Ct,{label:"Transcripts",value:s.jsx(Ft,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Guild health"}),s.jsx(Et,{children:"Configured server and membership"})]}),s.jsx(Ze,{children:l?s.jsxs("dl",{children:[s.jsx(Ct,{label:"Status",value:s.jsx("span",{className:fB(l.status),children:dB[l.status]})}),s.jsx(Ct,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?s.jsx(Ct,{label:"Configured server",value:`${l.configuredGuild.name} (${((E=l.configuredGuild.memberCount)==null?void 0:E.toLocaleString())??"?"} members)`}):null,l.message?s.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?s.jsxs("div",{className:"mt-3 space-y-2",children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),s.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(N=>s.jsxs("li",{className:"font-mono text-xs",children:[N.name," · ",N.id]},N.id))})]}):null]}):s.jsx(Be,{className:"h-24 w-full"})})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Dashboard services"}),s.jsx(Et,{children:"API and authentication"})]}),s.jsx(Ze,{children:d?s.jsxs("dl",{className:"max-w-xl",children:[s.jsx(Ct,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),s.jsx(Ct,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),s.jsx(Ct,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),s.jsx(Ct,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),s.jsx(Ct,{label:"Software updates",value:s.jsx(Ft,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),s.jsx(Ct,{label:"Logs",value:s.jsx(Ft,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):s.jsx(Be,{className:"h-32 w-full max-w-xl"})})]}),e.modules?s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-lg",children:"Module setup status"}),s.jsx(Et,{children:"Which features are configured and active"})]}),s.jsx(Ze,{children:s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Ts.map(N=>{const k=Th(N.id,e.modules);return s.jsxs(Ft,{to:N.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-sm font-medium",children:N.title}),s.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:k.subtitle})]}),s.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:tN[k.status]})]},N.id)})})})]}):null]})}function pB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const hB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],gB=["Output","Warn","Error"],xB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},vB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},qu=2e3,bB=2e3;function Rh(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function yB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,p)=>Rh(m,p))),c=[];for(let m=0;mqu?d.slice(d.length-qu):d}function wB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,c]=f.useState(""),[d,m]=f.useState(!1),[p,h]=f.useState(!0),[b,g]=f.useState("all"),[y,w]=f.useState(""),[j,S]=f.useState(!0),[E,N]=f.useState(""),k=f.useRef(null),T=f.useRef(null),A=f.useRef(d);A.current=d;const O=f.useMemo(()=>b==="all"?gB:[b],[b]),M=f.useCallback(U=>{A.current||b!=="all"&&U.type!==b||(n(q=>{const ue=[...q,U];return ue.length>qu?ue.slice(ue.length-qu):ue}),S(!0))},[b]);Yg({onLog:M});const z=f.useCallback(async U=>{var pe,xe;const q=await Ee.getLogs({types:O,cursor:U?void 0:k.current??void 0,tail:U?500:0}),ue=((pe=q.data)==null?void 0:pe.entries)??[];return k.current=((xe=q.data)==null?void 0:xe.cursor)??{},n(se=>yB(se,ue,U)),ue.length},[O]),B=f.useCallback(async()=>{var U;o(!0),c(""),k.current=null;try{const pe=(((U=(await Ee.getLogsMeta()).data)==null?void 0:U.files)??[]).filter(xe=>xe.file).map(xe=>`${xe.type}: ${xe.file}`).join(" · ");N(pe||"No log files yet — output appears when the bot runs."),await z(!0),S(!0)}catch(q){c(q instanceof Error?q.message:"Failed to load logs"),S(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const U=window.setInterval(async()=>{if(!A.current)try{await z(!1),S(!0),c("")}catch(q){S(!1),c(q instanceof Error?q.message:"Live update failed")}},bB);return()=>window.clearInterval(U)},[d,a,z]),f.useEffect(()=>{if(!p||d)return;const U=T.current;U&&(U.scrollTop=U.scrollHeight)},[e,p,d]);const K=f.useMemo(()=>e.filter(U=>{var ue;if(b!=="all"&&U.type!==b)return!1;if(!y.trim())return!0;const q=y.toLowerCase();return U.message.toLowerCase().includes(q)||(((ue=U.timestamp)==null?void 0:ue.toLowerCase().includes(q))??!1)}),[e,b,y]);return s.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),E?s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:E}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:fe("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),s.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:l})}):null,s.jsxs(Xe,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[s.jsxs(it,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(lt,{className:"text-base font-medium",children:["Console",a?null:s.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[K.length," line",K.length===1?"":"s"]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[s.jsx(At,{id:"auto-scroll",checked:p,onCheckedChange:h}),s.jsx(ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",onClick:()=>m(U=>!U),children:[s.jsx(ge,{icon:d?v8:x8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[s.jsx(ge,{icon:or,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[s.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:hB.map(U=>s.jsx(he,{type:"button",variant:b===U.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>g(U.id),children:U.label},U.id))}),s.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[s.jsx(ge,{icon:ad,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Filter lines…",value:y,onChange:U=>w(U.target.value),className:"h-9 pl-9"})]})]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-0",children:a?s.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((U,q)=>s.jsx(Be,{className:"h-4 w-full"},q))}):s.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:K.length===0?s.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):s.jsx("ul",{className:"space-y-1",children:K.map((U,q)=>s.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[s.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:pB(U.timestamp)}),s.jsx("span",{className:fe("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",vB[U.type]),children:U.type}),s.jsx("span",{className:fe("min-w-0 flex-1 whitespace-pre-wrap break-words",xB[U.type]),children:U.message||" "})]},Rh(U,q)))})})})]})]})}const CB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],SB=450;function jB(e,n){return n&&e!=="viewer"}function NB(){const{user:e,hasPermission:n}=Ut(),a=!jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[c,d]=f.useState(null),[m,p]=f.useState(!0),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState(!1),T=f.useRef(null),A=f.useCallback(async()=>{var K;p(!0),y(""),j("");try{const q=(await Ee.getTranscriptTemplate()).data??null;if(q){const ue={...q,Typography:{...q.Typography,FontFamily:d5((K=q.Typography)==null?void 0:K.FontFamily)}};l(ue),d(structuredClone(ue))}}catch(U){y(U instanceof Error?U.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{A()},[A]);const O=f.useCallback(async K=>{k(!0);try{const U=await Ee.previewTranscriptTemplate(K);E(U)}catch{E("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{O(o)},SB),()=>{T.current&&clearTimeout(T.current)}},[o,O]);function M(K,U){l(q=>q&&xl(q,K,U))}async function z(){if(!(a||!o)){b(!0),y(""),j("");try{const K=await Ee.saveTranscriptTemplate(o);j(K.message||"Saved."),d(structuredClone(o))}catch(K){y(K instanceof Error?K.message:"Save failed")}finally{b(!1)}}}const B=o&&c&&JSON.stringify(o)!==JSON.stringify(c);return m?s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-96 rounded-xl"}),s.jsx(Be,{className:"h-96 rounded-xl"})]}):o?s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),s.jsxs("div",{className:"flex items-center gap-2",children:[B?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(he,{size:"sm",onClick:z,disabled:h||!B,children:[s.jsx(ge,{icon:nd,size:16,className:"mr-1.5"}),h?"Saving…":"Save appearance"]})]})]}),g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,w?s.jsx(We,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(Ye,{children:w})}):null,s.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[s.jsx(EB,{data:o,readOnly:a,onPatch:M}),s.jsxs(Xe,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(it,{className:"pb-2",children:[s.jsx(lt,{className:"text-base",children:"Live preview"}),s.jsxs(Et,{children:["Sample ticket with your current settings",N?" · updating…":""]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-4 pt-0",children:s.jsx("iframe",{title:"Transcript template preview",srcDoc:S,className:fe("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",N&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g||"Failed to load template"})})}function EB({data:e,readOnly:n,onPatch:a}){return s.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:CB.map(o=>s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{className:"pb-3",children:[s.jsx(lt,{className:"text-base",children:o.title}),o.description?s.jsx(Et,{children:o.description}):null]}),s.jsx(Ze,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>s.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:s.jsx(Vg,{field:l,value:To(e,l.path),readOnly:n,onChange:c=>a(l.path,c)})},l.path))})]},o.title))})}function kB(e,n){return n&&e!=="viewer"}function TB(){const{user:e,hasPermission:n}=Ut(),a=!kB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[c,d]=f.useState(!0),[m,p]=f.useState(!1),[h,b]=f.useState(!1),[g,y]=f.useState(""),[w,j]=f.useState(""),S=f.useCallback(async()=>{var k,T,A;d(!0),y(""),j("");try{const M=(await Ee.getTranscriptSettings()).data;M&&l({autoDelete:{enabled:!!((k=M.autoDelete)!=null&&k.enabled),afterDays:((T=M.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((A=M.publicAccess)!=null&&A.enabled)}})}catch(O){y(O instanceof Error?O.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(){if(!(!o||a)){p(!0),y(""),j("");try{const k=await Ee.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){y(k instanceof Error?k.message:"Failed to save settings")}finally{p(!1)}}}async function N(){var k,T;if(!a){b(!0),y(""),j("");try{const A=await Ee.purgeTranscripts();j(A.message??((k=A.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((T=A.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(A){y(A instanceof Error?A.message:"Purge failed")}finally{b(!1)}}}return c?s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-40 w-full rounded-xl"}),s.jsx(Be,{className:"h-40 w-full rounded-xl"})]}):o?s.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?s.jsx(We,{children:s.jsx(Ye,{children:"You have view-only access. An admin or editor can change these settings."})}):null,g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,w?s.jsx(We,{children:s.jsx(Ye,{children:w})}):null,s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-base",children:"Auto-delete"}),s.jsx(Et,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),s.jsxs(Ze,{className:"space-y-4",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:k.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),s.jsx(Ie,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),s.jsxs(he,{type:"button",variant:"outline",size:"sm",disabled:a||h,onClick:()=>void N(),children:[s.jsx(ge,{icon:or,size:16,className:fe(h&&"animate-spin")}),"Run cleanup now"]})]})]}),s.jsxs(Xe,{className:"border-border bg-card",children:[s.jsxs(it,{children:[s.jsx(lt,{className:"text-base",children:"Public transcripts"}),s.jsxs(Et,{children:["When enabled, anyone with the link can view a transcript at"," ",s.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),s.jsx(Ze,{children:s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(T=>T&&{...T,publicAccess:{enabled:k.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:s.jsxs(he,{type:"button",disabled:m,onClick:()=>void E(),children:[s.jsx(ge,{icon:nd,size:16}),m?"Saving…":"Save settings"]})]}):s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:"Could not load transcript settings."})})}function RB(e,n){return n&&e!=="viewer"}function T0(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function R0(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function AB(){var G;const{user:e,hasPermission:n}=Ut(),a=RB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[c,d]=f.useState([]),[m,p]=f.useState(null),[h,b]=f.useState(!0),[g,y]=f.useState(""),[w,j]=f.useState(""),[S,E]=f.useState(""),[N,k]=f.useState(0),[T,A]=f.useState(!1),[O,M]=f.useState(!1),[z,B]=f.useState(!1),[K,U]=f.useState(!1),q=f.useCallback(async()=>{b(!0),j("");try{const F=(await Ee.listTranscripts()).data??[];d(F),p(oe=>{var ae;return oe&&F.some(be=>be.id===oe)?oe:((ae=F[0])==null?void 0:ae.id)??null})}catch(V){j(V instanceof Error?V.message:"Failed to load transcripts")}finally{b(!1)}},[]);f.useEffect(()=>{q()},[q]),f.useEffect(()=>{o==="browse"&&Ee.getTranscriptSettings().then(V=>{var F,oe;B(!!((oe=(F=V.data)==null?void 0:F.publicAccess)!=null&&oe.enabled))}).catch(()=>B(!1))},[o]);const ue=f.useMemo(()=>{if(!S.trim())return c;const V=S.toLowerCase();return c.filter(F=>F.id.includes(V)||F.filename.toLowerCase().includes(V)||F.ticketName&&F.ticketName.toLowerCase().includes(V))},[c,S]),pe=f.useMemo(()=>c.find(V=>V.id===m)??null,[c,m]),xe=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,L=m&&z?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function I(V){y(""),p(V),k(F=>F+1)}function H(){xe&&window.open(xe,"_blank","noopener,noreferrer")}function Z(){L&&window.open(L,"_blank","noopener,noreferrer")}async function te(){if(L)try{await navigator.clipboard.writeText(L),U(!0),window.setTimeout(()=>U(!1),2e3)}catch{y("Could not copy link to clipboard.")}}async function _(){var F;if(!m||!a)return;const V=((F=pe==null?void 0:pe.ticketName)==null?void 0:F.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${V}? This cannot be undone.`)){M(!0),y("");try{await Ee.deleteTranscript(m),await q()}catch(oe){y(oe instanceof Error?oe.message:"Failed to delete transcript")}finally{M(!1)}}}async function D(){if(!(!se||!pe)){A(!0),y("");try{const V=await fetch(se,{credentials:"include"});if(!V.ok){const be=await V.json().catch(()=>({}));throw new Error(be.error||`Download failed (${V.status})`)}const F=await V.blob(),oe=URL.createObjectURL(F),ae=document.createElement("a");ae.href=oe,ae.download=pe.filename,ae.click(),URL.revokeObjectURL(oe)}catch(V){y(V instanceof Error?V.message:"Failed to download transcript")}finally{A(!1)}}}return s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(he,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),s.jsx(he,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),s.jsx(he,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>q(),disabled:h,children:[s.jsx(ge,{icon:or,size:16,className:fe(h&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?s.jsx(NB,{}):o==="settings"?s.jsx(TB,{}):s.jsxs(s.Fragment,{children:[w?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:w})}):null,s.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[s.jsxs(Xe,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[s.jsxs(it,{className:"space-y-3 pb-3",children:[s.jsxs(lt,{className:"text-base font-medium",children:["Saved transcripts",!h&&c.length>0?s.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",c.length,")"]}):null]}),s.jsxs("div",{className:"relative",children:[s.jsx(ge,{icon:ad,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(Ie,{placeholder:"Search by ticket name or channel ID…",value:S,onChange:V=>E(V.target.value),className:"pl-9"})]})]}),s.jsx(Ze,{className:"min-h-0 flex-1 p-0 pb-4",children:s.jsx($l,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:h?s.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((V,F)=>s.jsx(Be,{className:"h-16 w-full rounded-lg"},F))}):ue.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[s.jsx(ge,{icon:il,size:32,className:"opacity-40"}),s.jsx("p",{children:c.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):s.jsx("ul",{className:"space-y-1.5",children:ue.map(V=>{var ae;const F=V.id===m,oe=((ae=V.ticketName)==null?void 0:ae.trim())||`Channel ${V.id}`;return s.jsx("li",{children:s.jsxs("button",{type:"button",onClick:()=>I(V.id),className:fe("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",F?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[s.jsx("p",{className:"truncate text-sm font-medium",children:oe}),s.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[R0(V.createdAt),V.size!=null?` · ${T0(V.size)}`:""]})]})},V.id)})})})})]}),s.jsxs(Xe,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(it,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx(lt,{className:"truncate text-base font-medium",children:pe?((G=pe.ticketName)==null?void 0:G.trim())||`Channel ${pe.id}`:"Preview"}),pe?s.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[R0(pe.createdAt),pe.size!=null?` · ${T0(pe.size)}`:""]}):null]}),s.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[L?s.jsxs(s.Fragment,{children:[s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>void te(),children:[s.jsx(ge,{icon:t2,size:16}),K?"Copied":"Copy link"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:Z,children:[s.jsx(ge,{icon:rd,size:16}),"Public page"]})]}):null,s.jsxs(he,{variant:"outline",size:"sm",disabled:!xe,onClick:H,children:[s.jsx(ge,{icon:s8,size:16}),"Open tab"]}),s.jsxs(he,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void D(),children:[s.jsx(ge,{icon:td,size:16}),T?"Saving…":"Download"]}),a?s.jsxs(he,{variant:"outline",size:"sm",disabled:!m||O,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[s.jsx(ge,{icon:wl,size:16}),O?"Deleting…":"Delete"]}):null]})]}),s.jsxs(Ze,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[g?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:g})}):null,pe&&xe?s.jsx("iframe",{title:`Transcript ${pe.id}`,src:xe,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},N):s.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[s.jsx(ge,{icon:il,size:40,className:"opacity-30"}),s.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function MB(){const[e,n]=f.useState([]),[a,o]=f.useState(""),[l,c]=f.useState(!0),[d,m]=f.useState(""),[p,h]=f.useState(null),[b,g]=f.useState(!1),[y,w]=f.useState(!1),[j,S]=f.useState([]),[E,N]=f.useState(!1),[k,T]=f.useState(""),[A,O]=f.useState([]),[M,z]=f.useState(!1),[B,K]=f.useState(null),[U,q]=f.useState(!1),[ue,pe]=f.useState(""),[xe,se]=f.useState(null),[L,I]=f.useState(""),[H,Z]=f.useState(!1),[te,_]=f.useState(null),[D,G]=f.useState(""),[V,F]=f.useState(null),oe=ee=>{_(ee),G("Closed via Web Dashboard"),Z(!0)},ae=async()=>{if(!te)return;const ee=te.ticket_id;F(ee);try{await Ee.closeTicket(ee,D||"Closed via Web Dashboard"),Bt.success("Ticket closed and transcript saved."),n(re=>re.filter(ke=>ke.ticket_id!==ee)),(p==null?void 0:p.ticket_id)===ee&&(g(!1),w(!1),h(null)),Z(!1),_(null)}catch(re){Bt.error(re instanceof Error?re.message:"Failed to close ticket.")}finally{F(null)}},be=f.useRef(null),ve=f.useRef(null),Y=()=>{var ee;(ee=be.current)==null||ee.scrollIntoView({behavior:"smooth"})},le=f.useCallback(async()=>{c(!0),m("");try{const ee=await Ee.listOpenTickets();ee.data&&(o(ee.data.guildId),n(ee.data.tickets.sort((re,ke)=>ke.created_at-re.created_at)))}catch(ee){m(ee instanceof Error?ee.message:"Failed to load open tickets")}finally{c(!1)}},[]);f.useEffect(()=>{le()},[le]),f.useEffect(()=>{Ee.getGuildResources().then(ee=>{ee.data&&K(ee.data)}).catch(()=>{})},[]);const ye=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&(S(re=>re.some(ke=>ke.id===ee.message.id)?re:[...re,ee.message]),setTimeout(Y,100))},[p]),Te=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&S(re=>re.filter(ke=>ke.id!==ee.messageId))},[p]),Le=f.useCallback(ee=>{p&&ee.ticketId===p.ticket_id&&S(re=>re.map(ke=>ke.id===ee.messageId?{...ke,content:ee.content}:ke))},[p]),rt=f.useCallback(ee=>{n(re=>re.some(ke=>ke.ticket_id===ee.ticket_id)?re:[ee,...re]),Bt.info("New Ticket Created",{description:`#${ee.ticket_id} - ${ee.subject||"No Subject"}`})},[]),ht=f.useCallback(ee=>{n(re=>re.filter(ke=>ke.ticket_id!==ee.ticket_id)),(p==null?void 0:p.ticket_id)===ee.ticket_id&&Bt.warning("Active ticket was closed in Discord.")},[p]);Yg({onTicketMessage:ye,onTicketMessageDeleted:Te,onTicketMessageUpdated:Le,onTicketCreated:rt,onTicketClosed:ht});const Mt=async ee=>{var re;h(ee),g(!0),N(!0),S([]),O([]),se(null);try{const ke=await Ee.getTicketMessages(ee.ticket_id);(re=ke.data)!=null&&re.messages&&(S(ke.data.messages),setTimeout(Y,150))}catch(ke){Bt.error(ke instanceof Error?ke.message:"Failed to fetch messages")}finally{N(!1)}},Tr=ee=>{const re=Array.from(ee.target.files||[]);re.length&&(re.forEach(ke=>{const we=new FileReader;we.onload=De=>{var ct;const at=(ct=De.target)==null?void 0:ct.result;O(mt=>[...mt,{filename:ke.name,data:at,previewUrl:ke.type.startsWith("image/")?at:void 0,sizeMb:(ke.size/1024/1024).toFixed(2)}])},we.readAsDataURL(ke)}),ve.current&&(ve.current.value=""))},_t=ee=>{O(re=>re.filter((ke,we)=>we!==ee))},Ya=async ee=>{var we;if(ee.preventDefault(),!k.trim()&&!A.length||!p||M)return;const re=k.trim(),ke=[...A];z(!0),T(""),O([]),q(!1);try{const De=await Ee.me().catch(()=>null),at=((we=De==null?void 0:De.data)==null?void 0:we.username)||"Staff",ct=await Ee.sendTicketReply(p.ticket_id,re,at,ke.map(mt=>({filename:mt.filename,data:mt.data})));ct.data&&(S(mt=>mt.some(Zt=>Zt.id===ct.data.id)?mt:[...mt,{id:ct.data.id,author:ct.data.author,content:ct.data.content,attachments:ct.data.attachments||[],createdAt:ct.data.createdAt}]),setTimeout(Y,100))}catch(De){Bt.error(De instanceof Error?De.message:"Failed to send reply to Discord."),T(re),O(ke)}finally{z(!1)}},qa=async ee=>{if(p)try{await Ee.deleteTicketMessage(p.ticket_id,ee),S(re=>re.filter(ke=>ke.id!==ee)),Bt.success("Message deleted in Discord.")}catch(re){Bt.error(re instanceof Error?re.message:"Failed to delete message.")}},qt=ee=>{se(ee.id),I(ee.content)},dr=()=>{se(null),I("")},Kt=async ee=>{if(!(!p||!L.trim()))try{await Ee.editTicketMessage(p.ticket_id,ee,L.trim()),S(re=>re.map(ke=>ke.id===ee?{...ke,content:L.trim()}:ke)),se(null),Bt.success("Message updated in Discord.")}catch(re){Bt.error(re instanceof Error?re.message:"Failed to edit message.")}},ti=ee=>{const re=ee.target.value;T(re);const ke=ee.target.selectionStart||re.length,we=re.slice(0,ke),De=we.lastIndexOf("@");if(De!==-1&&!we.slice(De).includes(" ")){const at=we.slice(De+1).toLowerCase();pe(at),q(!0)}else q(!1)},fr=(ee,re,ke)=>{const we=k.lastIndexOf("@"),De=k.slice(0,we),at=ke?`<@&${re}>`:`<@${re}>`;T(`${De}${at} `),q(!1)},Lo=ee=>{const re=Math.floor((Date.now()-ee)/1e3);return Fh(re)},Rr=ee=>new Date(ee).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),Xt=ee=>{if(!ee)return null;const re=/(```[\s\S]*?```|`[^`]+`|\*\*\*[\s\S]+?\*\*\*|\*\*[\s\S]+?\*\*|__[\s\S]+?__|~~[\s\S]+?~~|\|\|[\s\S]+?\|\||<@!?&?\d+>|^###\s[^\n]+|^##\s[^\n]+|^-#\s[^\n]+|\[[^\]]+\]\(https?:\/\/[^\s)]+\)|https?:\/\/[^\s]+)/gm;return ee.split(re).map((we,De)=>{var Zt;if(!we)return null;if(we.startsWith("-# "))return s.jsx("span",{className:"text-xs text-muted-foreground font-medium block my-0.5 opacity-80",children:Xt(we.slice(3))},De);if(we.startsWith("## "))return s.jsx("span",{className:"text-base font-bold text-foreground block my-1 tracking-tight",children:Xt(we.slice(3))},De);if(we.startsWith("### "))return s.jsx("span",{className:"text-sm font-bold text-foreground block my-0.5",children:Xt(we.slice(4))},De);if(we.startsWith("```")&&we.endsWith("```")&&we.length>=6){const Me=we.slice(3,-3).replace(/^[a-z0-9_-]+\n/i,"");return s.jsx("pre",{className:"bg-black/60 p-2.5 rounded-lg text-xs font-mono my-1.5 border border-border overflow-x-auto text-emerald-400 font-mono",children:s.jsx("code",{children:Me})},De)}if(we.startsWith("`")&&we.endsWith("`")&&we.length>2)return s.jsx("code",{className:"bg-black/50 px-1.5 py-0.5 rounded text-xs font-mono text-emerald-300 border border-border/40",children:we.slice(1,-1)},De);if(we.startsWith("***")&&we.endsWith("***")&&we.length>6)return s.jsx("strong",{className:"font-bold italic",children:Xt(we.slice(3,-3))},De);if(we.startsWith("**")&&we.endsWith("**")&&we.length>4)return s.jsx("strong",{className:"font-bold",children:Xt(we.slice(2,-2))},De);if(we.startsWith("__")&&we.endsWith("__")&&we.length>4)return s.jsx("span",{className:"underline underline-offset-2",children:Xt(we.slice(2,-2))},De);if(we.startsWith("~~")&&we.endsWith("~~")&&we.length>4)return s.jsx("span",{className:"line-through opacity-80",children:Xt(we.slice(2,-2))},De);if(we.startsWith("||")&&we.endsWith("||")&&we.length>4)return s.jsx("span",{className:"bg-secondary text-transparent hover:text-foreground hover:bg-secondary/50 px-1.5 py-0.5 rounded transition-all cursor-pointer select-none border border-border/30",title:"Click to reveal spoiler",children:we.slice(2,-2)},De);const at=we.match(/^<@!?(\d+)>$/);if(at){const Me=at[1],Je=new Map;p&&Je.set(p.user_id,"Ticket Author"),j.forEach(kt=>{var Jn;(Jn=kt.author)!=null&&Jn.id&&Je.set(kt.author.id,kt.author.globalName||kt.author.username)});const St=Je.get(Me);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-primary/20 text-primary mx-0.5",title:`User ID: ${Me}`,children:["@",St||"User"]},De)}const ct=we.match(/^<@&(\d+)>$/);if(ct){const Me=ct[1],Je=(Zt=B==null?void 0:B.roles)==null?void 0:Zt.find(St=>St.id===Me);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-amber-500/20 text-amber-400 mx-0.5",children:["@",Je?Je.name:`Role (${Me})`]},De)}const mt=we.match(/^\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)$/);if(mt){const Me=mt[1],Je=mt[2];return s.jsx("a",{href:Je,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:Me},De)}return/^https?:\/\/[^\s]+$/i.test(we)?/\.(gif|jpe?g|png|webp)(\?[^\s]*)?$/i.test(we)||/cdn\.discordapp\.com\/(emojis|attachments)\//i.test(we)||/images\.discordapp\.net\//i.test(we)||/media\d*\.giphy\.com\//i.test(we)?s.jsx("span",{className:"block my-1",children:s.jsx("img",{src:we,alt:"GIF/Image",className:"max-h-64 rounded-lg border border-border object-contain hover:opacity-95 transition-opacity",loading:"lazy"})},De):s.jsx("a",{href:we,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:we},De):we})},Qn=ee=>!ee||ee.length===0?null:s.jsx("div",{className:"space-y-2 mt-1",children:ee.map(re=>{var at,ct,mt;const ke=((at=re.contentType)==null?void 0:at.startsWith("image/"))||/\.(png|jpe?g|gif|webp|svg)$/i.test(re.name),we=((ct=re.contentType)==null?void 0:ct.startsWith("video/"))||/\.(mp4|webm|mov|mkv)$/i.test(re.name),De=((mt=re.contentType)==null?void 0:mt.startsWith("audio/"))||/\.(mp3|wav|ogg|m4a)$/i.test(re.name);return ke?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black/40",children:s.jsx("a",{href:re.url,target:"_blank",rel:"noreferrer",children:s.jsx("img",{src:re.url,alt:re.name,className:"max-h-80 max-w-full object-contain hover:opacity-95 transition-opacity",loading:"lazy"})})},re.id):we?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black",children:s.jsx("video",{src:re.url,controls:!0,className:"max-h-80 max-w-full"})},re.id):De?s.jsx("div",{className:"p-2 border border-border rounded-lg bg-secondary/20",children:s.jsx("audio",{src:re.url,controls:!0,className:"w-full h-8"})},re.id):s.jsxs("div",{className:"p-2.5 rounded-lg border border-border bg-secondary/20 flex items-center justify-between text-xs gap-3",children:[s.jsxs("div",{className:"flex items-center gap-2 truncate",children:[s.jsx(ge,{icon:ay,size:16,className:"text-primary shrink-0"}),s.jsx("span",{className:"truncate font-medium",children:re.name})]}),s.jsx(he,{variant:"ghost",size:"sm",asChild:!0,className:"h-7 px-2 text-xs",children:s.jsx("a",{href:re.url,target:"_blank",rel:"noreferrer",download:!0,children:"Download"})})]},re.id)})}),zo=ee=>!ee||ee.length===0?null:s.jsx("div",{className:"space-y-3 mt-1.5 w-full",children:ee.map((re,ke)=>{var we,De,at,ct;return s.jsxs("div",{className:"rounded-lg border border-border/60 bg-secondary/30 p-3.5 text-xs space-y-2 border-l-4 shadow-sm relative overflow-hidden max-w-xl",style:{borderLeftColor:re.color||"#5865F2"},children:[re.author&&s.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-foreground",children:[re.author.iconURL&&s.jsx("img",{src:re.author.iconURL,alt:"",className:"h-4 w-4 rounded-full"}),s.jsx("span",{children:re.author.name})]}),((we=re.thumbnail)==null?void 0:we.url)&&s.jsx("img",{src:re.thumbnail.url,alt:"",className:"h-12 w-12 rounded object-cover absolute top-3 right-3 border border-border"}),re.title&&s.jsx("h4",{className:"font-bold text-sm text-foreground tracking-tight pr-12",children:Xt(re.title)}),re.description&&s.jsx("div",{className:"text-muted-foreground whitespace-pre-wrap leading-relaxed pr-12",children:Xt(re.description)}),re.fields&&re.fields.length>0&&s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2.5 pt-2 border-t border-border/30",children:re.fields.map((mt,Zt)=>s.jsxs("div",{className:`space-y-0.5 ${mt.inline?"":"sm:col-span-2"}`,children:[s.jsx("p",{className:"font-semibold text-foreground text-[11px] uppercase tracking-wider",children:mt.name}),s.jsx("p",{className:"text-muted-foreground whitespace-pre-wrap",children:Xt(mt.value)})]},Zt))}),((De=re.image)==null?void 0:De.url)&&s.jsx("div",{className:"rounded-md overflow-hidden border border-border mt-2",children:s.jsx("img",{src:re.image.url,alt:"",className:"max-h-64 w-full object-cover"})}),(re.footer||re.timestamp)&&s.jsxs("div",{className:"flex items-center gap-2 pt-1 border-t border-border/20 text-[10px] text-muted-foreground",children:[((at=re.footer)==null?void 0:at.iconURL)&&s.jsx("img",{src:re.footer.iconURL,alt:"",className:"h-3.5 w-3.5 rounded-full"}),((ct=re.footer)==null?void 0:ct.text)&&s.jsx("span",{children:re.footer.text}),re.timestamp&&s.jsxs("span",{children:[new Date(re.timestamp).toLocaleDateString()," ",new Date(re.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]},ke)})}),mr=ee=>{if(!ee||ee.length===0)return null;const re=ee.map(ke=>({...ke,components:(ke.components||[]).filter(we=>we.customId||we.url||we.type===2||we.type===3||we.type==="BUTTON"||we.type==="STRING_SELECT")})).filter(ke=>ke.components&&ke.components.length>0);return re.length===0?null:s.jsx("div",{className:"space-y-2 mt-2.5 w-full",children:re.map((ke,we)=>{var De;return s.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:(De=ke.components)==null?void 0:De.map((at,ct)=>s.jsxs("div",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-secondary/80 text-secondary-foreground text-xs font-semibold border border-border/80 shadow-sm hover:bg-secondary transition-colors cursor-pointer",children:[at.emoji&&s.jsx("span",{children:at.emoji}),s.jsx("span",{children:at.label||at.customId||"Button"})]},ct))},we)})})},pr=()=>s.jsx($l,{className:"flex-1 p-4 sm:p-6",children:s.jsxs("div",{className:"max-w-4xl mx-auto w-full space-y-4",children:[E?s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(Be,{className:"h-10 w-3/4"}),s.jsx(Be,{className:"h-10 w-1/2 ml-auto"}),s.jsx(Be,{className:"h-10 w-2/3"})]}):j.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground text-sm",children:"No recent messages in this ticket channel."}):j.map(ee=>{var re;return s.jsxs("div",{className:`group flex items-start gap-3 ${ee.author.isDashboard?"flex-row-reverse":""}`,children:[s.jsxs(Ia,{className:"h-8 w-8 shrink-0",children:[s.jsx(Co,{src:ee.author.avatar,alt:ee.author.username}),s.jsx($a,{children:s.jsx(ge,{icon:N8,size:16})})]}),s.jsxs("div",{className:`flex flex-col space-y-1 max-w-[80%] ${ee.author.isDashboard?"items-end":"items-start"}`,children:[s.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[s.jsx("span",{className:"font-semibold text-foreground",children:ee.author.globalName||ee.author.username}),ee.author.bot&&s.jsx(An,{variant:"secondary",className:"px-1 py-0 text-[10px]",children:"BOT"}),ee.author.isDashboard&&s.jsx(An,{variant:"default",className:"px-1 py-0 text-[10px]",children:"STAFF"}),s.jsx("span",{children:Rr(ee.createdAt)}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity ml-1",children:[s.jsx(he,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-foreground",onClick:()=>qt(ee),title:"Edit Message",children:s.jsx(ge,{icon:a2,size:12})}),s.jsx(he,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-destructive",onClick:()=>qa(ee.id),title:"Delete Message",children:s.jsx(ge,{icon:wl,size:12})})]})]}),xe===ee.id?s.jsxs("div",{className:"flex items-center gap-2 w-full mt-1",children:[s.jsx(Ie,{value:L,onChange:ke=>I(ke.target.value),className:"h-8 text-sm",autoFocus:!0}),s.jsx(he,{size:"sm",className:"h-8 px-2 bg-primary",onClick:()=>Kt(ee.id),children:s.jsx(ge,{icon:S8,size:14})}),s.jsx(he,{size:"sm",variant:"ghost",className:"h-8 px-2",onClick:dr,children:s.jsx(ge,{icon:Zr,size:14})})]}):ee.content?s.jsx("div",{className:`rounded-lg px-3.5 py-2.5 text-sm whitespace-pre-wrap ${ee.author.isDashboard?"bg-primary text-primary-foreground":"bg-secondary/40 text-secondary-foreground border border-border/50"}`,style:ee.containerColor||ee.author.bot&&!((re=ee.embeds)!=null&&re.length)?{borderLeftWidth:"4px",borderLeftColor:ee.containerColor||"#5865F2"}:void 0,children:Xt(ee.content)}):null,Qn(ee.attachments),zo(ee.embeds),mr(ee.components)]})]},ee.id)}),s.jsx("div",{ref:be})]})}),Ht=()=>{var ee;return s.jsxs("div",{className:"p-4 border-t border-border bg-secondary/10 flex flex-col gap-2 relative",children:[A.length>0&&s.jsx("div",{className:"max-w-4xl mx-auto w-full flex items-center gap-2 flex-wrap mb-1",children:A.map((re,ke)=>s.jsxs("div",{className:"flex items-center gap-2 p-1.5 px-3 rounded-lg border border-border bg-secondary text-xs",children:[re.previewUrl?s.jsx("img",{src:re.previewUrl,alt:"",className:"h-6 w-6 rounded object-cover"}):s.jsx(ge,{icon:ay,size:14,className:"text-primary"}),s.jsx("span",{className:"font-medium max-w-[120px] truncate",children:re.filename}),s.jsxs("span",{className:"text-muted-foreground text-[10px]",children:[re.sizeMb,"MB"]}),s.jsx("button",{type:"button",onClick:()=>_t(ke),className:"text-muted-foreground hover:text-destructive ml-1",children:s.jsx(ge,{icon:Zr,size:12})})]},ke))}),U&&s.jsxs("div",{className:"max-w-4xl mx-auto w-full absolute bottom-full mb-2 z-50 bg-popover text-popover-foreground border border-border rounded-xl shadow-xl overflow-hidden max-h-48 overflow-y-auto",children:[s.jsx("div",{className:"p-2 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider border-b",children:"Mentions (@)"}),p&&s.jsxs("button",{type:"button",onClick:()=>fr("Ticket Author",p.user_id,!1),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Ia,{className:"h-5 w-5",children:s.jsx($a,{children:"U"})}),s.jsx("span",{className:"font-medium",children:"Ticket Author"})]}),s.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["@",p.user_id]})]}),(ee=B==null?void 0:B.roles)==null?void 0:ee.filter(re=>re.name.toLowerCase().includes(ue)).slice(0,5).map(re=>s.jsxs("button",{type:"button",onClick:()=>fr(re.name,re.id,!0),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("span",{className:"font-medium text-amber-400",children:["@",re.name]}),s.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"Role"})]},re.id))]}),s.jsxs("form",{onSubmit:Ya,className:"max-w-4xl mx-auto w-full flex items-center gap-2",children:[s.jsx("input",{type:"file",ref:ve,multiple:!0,onChange:Tr,className:"hidden",accept:"image/*,video/*,audio/*,.pdf,.zip,.txt,.json"}),s.jsx(he,{type:"button",variant:"outline",size:"sm",onClick:()=>{var re;return(re=ve.current)==null?void 0:re.click()},title:"Attach files or media",className:"h-9 px-2.5",children:s.jsx(ge,{icon:u8,size:16})}),s.jsx(Ie,{value:k,onChange:ti,placeholder:"Type a reply... Use @ to tag roles or users",disabled:M||E,className:"flex-1"}),s.jsx(he,{type:"submit",size:"sm",disabled:M||!k.trim()&&!A.length||E,children:M?s.jsx(ge,{icon:or,size:16,className:"animate-spin"}):s.jsxs(s.Fragment,{children:[s.jsx(ge,{icon:w8,size:16,className:"mr-1.5"}),"Send"]})})]})]})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),s.jsx("p",{className:"text-muted-foreground",children:"Manage open support tickets & reply live to Discord channels from the web dashboard."})]}),s.jsxs(he,{onClick:()=>void le(),disabled:l,variant:"outline",size:"sm",children:[s.jsx(ge,{icon:or,size:16,className:l?"animate-spin mr-2":"mr-2"}),"Refresh"]})]}),s.jsx(Xe,{className:"border-border bg-card",children:s.jsx(Ze,{className:"p-0",children:l?s.jsxs("div",{className:"space-y-4 p-6",children:[s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"})]}):d?s.jsx("div",{className:"p-6",children:s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:d})})}):e.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground",children:"No open tickets at the moment!"}):s.jsx("div",{className:"divide-y divide-border",children:e.map(ee=>s.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("p",{className:"font-medium text-primary",children:ee.subject||"Untitled Ticket"}),s.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",ee.ticket_id]}),s.jsx(An,{variant:"outline",className:"text-xs capitalize",children:ee.department}),s.jsxs(An,{variant:ee.priority==="high"?"destructive":ee.priority==="medium"?"secondary":"outline",className:"text-xs capitalize",children:[ee.priority," priority"]})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",s.jsx("span",{className:"font-mono",children:ee.user_id}),ee.description&&` • ${ee.description}`]})]}),s.jsxs("div",{className:"flex items-center gap-3 w-full sm:w-auto justify-end",children:[s.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap mr-2",children:[s.jsx(ge,{icon:i8,size:14,className:"mr-1.5"}),Lo(ee.created_at)]}),s.jsxs(he,{variant:"default",size:"sm",onClick:()=>Mt(ee),className:"bg-primary text-primary-foreground hover:bg-primary/90",children:[s.jsx(ge,{icon:l8,size:16,className:"mr-2"}),"Live Chat"]}),s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(ee),disabled:V===ee.ticket_id,children:[V===ee.ticket_id?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Close"]}),a&&s.jsx(he,{variant:"secondary",size:"sm",asChild:!0,children:s.jsx("a",{href:`https://discord.com/channels/${a}/${ee.ticket_id}`,target:"_blank",rel:"noreferrer",children:s.jsx(ge,{icon:rd,size:16})})})]})]},ee.ticket_id))})})}),b&&y&&s.jsx("div",{className:"fixed inset-0 z-50 bg-black/65 backdrop-blur-sm flex items-center justify-center p-4 sm:p-6 lg:p-8 animate-in fade-in-0",onClick:ee=>{ee.target===ee.currentTarget&&w(!1)},children:s.jsxs("div",{className:"bg-card text-card-foreground border border-border rounded-2xl shadow-2xl flex flex-col w-full max-w-5xl h-[88vh] overflow-hidden animate-in zoom-in-95",children:[s.jsxs("div",{className:"p-4 border-b border-border bg-secondary/20 flex flex-col space-y-1",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx("h2",{className:"text-lg font-bold tracking-tight truncate",children:(p==null?void 0:p.subject)||"Ticket Live Chat"}),s.jsxs(An,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",p==null?void 0:p.ticket_id]}),(p==null?void 0:p.department)&&s.jsx(An,{variant:"secondary",className:"text-xs capitalize shrink-0",children:p.department})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[p&&s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(p),disabled:V===p.ticket_id,className:"h-8 px-2.5 text-xs",children:[V===p.ticket_id?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Close Ticket"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>w(!1),className:"h-8 px-3 text-xs flex items-center gap-1.5",children:[s.jsx(ge,{icon:h8,size:14}),s.jsx("span",{children:"Collapse"})]}),s.jsx(he,{variant:"ghost",size:"icon",onClick:()=>{g(!1),w(!1)},className:"h-8 w-8 text-muted-foreground hover:text-foreground",children:s.jsx(ge,{icon:Zr,size:18})})]})]}),(p==null?void 0:p.description)&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:p.description})]}),pr(),Ht()]})}),b&&!y&&s.jsx(UC,{open:b,onOpenChange:g,children:s.jsxs(bg,{side:"right",className:"w-full sm:max-w-xl p-0 flex flex-col h-full bg-card",children:[s.jsxs(yg,{className:"p-4 border-b border-border space-y-1 bg-secondary/20",children:[s.jsxs("div",{className:"flex items-center justify-between pr-8",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx(wg,{className:"text-base font-bold truncate",children:(p==null?void 0:p.subject)||"Ticket Live Chat"}),s.jsxs(An,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",p==null?void 0:p.ticket_id]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[p&&s.jsxs(he,{variant:"destructive",size:"sm",onClick:()=>oe(p),disabled:V===p.ticket_id,className:"h-7 px-2 text-xs",children:[V===p.ticket_id?s.jsx(ge,{icon:or,size:13,className:"animate-spin mr-1"}):s.jsx(ge,{icon:Zr,size:13,className:"mr-1"}),"Close"]}),s.jsxs(he,{variant:"outline",size:"sm",onClick:()=>w(!0),className:"h-7 px-2 text-xs flex items-center gap-1",title:"Open in Full View",children:[s.jsx(ge,{icon:p8,size:13}),s.jsx("span",{children:"Full View"})]})]})]}),(p==null?void 0:p.description)&&s.jsx(Cg,{className:"text-xs text-muted-foreground truncate",children:p.description})]}),pr(),Ht()]})}),s.jsx(zl,{open:H,onOpenChange:Z,children:s.jsxs(qs,{className:"sm:max-w-md bg-card border-border rounded-xl",children:[s.jsxs(Ks,{children:[s.jsxs(Xs,{className:"text-lg font-bold flex items-center gap-2",children:[s.jsx(ge,{icon:Zr,className:"text-destructive",size:20}),"Close Ticket #",te==null?void 0:te.ticket_id]}),s.jsx(Zs,{className:"text-xs text-muted-foreground pt-1",children:"Are you sure you want to close this ticket? A transcript will be created and the channel will be deleted in Discord."})]}),s.jsxs("div",{className:"space-y-2 py-2",children:[s.jsx("label",{className:"text-xs font-semibold text-foreground",children:"Reason for closing (Optional)"}),s.jsx(Ie,{value:D,onChange:ee=>G(ee.target.value),placeholder:"e.g. Issue resolved by support team",className:"text-sm"})]}),s.jsxs(Pl,{className:"gap-2 sm:gap-0 mt-2",children:[s.jsx(he,{variant:"outline",size:"sm",onClick:()=>Z(!1),disabled:!!V,children:"Cancel"}),s.jsxs(he,{variant:"destructive",size:"sm",onClick:ae,disabled:!!V,children:[V?s.jsx(ge,{icon:or,size:14,className:"animate-spin mr-1.5"}):s.jsx(ge,{icon:Zr,size:14,className:"mr-1.5"}),"Confirm Close"]})]})]})})]})}const _B=["admin","moderator","editor","viewer","custom"];function OB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:_a("viewer"),yamlOwner:!1}}function DB({permissions:e,onChange:n,disabled:a}){const o=d=>n({...e,...d}),l=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],c=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General Capabilities"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(At,{checked:e[d]??(d==="tickets"?e.overview:!1),disabled:a,onCheckedChange:h=>o({[d]:h}),className:"shrink-0"})]},d)),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(At,{checked:e.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(At,{checked:e.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(At,{checked:e.users.view,disabled:a,onCheckedChange:d=>o({users:{...e.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(At,{checked:e.users.manage,disabled:a,onCheckedChange:d=>o({users:{...e.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(([d,m,p])=>{var b;const h=((b=e.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(At,{checked:h.view,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,view:g}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(At,{checked:h.edit,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,edit:g,view:g?!0:h.view}}})})]})]})]},d)})})]})]})}function LB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function zB(){const{user:e,hasPermission:n}=Ut(),a=n("users.manage"),[o,l]=f.useState([]),[c,d]=f.useState([]),[m,p]=f.useState(!0),[h,b]=f.useState(""),[g,y]=f.useState(null),[w,j]=f.useState(!1),S=f.useCallback(async()=>{p(!0),b("");try{const[M,z]=await Promise.all([Ee.listDashboardUsers(),Ee.listGroups().catch(()=>({data:{groups:[]}}))]);M.data&&l(M.data.users),z.data&&d(z.data.groups)}catch(M){b(M instanceof Error?M.message:"Failed to load users")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);const E=f.useMemo(()=>[...o].sort((M,z)=>M.yamlOwner!==z.yamlOwner?M.yamlOwner?-1:1:(M.username||M.id).localeCompare(z.username||z.id)),[o]);function N(){y(OB())}function k(M){y({mode:"edit",id:M.id,username:M.username||"",globalName:M.globalName||"",role:M.yamlOwner?"owner":M.role,enabled:M.enabled,permissions:M.role==="custom"?M.permissions:_a(M.role),yamlOwner:M.yamlOwner})}function T(M){g&&y({...g,role:M,permissions:_a(M,g.permissions)})}async function A(){if(!(!g||!a)){j(!0),b("");try{g.mode==="add"?await Ee.addDashboardUser({id:g.id.trim(),role:g.role,username:g.username||void 0,globalName:g.globalName||void 0,enabled:g.enabled,permissions:g.role==="custom"?g.permissions:void 0}):await Ee.updateDashboardUser(g.id,{role:g.yamlOwner?void 0:g.role,enabled:g.enabled,username:g.username||void 0,globalName:g.globalName||void 0,permissions:g.role==="custom"?g.permissions:void 0}),y(null),await S()}catch(M){b(M instanceof Error?M.message:"Could not save user")}finally{j(!1)}}}async function O(M){if(a&&window.confirm("Remove this user from the dashboard?")){b("");try{await Ee.removeDashboardUser(M),await S()}catch(z){b(z instanceof Error?z.message:"Could not remove user")}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),s.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",s.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?s.jsxs(he,{onClick:N,children:[s.jsx(ge,{icon:Z0,size:16,className:"mr-2"}),"Add user"]}):null]}),h?s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:h})}):null,s.jsx(Xe,{className:"border-border bg-card overflow-hidden",children:s.jsx(Ze,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):E.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:"No users found."}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"User"}),s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Access Summary"}),s.jsx("th",{className:"px-4 py-2.5",children:"Status"}),a&&s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:E.map(M=>{const z=c.find(U=>U.id===M.groupId||U.id===M.role),B=(z==null?void 0:z.color)||"#10B981",K=(z==null?void 0:z.name)||sy[M.yamlOwner?"owner":M.role]||M.role;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs(Ia,{className:"size-7",children:[s.jsx(Co,{src:M.avatar,alt:M.username}),s.jsx($a,{className:"text-[10px]",children:(M.username||M.id).slice(0,2).toUpperCase()})]}),s.jsxs("div",{className:"min-w-0 leading-tight",children:[s.jsxs("p",{className:"truncate font-semibold text-foreground text-xs",children:[l2(M),M.id===(e==null?void 0:e.id)?s.jsx("span",{className:"text-[11px] text-primary font-normal ml-1",children:"(you)"}):""]}),s.jsx("p",{className:"truncate text-[10px] text-muted-foreground font-mono",children:M.id})]})]})}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:B}}),s.jsx("span",{className:"font-medium text-xs text-foreground",children:K}),M.yamlOwner&&s.jsx("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Config Owner"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:LB(M)}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:M.enabled?s.jsx(An,{className:"text-[10px] px-2 py-0.5 bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15 border-emerald-500/20",children:"Active"}):s.jsx(An,{variant:"outline",className:"text-[10px] px-2 py-0.5",children:"Disabled"})}),a&&s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>k(M),children:[s.jsx(ge,{icon:c8,size:13}),"Edit"]}),!M.yamlOwner&&s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>O(M.id),children:[s.jsx(ge,{icon:wl,size:13}),"Remove"]})]})})]},M.id)})})]})})})}),s.jsx(zl,{open:!!g,onOpenChange:M=>!M&&y(null),children:s.jsxs(qs,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:(g==null?void 0:g.mode)==="add"?"Add dashboard user":"Edit user"}),s.jsx(Zs,{children:g!=null&&g.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":k8[(g==null?void 0:g.role)??"viewer"]})]}),g?s.jsxs("div",{className:"space-y-4",children:[g.mode==="add"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"discord-id",children:"Discord user ID"}),s.jsx(Ie,{id:"discord-id",value:g.id,onChange:M=>y({...g,id:M.target.value}),placeholder:"829112572816130058"})]}):null,s.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Display name (optional)"}),s.jsx(Ie,{value:g.globalName,onChange:M=>y({...g,globalName:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Username (optional)"}),s.jsx(Ie,{value:g.username,onChange:M=>y({...g,username:M.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{children:"Permission Group"}),s.jsxs(No,{value:g.role,disabled:g.yamlOwner,onValueChange:M=>{const z=c.find(B=>B.id===M);z?y({...g,role:M,permissions:z.permissions}):T(M)},children:[s.jsx(Ba,{children:s.jsx(Eo,{})}),s.jsx(Ua,{children:g.yamlOwner?s.jsx(an,{value:"owner",children:"Owner"}):c.length>0?c.map(M=>s.jsx(an,{value:M.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2.5 rounded-full shrink-0",style:{backgroundColor:M.color||"#10B981"}}),s.jsx("span",{children:M.name})]})},M.id)):_B.map(M=>s.jsx(an,{value:M,children:sy[M]},M))})]})]}),s.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[s.jsx("span",{className:"text-sm",children:"Account enabled"}),s.jsx(At,{checked:g.enabled,disabled:g.yamlOwner,onCheckedChange:M=>y({...g,enabled:M})})]}),g.role==="custom"&&!g.yamlOwner?s.jsx(DB,{permissions:g.permissions,onChange:M=>y({...g,permissions:M})}):null]}):null,s.jsxs(Pl,{children:[s.jsx(he,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),s.jsx(he,{disabled:w||!a||(g==null?void 0:g.mode)==="add"&&!/^\d{17,20}$/.test(g.id.trim()),onClick:()=>void A(),children:w?"Saving…":"Save"})]})]})})]})}const PB=[{name:"Emerald",hex:"#10B981"},{name:"Blue",hex:"#3B82F6"},{name:"Purple",hex:"#8B5CF6"},{name:"Amber",hex:"#F59E0B"},{name:"Red",hex:"#EF4444"},{name:"Cyan",hex:"#06B6D4"},{name:"Gray",hex:"#6B7280"}];function IB({permissions:e,onChange:n,disabled:a}){const o=d=>n({...e,...d}),l=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],c=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General Capabilities"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(At,{checked:e[d]??(d==="tickets"?e.overview:!1),disabled:a,onCheckedChange:h=>o({[d]:h}),className:"shrink-0"})]},d)),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(At,{checked:e.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(At,{checked:e.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...e.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(At,{checked:e.users.view,disabled:a,onCheckedChange:d=>o({users:{...e.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(At,{checked:e.users.manage,disabled:a,onCheckedChange:d=>o({users:{...e.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(([d,m,p])=>{var b;const h=((b=e.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(At,{checked:h.view,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,view:g}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(At,{checked:h.edit,disabled:a,onCheckedChange:g=>o({configs:{...e.configs,[d]:{...h,edit:g,view:g?!0:h.view}}})})]})]})]},d)})})]})]})}function $B(){const{impersonateGroup:e,impersonatedGroup:n,stopImpersonation:a}=Ut(),[o,l]=f.useState([]),[c,d]=f.useState(!0),[m,p]=f.useState(null),[h,b]=f.useState(null),[g,y]=f.useState(!1),[w,j]=f.useState("add"),[S,E]=f.useState(!1),[N,k]=f.useState(""),[T,A]=f.useState(""),[O,M]=f.useState(""),[z,B]=f.useState("#10B981"),[K,U]=f.useState(""),[q,ue]=f.useState(_a("viewer")),pe=async()=>{var H;d(!0),p(null);try{const Z=await Ee.listGroups();l(((H=Z.data)==null?void 0:H.groups)||[])}catch(Z){p(Z instanceof Error?Z.message:"Failed to load groups")}finally{d(!1)}};f.useEffect(()=>{pe()},[]);const xe=()=>{j("add"),k(""),A(""),M(""),B("#10B981"),U(""),ue(_a("viewer")),y(!0)},se=H=>{j("edit"),k(H.id),A(H.name),M(H.description||""),B(H.color||"#10B981"),U(H.discordRoleId||""),ue(H.permissions||_a("viewer")),y(!0)},L=async()=>{if(!T.trim()){p("Group name is required");return}E(!0),p(null);try{w==="add"?(await Ee.createGroup({name:T.trim(),description:O.trim(),color:z,discordRoleId:K.trim()||null,permissions:q}),b(`Group "${T}" created successfully.`)):(await Ee.updateGroup(N,{name:T.trim(),description:O.trim(),color:z,discordRoleId:K.trim()||null,permissions:q}),b(`Group "${T}" updated successfully.`)),y(!1),await pe()}catch(H){p(H instanceof Error?H.message:"Failed to save group")}finally{E(!1)}},I=async H=>{if(!H.isSystem&&confirm(`Are you sure you want to delete the group "${H.name}"?`))try{await Ee.deleteGroup(H.id),b(`Group "${H.name}" deleted.`),await pe()}catch(Z){p(Z instanceof Error?Z.message:"Failed to delete group")}};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Permission Groups"}),s.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create custom permission groups, assign staff members, and optionally sync with Discord Role IDs."})]}),s.jsxs(he,{onClick:xe,className:"shrink-0 gap-2 bg-primary",children:[s.jsx(ge,{icon:Z0,size:18}),"Create Group"]})]}),m&&s.jsx(We,{variant:"destructive",children:s.jsx(Ye,{children:m})}),h&&s.jsx(We,{className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-500",children:s.jsxs(Ye,{className:"flex items-center justify-between",children:[s.jsx("span",{children:h}),s.jsx(he,{size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>b(null),children:"Dismiss"})]})}),s.jsx(Xe,{className:"border-border bg-card overflow-hidden",children:s.jsx(Ze,{className:"p-0",children:c?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):o.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:'No permission groups found. Click "Create Group" to add one.'}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Description"}),s.jsx("th",{className:"px-4 py-2.5",children:"Discord Role ID"}),s.jsx("th",{className:"px-4 py-2.5",children:"Enabled Permissions"}),s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:o.map(H=>{var Z,te,_,D,G,V,F;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"size-2.5 rounded-full shrink-0 shadow-sm",style:{backgroundColor:H.color||"#10B981"}}),s.jsx("span",{className:"text-foreground font-semibold text-xs",children:H.name}),H.isSystem&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-secondary text-secondary-foreground border border-border/80",children:[s.jsx(ge,{icon:bu,size:10}),"System"]})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:H.description||"—"}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:H.discordRoleId?s.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-muted-foreground font-mono bg-secondary/50 px-2 py-0.5 rounded border border-border/50",children:[s.jsx(ge,{icon:bu,size:12,className:"text-primary"}),H.discordRoleId]}):s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"—"})}),s.jsx("td",{className:"px-4 py-2.5",children:s.jsxs("div",{className:"flex flex-wrap gap-1 max-w-md",children:[((Z=H.permissions)==null?void 0:Z.overview)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Overview"}),(((te=H.permissions)==null?void 0:te.tickets)??((_=H.permissions)==null?void 0:_.overview))&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:"Tickets"}),((D=H.permissions)==null?void 0:D.transcripts)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-purple-500/10 text-purple-400 border border-purple-500/20",children:"Transcripts"}),((G=H.permissions)==null?void 0:G.logs)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-blue-500/10 text-blue-400 border border-blue-500/20",children:"Logs"}),((F=(V=H.permissions)==null?void 0:V.users)==null?void 0:F.manage)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20",children:"User Mgmt"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(he,{size:"sm",variant:"ghost",className:`h-7 px-2 text-xs gap-1 ${(n==null?void 0:n.id)===H.id?"text-amber-400 font-bold bg-amber-500/15 border border-amber-500/30":"text-amber-400 hover:text-amber-300 hover:bg-amber-500/10"}`,onClick:()=>(n==null?void 0:n.id)===H.id?a():e(H.id),children:[s.jsx(ge,{icon:bu,size:13}),(n==null?void 0:n.id)===H.id?"Active Preview":"View as Group"]}),!H.isSystem&&s.jsxs(s.Fragment,{children:[s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>se(H),children:[s.jsx(ge,{icon:a2,size:13}),"Edit"]}),s.jsxs(he,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>I(H),children:[s.jsx(ge,{icon:wl,size:13}),"Delete"]})]})]})})]},H.id)})})]})})})}),s.jsx(zl,{open:g,onOpenChange:y,children:s.jsxs(qs,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(Ks,{children:[s.jsx(Xs,{children:w==="add"?"Create Permission Group":`Edit Group: ${T}`}),s.jsx(Zs,{children:"Configure group metadata, custom color badge, Discord role sync, and permission rules."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-name",children:"Group Name"}),s.jsx(Ie,{id:"group-name",placeholder:"e.g. Support Staff",value:T,onChange:H=>A(H.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-color",children:"Color Badge"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(Id,{value:z,onChange:B}),s.jsx(Ie,{value:z,onChange:H=>B(H.target.value),placeholder:"#10B981",className:"w-28 font-mono text-sm uppercase"}),s.jsx("div",{className:"flex flex-wrap gap-1 ml-auto",children:PB.map(H=>s.jsx("button",{type:"button",className:"size-6 rounded-full border border-white/20 transition-transform hover:scale-110",style:{backgroundColor:H.hex},onClick:()=>B(H.hex),title:H.name},H.hex))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"group-desc",children:"Description"}),s.jsx(Ie,{id:"group-desc",placeholder:"Brief description of what members in this group can access...",value:O,onChange:H=>M(H.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(ze,{htmlFor:"discord-role-id",children:"Discord Role ID (Optional Auto-Sync)"}),s.jsx(Ie,{id:"discord-role-id",placeholder:"e.g. 123456789012345678",value:K,onChange:H=>U(H.target.value)}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"If provided, Discord users with this Role ID will automatically inherit this group upon login."})]}),s.jsxs("div",{className:"pt-2",children:[s.jsx("h4",{className:"text-sm font-semibold mb-3",children:"Group Permission Matrix"}),s.jsx(IB,{permissions:q,onChange:ue})]})]}),s.jsxs(Pl,{className:"gap-2 sm:gap-0",children:[s.jsx(he,{variant:"outline",onClick:()=>y(!1),disabled:S,children:"Cancel"}),s.jsx(he,{onClick:L,disabled:S,className:"bg-primary",children:S?"Saving...":w==="add"?"Create Group":"Save Changes"})]})]})})]})}function BB({children:e}){const{isAuthenticated:n,loading:a}=Ut();return a?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?s.jsx(s.Fragment,{children:e}):s.jsx(Qr,{to:"/login",replace:!0})}function UB(){const{complete:e,loading:n}=Pj(),a=Ln();return n?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?s.jsx(Qr,{to:"/login",replace:!0}):s.jsxs(ny,{children:[s.jsx(rn,{path:"/login",element:s.jsx(T$,{})}),s.jsxs(rn,{element:s.jsx(BB,{children:s.jsx(ND,{})}),children:[s.jsx(rn,{index:!0,element:s.jsx(Q$,{})}),s.jsx(rn,{path:"system",element:s.jsx(Kr,{permission:"overview",children:s.jsx(mB,{})})}),s.jsx(rn,{path:"settings",element:s.jsx(Kr,{permission:"settings.view",children:s.jsx(uB,{})})}),s.jsx(rn,{path:"configs",element:s.jsx(N$,{})}),s.jsx(rn,{path:"logs",element:s.jsx(Kr,{permission:"logs",children:s.jsx(wB,{})})}),s.jsx(rn,{path:"tickets",element:s.jsx(Kr,{permission:"transcripts",children:s.jsx(MB,{})})}),s.jsx(rn,{path:"transcripts",element:s.jsx(Kr,{permission:"transcripts",children:s.jsx(AB,{})})}),s.jsx(rn,{path:"users",element:s.jsx(Kr,{permission:"users.view",children:s.jsx(zB,{})})}),s.jsx(rn,{path:"groups",element:s.jsx(Kr,{permission:"users.view",children:s.jsx($B,{})})}),s.jsx(rn,{path:"addons",element:s.jsx(Kr,{permission:"settings.view",children:s.jsx(J$,{})})}),s.jsx(rn,{path:"addons/builder",element:s.jsx(Kr,{permission:"settings.update",children:s.jsx(eB,{})})})]}),s.jsx(rn,{path:"*",element:s.jsx(Qr,{to:"/",replace:!0})})]}):s.jsxs(ny,{children:[s.jsx(rn,{path:"/setup",element:s.jsx(V$,{})}),s.jsx(rn,{path:"*",element:s.jsx(Qr,{to:"/setup",replace:!0})})]})}function HB({...e}){return s.jsx(aI,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}oB();E3.createRoot(document.getElementById("root")).render(s.jsx(f.StrictMode,{children:s.jsx(ZE,{children:s.jsx(tS,{children:s.jsx(M8,{children:s.jsx(ED,{children:s.jsxs(A8,{children:[s.jsx(UB,{}),s.jsx(HB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-DW3eyGbF.css b/public/dashboard/assets/index-DW3eyGbF.css deleted file mode 100644 index 881d423..0000000 --- a/public/dashboard/assets/index-DW3eyGbF.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[50vh\]{height:50vh}.h-\[520px\]{height:520px}.h-\[88vh\]{height:88vh}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,60vh\)\]{height:min(520px,60vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-24{width:6rem}.w-28{width:7rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[160px\]{width:160px}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[432px\]{max-width:432px}.max-w-\[80\%\]{max-width:80%}.max-w-\[8rem\]{max-width:8rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-100\%\]{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/40>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .4)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-500\/20{border-color:#3b82f633}.border-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-500\/20{border-color:#a855f733}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-white\/20{border-color:#fff3}.border-l-\[\#5865F2\]{--tw-border-opacity: 1;border-left-color:rgb(88 101 242 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[\#2b2d31\]{--tw-bg-opacity: 1;background-color:rgb(43 45 49 / var(--tw-bg-opacity, 1))}.bg-\[\#313338\]{--tw-bg-opacity: 1;background-color:rgb(49 51 56 / var(--tw-bg-opacity, 1))}.bg-\[\#5865F2\]{--tw-bg-opacity: 1;background-color:rgb(88 101 242 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/65{background-color:#000000a6}.bg-black\/80{background-color:#000c}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-green-500\/10{background-color:#22c55e1a}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-secondary\/80{background-color:hsl(var(--secondary) / .8)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500\/10{--tw-gradient-from: rgb(245 158 11 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent 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-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-amber-500\/15{--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(245 158 11 / .15) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-500\/10{--tw-gradient-to: rgb(245 158 11 / .1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-3\.5{padding-left:.875rem;padding-right:.875rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Poppins,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#949ba4\]{--tw-text-opacity: 1;color:rgb(148 155 164 / var(--tw-text-opacity, 1))}.text-\[\#dbdee1\]{--tw-text-opacity: 1;color:rgb(219 222 225 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/30{color:#ffffff4d}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-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-2{--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)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-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-md{--tw-backdrop-blur: blur(12px);-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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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-1000{transition-duration:1s}.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)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.last\:border-0:last-child{border-width:0px}.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\:scale-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;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-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/10:hover{background-color:hsl(var(--secondary) / .1)}.hover\:bg-secondary\/25:hover{background-color:hsl(var(--secondary) / .25)}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-300:hover{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-95:hover{opacity:.95}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px 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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-500\/40:focus{--tw-ring-color: rgb(245 158 11 / .4)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--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))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:w-auto{width:auto}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-0{gap:0px}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-56{width:14rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.md\: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))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:pb-0{padding-bottom:0}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-Dx-VdUAO.css b/public/dashboard/assets/index-Dx-VdUAO.css new file mode 100644 index 0000000..39f4acd --- /dev/null +++ b/public/dashboard/assets/index-Dx-VdUAO.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 141 45% 49%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 141 29% 18%;--accent-foreground: 141 52% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 141 45% 49%;--radius: .75rem;--chart-1: 141 45% 49%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 141 45% 49%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 141 26% 14%;--sidebar-accent-foreground: 141 48% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 141 45% 49%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[50vh\]{height:50vh}.h-\[520px\]{height:520px}.h-\[88vh\]{height:88vh}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,60vh\)\]{height:min(520px,60vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-24{width:6rem}.w-28{width:7rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[140px\]{width:140px}.w-\[160px\]{width:160px}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[432px\]{max-width:432px}.max-w-\[80\%\]{max-width:80%}.max-w-\[8rem\]{max-width:8rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--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))}.-translate-x-px{--tw-translate-x: -1px;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))}.-translate-y-1\/2{--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))}.translate-x-\[-100\%\]{--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))}.translate-x-\[-50\%\]{--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))}.translate-x-px{--tw-translate-x: 1px;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))}.translate-y-\[-50\%\]{--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))}.-rotate-90{--tw-rotate: -90deg;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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * 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-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-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/40>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .4)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-500\/20{border-color:#3b82f633}.border-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-500\/20{border-color:#a855f733}.border-red-500\/50{border-color:#ef444480}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-white\/20{border-color:#fff3}.border-l-\[\#5865F2\]{--tw-border-opacity: 1;border-left-color:rgb(88 101 242 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0c0c10\]{--tw-bg-opacity: 1;background-color:rgb(12 12 16 / var(--tw-bg-opacity, 1))}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[\#2b2d31\]{--tw-bg-opacity: 1;background-color:rgb(43 45 49 / var(--tw-bg-opacity, 1))}.bg-\[\#313338\]{--tw-bg-opacity: 1;background-color:rgb(49 51 56 / var(--tw-bg-opacity, 1))}.bg-\[\#5865F2\]{--tw-bg-opacity: 1;background-color:rgb(88 101 242 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/65{background-color:#000000a6}.bg-black\/80{background-color:#000c}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-green-500\/10{background-color:#22c55e1a}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-secondary\/80{background-color:hsl(var(--secondary) / .8)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/5{background-color:#ffffff0d}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500\/10{--tw-gradient-from: rgb(245 158 11 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent 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-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/5{--tw-gradient-from: rgb(255 255 255 / .05) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-amber-500\/15{--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(245 158 11 / .15) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/20{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-500\/10{--tw-gradient-to: rgb(245 158 11 / .1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-white\/50{--tw-gradient-to: rgb(255 255 255 / .5) var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.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-3\.5{padding-left:.875rem;padding-right:.875rem}.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-8{padding-left:2rem;padding-right:2rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.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-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}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Poppins,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#949ba4\]{--tw-text-opacity: 1;color:rgb(148 155 164 / var(--tw-text-opacity, 1))}.text-\[\#dbdee1\]{--tw-text-opacity: 1;color:rgb(219 222 225 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/30{color:#ffffff4d}.text-white\/40{color:#fff6}.text-white\/50{color:#ffffff80}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-\[0_0_20px_rgba\(var\(--primary\)\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(var(--primary),.3);--tw-shadow-colored: 0 0 20px 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-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 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-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 #0000;--tw-shadow-colored: 0 0 #0000;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-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--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(0px + 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-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-2{--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)}.ring-primary\/20{--tw-ring-color: hsl(var(--primary) / .2)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));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)}.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-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-md{--tw-backdrop-blur: blur(12px);-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)}.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-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;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-1000{transition-duration:1s}.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)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.last\:border-0:last-child{border-width:0px}.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\:scale-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;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-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:border-primary\/40:hover{border-color:hsl(var(--primary) / .4)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/10:hover{background-color:hsl(var(--secondary) / .1)}.hover\:bg-secondary\/25:hover{background-color:hsl(var(--secondary) / .25)}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-300:hover{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-95:hover{opacity:.95}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 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)}.hover\:shadow-\[0_0_30px_rgba\(var\(--primary\)\,0\.5\)\]:hover{--tw-shadow: 0 0 30px rgba(var(--primary),.5);--tw-shadow-colored: 0 0 30px 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\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.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-500\/40:focus{--tw-ring-color: rgb(245 158 11 / .4)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(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)}.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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-\[100\%\]{--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))}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\: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)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--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))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\: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))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;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))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:w-auto{width:auto}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-\[400px\]{max-width:400px}.sm\:max-w-\[450px\]{max-width:450px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-0{gap:0px}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-56{width:14rem}.md\:w-80{width:20rem}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.md\: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))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:pb-0{padding-bottom:0}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;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))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-xYh1zX07.js b/public/dashboard/assets/index-xYh1zX07.js new file mode 100644 index 0000000..88ecbca --- /dev/null +++ b/public/dashboard/assets/index-xYh1zX07.js @@ -0,0 +1,180 @@ +var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in t?w3(t,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[n]=a;var vy=(t,n,a)=>j3(t,typeof n!="symbol"?n+"":n,a),by=(t,n,a)=>n.has(t)||xy("Cannot "+a);var pn=(t,n,a)=>(by(t,n,"read from private field"),a?a.call(t):n.get(t)),yy=(t,n,a)=>n.has(t)?xy("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,a),dp=(t,n,a,o)=>(by(t,n,"write to private field"),o?o.call(t,a):n.set(t,a),a);function C3(t,n){for(var a=0;ao[c]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))o(c);new MutationObserver(c=>{for(const l of c)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(c){const l={};return c.integrity&&(l.integrity=c.integrity),c.referrerPolicy&&(l.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?l.credentials="include":c.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(c){if(c.ep)return;c.ep=!0;const l=a(c);fetch(c.href,l)}})();function s2(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var fp={exports:{}},Sl={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var wy;function S3(){if(wy)return Sl;wy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,c,l){var d=null;if(l!==void 0&&(d=""+l),c.key!==void 0&&(d=""+c.key),"key"in c){l={};for(var m in c)m!=="key"&&(l[m]=c[m])}else l=c;return c=l.ref,{$$typeof:t,type:o,key:d,ref:c!==void 0?c:null,props:l}}return Sl.Fragment=n,Sl.jsx=a,Sl.jsxs=a,Sl}var jy;function N3(){return jy||(jy=1,fp.exports=S3()),fp.exports}var s=N3(),mp={exports:{}},Pe={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Cy;function E3(){if(Cy)return Pe;Cy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),w=Symbol.iterator;function y(O){return O===null||typeof O!="object"?null:(O=w&&O[w]||O["@@iterator"],typeof O=="function"?O:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,E={};function k(O,D,$){this.props=O,this.context=D,this.refs=E,this.updater=$||C}k.prototype.isReactComponent={},k.prototype.setState=function(O,D){if(typeof O!="object"&&typeof O!="function"&&O!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,O,D,"setState")},k.prototype.forceUpdate=function(O){this.updater.enqueueForceUpdate(this,O,"forceUpdate")};function N(){}N.prototype=k.prototype;function T(O,D,$){this.props=O,this.context=D,this.refs=E,this.updater=$||C}var M=T.prototype=new N;M.constructor=T,S(M,k.prototype),M.isPureReactComponent=!0;var _=Array.isArray;function R(){}var L={H:null,A:null,T:null,S:null},te=Object.prototype.hasOwnProperty;function K(O,D,$){var H=$.ref;return{$$typeof:t,type:O,key:D,ref:H!==void 0?H:null,props:$}}function I(O,D){return K(O.type,D,O.props)}function G(O){return typeof O=="object"&&O!==null&&O.$$typeof===t}function Y(O){var D={"=":"=0",":":"=2"};return"$"+O.replace(/[=:]/g,function($){return D[$]})}var ce=/\/+/g;function fe(O,D){return typeof O=="object"&&O!==null&&O.key!=null?Y(""+O.key):D.toString(36)}function se(O){switch(O.status){case"fulfilled":return O.value;case"rejected":throw O.reason;default:switch(typeof O.status=="string"?O.then(R,R):(O.status="pending",O.then(function(D){O.status==="pending"&&(O.status="fulfilled",O.value=D)},function(D){O.status==="pending"&&(O.status="rejected",O.reason=D)})),O.status){case"fulfilled":return O.value;case"rejected":throw O.reason}}throw O}function P(O,D,$,H,X){var xe=typeof O;(xe==="undefined"||xe==="boolean")&&(O=null);var q=!1;if(O===null)q=!0;else switch(xe){case"bigint":case"string":case"number":q=!0;break;case"object":switch(O.$$typeof){case t:case n:q=!0;break;case v:return q=O._init,P(q(O._payload),D,$,H,X)}}if(q)return X=X(O),q=H===""?"."+fe(O,0):H,_(X)?($="",q!=null&&($=q.replace(ce,"$&/")+"/"),P(X,D,$,"",function(B){return B})):X!=null&&(G(X)&&(X=I(X,$+(X.key==null||O&&O.key===X.key?"":(""+X.key).replace(ce,"$&/")+"/")+q)),D.push(X)),1;q=0;var ge=H===""?".":H+":";if(_(O))for(var me=0;me>>1,V=P[re];if(0>>1;rec($,ae))Hc(X,$)?(P[re]=X,P[H]=ae,re=H):(P[re]=$,P[D]=ae,re=D);else if(Hc(X,ae))P[re]=X,P[H]=ae,re=H;else break e}}return Z}function c(P,Z){var ae=P.sortIndex-Z.sortIndex;return ae!==0?ae:P.id-Z.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var p=[],g=[],v=1,b=null,w=3,y=!1,C=!1,S=!1,E=!1,k=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function M(P){for(var Z=a(g);Z!==null;){if(Z.callback===null)o(g);else if(Z.startTime<=P)o(g),Z.sortIndex=Z.expirationTime,n(p,Z);else break;Z=a(g)}}function _(P){if(S=!1,M(P),!C)if(a(p)!==null)C=!0,R||(R=!0,Y());else{var Z=a(g);Z!==null&&se(_,Z.startTime-P)}}var R=!1,L=-1,te=5,K=-1;function I(){return E?!0:!(t.unstable_now()-KP&&I());){var re=b.callback;if(typeof re=="function"){b.callback=null,w=b.priorityLevel;var V=re(b.expirationTime<=P);if(P=t.unstable_now(),typeof V=="function"){b.callback=V,M(P),Z=!0;break t}b===a(p)&&o(p),M(P)}else o(p);b=a(p)}if(b!==null)Z=!0;else{var O=a(g);O!==null&&se(_,O.startTime-P),Z=!1}}break e}finally{b=null,w=ae,y=!1}Z=void 0}}finally{Z?Y():R=!1}}}var Y;if(typeof T=="function")Y=function(){T(G)};else if(typeof MessageChannel<"u"){var ce=new MessageChannel,fe=ce.port2;ce.port1.onmessage=G,Y=function(){fe.postMessage(null)}}else Y=function(){k(G,0)};function se(P,Z){L=k(function(){P(t.unstable_now())},Z)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(P){P.callback=null},t.unstable_forceFrameRate=function(P){0>P||125re?(P.sortIndex=ae,n(g,P),a(p)===null&&P===a(g)&&(S?(N(L),L=-1):S=!0,se(_,ae-re))):(P.sortIndex=V,n(p,P),C||y||(C=!0,R||(R=!0,Y()))),P},t.unstable_shouldYield=I,t.unstable_wrapCallback=function(P){var Z=w;return function(){var ae=w;w=Z;try{return P.apply(this,arguments)}finally{w=ae}}}})(gp)),gp}var Ey;function T3(){return Ey||(Ey=1,hp.exports=k3()),hp.exports}var xp={exports:{}},hn={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ky;function M3(){if(ky)return hn;ky=1;var t=Xh();function n(p){var g="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),xp.exports=M3(),xp.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var My;function R3(){if(My)return Nl;My=1;var t=T3(),n=Xh(),a=o2();function o(e){var r="https://react.dev/errors/"+e;if(1V||(e.current=re[V],re[V]=null,V--)}function $(e,r){V++,re[V]=e.current,e.current=r}var H=O(null),X=O(null),xe=O(null),q=O(null);function ge(e,r){switch($(xe,r),$(X,e),$(H,null),r.nodeType){case 9:case 11:e=(e=r.documentElement)&&(e=e.namespaceURI)?Bb(e):0;break;default:if(e=r.tagName,r=r.namespaceURI)r=Bb(r),e=$b(r,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(H),$(H,e)}function me(){D(H),D(X),D(xe)}function B(e){e.memoizedState!==null&&$(q,e);var r=H.current,i=$b(r,e.type);r!==i&&($(X,e),$(H,i))}function ie(e){X.current===e&&(D(H),D(X)),q.current===e&&(D(q),yl._currentValue=ae)}var we,Ce;function ze(e){if(we===void 0)try{throw Error()}catch(i){var r=i.stack.trim().match(/\n( *(at )?)/);we=r&&r[1]||"",Ce=-1)":-1h||z[u]!==J[h]){var le=` +`+z[u].replace(" at new "," at ");return e.displayName&&le.includes("")&&(le=le.replace("",e.displayName)),le}while(1<=u&&0<=h);break}}}finally{Ke=!1,Error.prepareStackTrace=i}return(i=e?e.displayName||e.name:"")?ze(i):""}function Pt(e,r){switch(e.tag){case 26:case 27:case 5:return ze(e.type);case 16:return ze("Lazy");case 13:return e.child!==r&&r!==null?ze("Suspense Fallback"):ze("Suspense");case 19:return ze("SuspenseList");case 0:case 15:return ft(e.type,!1);case 11:return ft(e.type.render,!1);case 1:return ft(e.type,!0);case 31:return ze("Activity");default:return""}}function gn(e){try{var r="",i=null;do r+=Pt(e,i),i=e,e=e.return;while(e);return r}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var Yr=Object.prototype.hasOwnProperty,_n=t.unstable_scheduleCallback,wn=t.unstable_cancelCallback,Xn=t.unstable_shouldYield,Zn=t.unstable_requestPaint,It=t.unstable_now,po=t.unstable_getCurrentPriorityLevel,nn=t.unstable_ImmediatePriority,Dn=t.unstable_UserBlockingPriority,Da=t.unstable_NormalPriority,ho=t.unstable_LowPriority,Qn=t.unstable_IdlePriority,Es=t.log,qr=t.unstable_setDisableYieldValue,gr=null,Tt=null;function On(e){if(typeof Es=="function"&&qr(e),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode(gr,e)}catch{}}var Mt=Math.clz32?Math.clz32:go,Oi=Math.log,Li=Math.LN2;function go(e){return e>>>=0,e===0?32:31-(Oi(e)/Li|0)|0}var Kr=256,Oa=262144,Mr=4194304;function Kt(e){var r=e&42;if(r!==0)return r;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function La(e,r,i){var u=e.pendingLanes;if(u===0)return 0;var h=0,x=e.suspendedLanes,j=e.pingedLanes;e=e.warmLanes;var A=u&134217727;return A!==0?(u=A&~x,u!==0?h=Kt(u):(j&=A,j!==0?h=Kt(j):i||(i=A&~e,i!==0&&(h=Kt(i))))):(A=u&~x,A!==0?h=Kt(A):j!==0?h=Kt(j):i||(i=u&~e,i!==0&&(h=Kt(i)))),h===0?0:r!==0&&r!==h&&(r&x)===0&&(x=h&-h,i=r&-r,x>=i||x===32&&(i&4194048)!==0)?r:h}function Oe(e,r){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&r)===0}function tt(e,r){switch(e){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function it(){var e=Mr;return Mr<<=1,(Mr&62914560)===0&&(Mr=4194304),e}function rn(e){for(var r=[],i=0;31>i;i++)r.push(e);return r}function Ft(e,r){e.pendingLanes|=r,r!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Rt(e,r,i,u,h,x){var j=e.pendingLanes;e.pendingLanes=i,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=i,e.entangledLanes&=i,e.errorRecoveryDisabledLanes&=i,e.shellSuspendCounter=0;var A=e.entanglements,z=e.expirationTimes,J=e.hiddenUpdates;for(i=j&~i;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var h5=/[\n"\\]/g;function tr(e){return e.replace(h5,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function af(e,r,i,u,h,x,j,A){e.name="",j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"?e.type=j:e.removeAttribute("type"),r!=null?j==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+er(r)):e.value!==""+er(r)&&(e.value=""+er(r)):j!=="submit"&&j!=="reset"||e.removeAttribute("value"),r!=null?sf(e,j,er(r)):i!=null?sf(e,j,er(i)):u!=null&&e.removeAttribute("value"),h==null&&x!=null&&(e.defaultChecked=!!x),h!=null&&(e.checked=h&&typeof h!="function"&&typeof h!="symbol"),A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.name=""+er(A):e.removeAttribute("name")}function Ox(e,r,i,u,h,x,j,A){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(e.type=x),r!=null||i!=null){if(!(x!=="submit"&&x!=="reset"||r!=null)){rf(e);return}i=i!=null?""+er(i):"",r=r!=null?""+er(r):i,A||r===e.value||(e.value=r),e.defaultValue=r}u=u??h,u=typeof u!="function"&&typeof u!="symbol"&&!!u,e.checked=A?e.checked:!!u,e.defaultChecked=!!u,j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"&&(e.name=j),rf(e)}function sf(e,r,i){r==="number"&&xc(e.ownerDocument)===e||e.defaultValue===""+i||(e.defaultValue=""+i)}function wo(e,r,i,u){if(e=e.options,r){r={};for(var h=0;h"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),df=!1;if(Jr)try{var Ii={};Object.defineProperty(Ii,"passive",{get:function(){df=!0}}),window.addEventListener("test",Ii,Ii),window.removeEventListener("test",Ii,Ii)}catch{df=!1}var za=null,ff=null,bc=null;function $x(){if(bc)return bc;var e,r=ff,i=r.length,u,h="value"in za?za.value:za.textContent,x=h.length;for(e=0;e=$i),qx=" ",Kx=!1;function Wx(e,r){switch(e){case"keyup":return G5.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xx(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var No=!1;function F5(e,r){switch(e){case"compositionend":return Xx(r);case"keypress":return r.which!==32?null:(Kx=!0,qx);case"textInput":return e=r.data,e===qx&&Kx?null:e;default:return null}}function Y5(e,r){if(No)return e==="compositionend"||!xf&&Wx(e,r)?(e=$x(),bc=ff=za=null,No=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:i,offset:r-e};e=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=a1(i)}}function o1(e,r){return e&&r?e===r?!0:e&&e.nodeType===3?!1:r&&r.nodeType===3?o1(e,r.parentNode):"contains"in e?e.contains(r):e.compareDocumentPosition?!!(e.compareDocumentPosition(r)&16):!1:!1}function i1(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var r=xc(e.document);r instanceof e.HTMLIFrameElement;){try{var i=typeof r.contentWindow.location.href=="string"}catch{i=!1}if(i)e=r.contentWindow;else break;r=xc(e.document)}return r}function yf(e){var r=e&&e.nodeName&&e.nodeName.toLowerCase();return r&&(r==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||r==="textarea"||e.contentEditable==="true")}var e4=Jr&&"documentMode"in document&&11>=document.documentMode,Eo=null,wf=null,Fi=null,jf=!1;function l1(e,r,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;jf||Eo==null||Eo!==xc(u)||(u=Eo,"selectionStart"in u&&yf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Fi&&Vi(Fi,u)||(Fi=u,u=fu(wf,"onSelect"),0>=j,h-=j,Ar=1<<32-Mt(r)+h|i<$e?(Xe=ke,ke=null):Xe=ke.sibling;var at=ee(F,ke,Q[$e],de);if(at===null){ke===null&&(ke=Xe);break}e&&ke&&at.alternate===null&&r(F,ke),U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at,ke=Xe}if($e===Q.length)return i(F,ke),Je&&ta(F,$e),Ae;if(ke===null){for(;$e$e?(Xe=ke,ke=null):Xe=ke.sibling;var as=ee(F,ke,at.value,de);if(as===null){ke===null&&(ke=Xe);break}e&&ke&&as.alternate===null&&r(F,ke),U=x(as,U,$e),rt===null?Ae=as:rt.sibling=as,rt=as,ke=Xe}if(at.done)return i(F,ke),Je&&ta(F,$e),Ae;if(ke===null){for(;!at.done;$e++,at=Q.next())at=he(F,at.value,de),at!==null&&(U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at);return Je&&ta(F,$e),Ae}for(ke=u(ke);!at.done;$e++,at=Q.next())at=ne(ke,F,$e,at.value,de),at!==null&&(e&&at.alternate!==null&&ke.delete(at.key===null?$e:at.key),U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at);return e&&ke.forEach(function(y3){return r(F,y3)}),Je&&ta(F,$e),Ae}function gt(F,U,Q,de){if(typeof Q=="object"&&Q!==null&&Q.type===S&&Q.key===null&&(Q=Q.props.children),typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case y:e:{for(var Ae=Q.key;U!==null;){if(U.key===Ae){if(Ae=Q.type,Ae===S){if(U.tag===7){i(F,U.sibling),de=h(U,Q.props.children),de.return=F,F=de;break e}}else if(U.elementType===Ae||typeof Ae=="object"&&Ae!==null&&Ae.$$typeof===te&&Ps(Ae)===U.type){i(F,U.sibling),de=h(U,Q.props),Zi(de,Q),de.return=F,F=de;break e}i(F,U);break}else r(F,U);U=U.sibling}Q.type===S?(de=_s(Q.props.children,F.mode,de,Q.key),de.return=F,F=de):(de=Mc(Q.type,Q.key,Q.props,null,F.mode,de),Zi(de,Q),de.return=F,F=de)}return j(F);case C:e:{for(Ae=Q.key;U!==null;){if(U.key===Ae)if(U.tag===4&&U.stateNode.containerInfo===Q.containerInfo&&U.stateNode.implementation===Q.implementation){i(F,U.sibling),de=h(U,Q.children||[]),de.return=F,F=de;break e}else{i(F,U);break}else r(F,U);U=U.sibling}de=Mf(Q,F.mode,de),de.return=F,F=de}return j(F);case te:return Q=Ps(Q),gt(F,U,Q,de)}if(se(Q))return Ee(F,U,Q,de);if(Y(Q)){if(Ae=Y(Q),typeof Ae!="function")throw Error(o(150));return Q=Ae.call(Q),Le(F,U,Q,de)}if(typeof Q.then=="function")return gt(F,U,zc(Q),de);if(Q.$$typeof===T)return gt(F,U,_c(F,Q),de);Pc(F,Q)}return typeof Q=="string"&&Q!==""||typeof Q=="number"||typeof Q=="bigint"?(Q=""+Q,U!==null&&U.tag===6?(i(F,U.sibling),de=h(U,Q),de.return=F,F=de):(i(F,U),de=Tf(Q,F.mode,de),de.return=F,F=de),j(F)):i(F,U)}return function(F,U,Q,de){try{Xi=0;var Ae=gt(F,U,Q,de);return Po=null,Ae}catch(ke){if(ke===zo||ke===Oc)throw ke;var rt=Pn(29,ke,null,F.mode);return rt.lanes=de,rt.return=F,rt}finally{}}}var Us=A1(!0),_1=A1(!1),$a=!1;function $f(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hf(e,r){e=e.updateQueue,r.updateQueue===e&&(r.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ha(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,r,i){var u=e.updateQueue;if(u===null)return null;if(u=u.shared,(ot&2)!==0){var h=u.pending;return h===null?r.next=r:(r.next=h.next,h.next=r),u.pending=r,r=Tc(e),h1(e,null,i),r}return kc(e,u,r,i),Tc(e)}function Qi(e,r,i){if(r=r.updateQueue,r!==null&&(r=r.shared,(i&4194048)!==0)){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,fn(e,i)}}function Gf(e,r){var i=e.updateQueue,u=e.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var h=null,x=null;if(i=i.firstBaseUpdate,i!==null){do{var j={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};x===null?h=x=j:x=x.next=j,i=i.next}while(i!==null);x===null?h=x=r:x=x.next=r}else h=x=r;i={baseState:u.baseState,firstBaseUpdate:h,lastBaseUpdate:x,shared:u.shared,callbacks:u.callbacks},e.updateQueue=i;return}e=i.lastBaseUpdate,e===null?i.firstBaseUpdate=r:e.next=r,i.lastBaseUpdate=r}var Vf=!1;function Ji(){if(Vf){var e=Lo;if(e!==null)throw e}}function el(e,r,i,u){Vf=!1;var h=e.updateQueue;$a=!1;var x=h.firstBaseUpdate,j=h.lastBaseUpdate,A=h.shared.pending;if(A!==null){h.shared.pending=null;var z=A,J=z.next;z.next=null,j===null?x=J:j.next=J,j=z;var le=e.alternate;le!==null&&(le=le.updateQueue,A=le.lastBaseUpdate,A!==j&&(A===null?le.firstBaseUpdate=J:A.next=J,le.lastBaseUpdate=z))}if(x!==null){var he=h.baseState;j=0,le=J=z=null,A=x;do{var ee=A.lane&-536870913,ne=ee!==A.lane;if(ne?(We&ee)===ee:(u&ee)===ee){ee!==0&&ee===Oo&&(Vf=!0),le!==null&&(le=le.next={lane:0,tag:A.tag,payload:A.payload,callback:null,next:null});e:{var Ee=e,Le=A;ee=r;var gt=i;switch(Le.tag){case 1:if(Ee=Le.payload,typeof Ee=="function"){he=Ee.call(gt,he,ee);break e}he=Ee;break e;case 3:Ee.flags=Ee.flags&-65537|128;case 0:if(Ee=Le.payload,ee=typeof Ee=="function"?Ee.call(gt,he,ee):Ee,ee==null)break e;he=b({},he,ee);break e;case 2:$a=!0}}ee=A.callback,ee!==null&&(e.flags|=64,ne&&(e.flags|=8192),ne=h.callbacks,ne===null?h.callbacks=[ee]:ne.push(ee))}else ne={lane:ee,tag:A.tag,payload:A.payload,callback:A.callback,next:null},le===null?(J=le=ne,z=he):le=le.next=ne,j|=ee;if(A=A.next,A===null){if(A=h.shared.pending,A===null)break;ne=A,A=ne.next,ne.next=null,h.lastBaseUpdate=ne,h.shared.pending=null}}while(!0);le===null&&(z=he),h.baseState=z,h.firstBaseUpdate=J,h.lastBaseUpdate=le,x===null&&(h.shared.lanes=0),Ka|=j,e.lanes=j,e.memoizedState=he}}function D1(e,r){if(typeof e!="function")throw Error(o(191,e));e.call(r)}function O1(e,r){var i=e.callbacks;if(i!==null)for(e.callbacks=null,e=0;ex?x:8;var j=P.T,A={};P.T=A,cm(e,!1,r,i);try{var z=h(),J=P.S;if(J!==null&&J(A,z),z!==null&&typeof z=="object"&&typeof z.then=="function"){var le=c4(z,u);rl(e,r,le,Hn(e))}else rl(e,r,u,Hn(e))}catch(he){rl(e,r,{then:function(){},status:"rejected",reason:he},Hn())}finally{Z.p=x,j!==null&&A.types!==null&&(j.types=A.types),P.T=j}}function h4(){}function im(e,r,i,u){if(e.tag!==5)throw Error(o(476));var h=fv(e).queue;dv(e,h,r,ae,i===null?h4:function(){return mv(e),i(u)})}function fv(e){var r=e.memoizedState;if(r!==null)return r;r={memoizedState:ae,baseState:ae,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:ae},next:null};var i={};return r.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:i},next:null},e.memoizedState=r,e=e.alternate,e!==null&&(e.memoizedState=r),r}function mv(e){var r=fv(e);r.next===null&&(r=e.alternate.memoizedState),rl(e,r.next.queue,{},Hn())}function lm(){return sn(yl)}function pv(){return zt().memoizedState}function hv(){return zt().memoizedState}function g4(e){for(var r=e.return;r!==null;){switch(r.tag){case 24:case 3:var i=Hn();e=Ha(i);var u=Ga(r,e,i);u!==null&&(kn(u,r,i),Qi(u,r,i)),r={cache:Pf()},e.payload=r;return}r=r.return}}function x4(e,r,i){var u=Hn();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},qc(e)?xv(r,i):(i=Ef(e,r,i,u),i!==null&&(kn(i,e,u),vv(i,r,u)))}function gv(e,r,i){var u=Hn();rl(e,r,i,u)}function rl(e,r,i,u){var h={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(qc(e))xv(r,h);else{var x=e.alternate;if(e.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var j=r.lastRenderedState,A=x(j,i);if(h.hasEagerState=!0,h.eagerState=A,zn(A,j))return kc(e,r,h,0),xt===null&&Ec(),!1}catch{}finally{}if(i=Ef(e,r,h,u),i!==null)return kn(i,e,u),vv(i,r,u),!0}return!1}function cm(e,r,i,u){if(u={lane:2,revertLane:$m(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},qc(e)){if(r)throw Error(o(479))}else r=Ef(e,i,u,2),r!==null&&kn(r,e,2)}function qc(e){var r=e.alternate;return e===Ue||r!==null&&r===Ue}function xv(e,r){Uo=Bc=!0;var i=e.pending;i===null?r.next=r:(r.next=i.next,i.next=r),e.pending=r}function vv(e,r,i){if((i&4194048)!==0){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,fn(e,i)}}var al={readContext:sn,use:Gc,useCallback:At,useContext:At,useEffect:At,useImperativeHandle:At,useLayoutEffect:At,useInsertionEffect:At,useMemo:At,useReducer:At,useRef:At,useState:At,useDebugValue:At,useDeferredValue:At,useTransition:At,useSyncExternalStore:At,useId:At,useHostTransitionStatus:At,useFormState:At,useActionState:At,useOptimistic:At,useMemoCache:At,useCacheRefresh:At};al.useEffectEvent=At;var bv={readContext:sn,use:Gc,useCallback:function(e,r){return vn().memoizedState=[e,r===void 0?null:r],e},useContext:sn,useEffect:nv,useImperativeHandle:function(e,r,i){i=i!=null?i.concat([e]):null,Fc(4194308,4,ov.bind(null,r,e),i)},useLayoutEffect:function(e,r){return Fc(4194308,4,e,r)},useInsertionEffect:function(e,r){Fc(4,2,e,r)},useMemo:function(e,r){var i=vn();r=r===void 0?null:r;var u=e();if(Bs){On(!0);try{e()}finally{On(!1)}}return i.memoizedState=[u,r],u},useReducer:function(e,r,i){var u=vn();if(i!==void 0){var h=i(r);if(Bs){On(!0);try{i(r)}finally{On(!1)}}}else h=r;return u.memoizedState=u.baseState=h,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:h},u.queue=e,e=e.dispatch=x4.bind(null,Ue,e),[u.memoizedState,e]},useRef:function(e){var r=vn();return e={current:e},r.memoizedState=e},useState:function(e){e=nm(e);var r=e.queue,i=gv.bind(null,Ue,r);return r.dispatch=i,[e.memoizedState,i]},useDebugValue:sm,useDeferredValue:function(e,r){var i=vn();return om(i,e,r)},useTransition:function(){var e=nm(!1);return e=dv.bind(null,Ue,e.queue,!0,!1),vn().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,r,i){var u=Ue,h=vn();if(Je){if(i===void 0)throw Error(o(407));i=i()}else{if(i=r(),xt===null)throw Error(o(349));(We&127)!==0||B1(u,r,i)}h.memoizedState=i;var x={value:i,getSnapshot:r};return h.queue=x,nv(H1.bind(null,u,x,e),[e]),u.flags|=2048,$o(9,{destroy:void 0},$1.bind(null,u,x,i,r),null),i},useId:function(){var e=vn(),r=xt.identifierPrefix;if(Je){var i=_r,u=Ar;i=(u&~(1<<32-Mt(u)-1)).toString(32)+i,r="_"+r+"R_"+i,i=$c++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof u.is=="string"?j.createElement("select",{is:u.is}):j.createElement("select"),u.multiple?x.multiple=!0:u.size&&(x.size=u.size);break;default:x=typeof u.is=="string"?j.createElement(h,{is:u.is}):j.createElement(h)}}x[ye]=r,x[Re]=u;e:for(j=r.child;j!==null;){if(j.tag===5||j.tag===6)x.appendChild(j.stateNode);else if(j.tag!==4&&j.tag!==27&&j.child!==null){j.child.return=j,j=j.child;continue}if(j===r)break e;for(;j.sibling===null;){if(j.return===null||j.return===r)break e;j=j.return}j.sibling.return=j.return,j=j.sibling}r.stateNode=x;e:switch(ln(x,h,u),h){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ia(r)}}return wt(r),Cm(r,r.type,e===null?null:e.memoizedProps,r.pendingProps,i),null;case 6:if(e&&r.stateNode!=null)e.memoizedProps!==u&&ia(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(e=xe.current,_o(r)){if(e=r.stateNode,i=r.memoizedProps,u=null,h=an,h!==null)switch(h.tag){case 27:case 5:u=h.memoizedProps}e[ye]=r,e=!!(e.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||Ib(e.nodeValue,i)),e||Ua(r,!0)}else e=mu(e).createTextNode(u),e[ye]=r,r.stateNode=e}return wt(r),null;case 31:if(i=r.memoizedState,e===null||e.memoizedState!==null){if(u=_o(r),i!==null){if(e===null){if(!u)throw Error(o(318));if(e=r.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[ye]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;wt(r),e=!1}else i=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),e=!0;if(!e)return r.flags&256?(Un(r),r):(Un(r),null);if((r.flags&128)!==0)throw Error(o(558))}return wt(r),null;case 13:if(u=r.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(h=_o(r),u!==null&&u.dehydrated!==null){if(e===null){if(!h)throw Error(o(318));if(h=r.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(o(317));h[ye]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;wt(r),h=!1}else h=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=h),h=!0;if(!h)return r.flags&256?(Un(r),r):(Un(r),null)}return Un(r),(r.flags&128)!==0?(r.lanes=i,r):(i=u!==null,e=e!==null&&e.memoizedState!==null,i&&(u=r.child,h=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(h=u.alternate.memoizedState.cachePool.pool),x=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(x=u.memoizedState.cachePool.pool),x!==h&&(u.flags|=2048)),i!==e&&i&&(r.child.flags|=8192),Qc(r,r.updateQueue),wt(r),null);case 4:return me(),e===null&&Fm(r.stateNode.containerInfo),wt(r),null;case 10:return ra(r.type),wt(r),null;case 19:if(D(Lt),u=r.memoizedState,u===null)return wt(r),null;if(h=(r.flags&128)!==0,x=u.rendering,x===null)if(h)ol(u,!1);else{if(_t!==0||e!==null&&(e.flags&128)!==0)for(e=r.child;e!==null;){if(x=Uc(e),x!==null){for(r.flags|=128,ol(u,!1),e=x.updateQueue,r.updateQueue=e,Qc(r,e),r.subtreeFlags=0,e=i,i=r.child;i!==null;)g1(i,e),i=i.sibling;return $(Lt,Lt.current&1|2),Je&&ta(r,u.treeForkCount),r.child}e=e.sibling}u.tail!==null&&It()>ru&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304)}else{if(!h)if(e=Uc(x),e!==null){if(r.flags|=128,h=!0,e=e.updateQueue,r.updateQueue=e,Qc(r,e),ol(u,!0),u.tail===null&&u.tailMode==="hidden"&&!x.alternate&&!Je)return wt(r),null}else 2*It()-u.renderingStartTime>ru&&i!==536870912&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304);u.isBackwards?(x.sibling=r.child,r.child=x):(e=u.last,e!==null?e.sibling=x:r.child=x,u.last=x)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=It(),e.sibling=null,i=Lt.current,$(Lt,h?i&1|2:i&1),Je&&ta(r,u.treeForkCount),e):(wt(r),null);case 22:case 23:return Un(r),Yf(),u=r.memoizedState!==null,e!==null?e.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(i&536870912)!==0&&(r.flags&128)===0&&(wt(r),r.subtreeFlags&6&&(r.flags|=8192)):wt(r),i=r.updateQueue,i!==null&&Qc(r,i.retryQueue),i=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(i=e.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==i&&(r.flags|=2048),e!==null&&D(zs),null;case 24:return i=null,e!==null&&(i=e.memoizedState.cache),r.memoizedState.cache!==i&&(r.flags|=2048),ra(Ut),wt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function j4(e,r){switch(Af(r),r.tag){case 1:return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return ra(Ut),me(),e=r.flags,(e&65536)!==0&&(e&128)===0?(r.flags=e&-65537|128,r):null;case 26:case 27:case 5:return ie(r),null;case 31:if(r.memoizedState!==null){if(Un(r),r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 13:if(Un(r),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return D(Lt),null;case 4:return me(),null;case 10:return ra(r.type),null;case 22:case 23:return Un(r),Yf(),e!==null&&D(zs),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 24:return ra(Ut),null;case 25:return null;default:return null}}function Gv(e,r){switch(Af(r),r.tag){case 3:ra(Ut),me();break;case 26:case 27:case 5:ie(r);break;case 4:me();break;case 31:r.memoizedState!==null&&Un(r);break;case 13:Un(r);break;case 19:D(Lt);break;case 10:ra(r.type);break;case 22:case 23:Un(r),Yf(),e!==null&&D(zs);break;case 24:ra(Ut)}}function il(e,r){try{var i=r.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var h=u.next;i=h;do{if((i.tag&e)===e){u=void 0;var x=i.create,j=i.inst;u=x(),j.destroy=u}i=i.next}while(i!==h)}}catch(A){ct(r,r.return,A)}}function Ya(e,r,i){try{var u=r.updateQueue,h=u!==null?u.lastEffect:null;if(h!==null){var x=h.next;u=x;do{if((u.tag&e)===e){var j=u.inst,A=j.destroy;if(A!==void 0){j.destroy=void 0,h=r;var z=i,J=A;try{J()}catch(le){ct(h,z,le)}}}u=u.next}while(u!==x)}}catch(le){ct(r,r.return,le)}}function Vv(e){var r=e.updateQueue;if(r!==null){var i=e.stateNode;try{O1(r,i)}catch(u){ct(e,e.return,u)}}}function Fv(e,r,i){i.props=$s(e.type,e.memoizedProps),i.state=e.memoizedState;try{i.componentWillUnmount()}catch(u){ct(e,r,u)}}function ll(e,r){try{var i=e.ref;if(i!==null){switch(e.tag){case 26:case 27:case 5:var u=e.stateNode;break;case 30:u=e.stateNode;break;default:u=e.stateNode}typeof i=="function"?e.refCleanup=i(u):i.current=u}}catch(h){ct(e,r,h)}}function Dr(e,r){var i=e.ref,u=e.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(h){ct(e,r,h)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(h){ct(e,r,h)}else i.current=null}function Yv(e){var r=e.type,i=e.memoizedProps,u=e.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break e;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(h){ct(e,e.return,h)}}function Sm(e,r,i){try{var u=e.stateNode;V4(u,e.type,i,r),u[Re]=r}catch(h){ct(e,e.return,h)}}function qv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Ja(e.type)||e.tag===4}function Nm(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||qv(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.tag===27&&Ja(e.type)||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 Em(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(e,r):(r=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,r.appendChild(e),i=i._reactRootContainer,i!=null||r.onclick!==null||(r.onclick=Qr));else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode,r=null),e=e.child,e!==null))for(Em(e,r,i),e=e.sibling;e!==null;)Em(e,r,i),e=e.sibling}function Jc(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?i.insertBefore(e,r):i.appendChild(e);else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode),e=e.child,e!==null))for(Jc(e,r,i),e=e.sibling;e!==null;)Jc(e,r,i),e=e.sibling}function Kv(e){var r=e.stateNode,i=e.memoizedProps;try{for(var u=e.type,h=r.attributes;h.length;)r.removeAttributeNode(h[0]);ln(r,u,i),r[ye]=e,r[Re]=i}catch(x){ct(e,e.return,x)}}var la=!1,Ht=!1,km=!1,Wv=typeof WeakSet=="function"?WeakSet:Set,Xt=null;function C4(e,r){if(e=e.containerInfo,Km=yu,e=i1(e),yf(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else e:{i=(i=e.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var h=u.anchorOffset,x=u.focusNode;u=u.focusOffset;try{i.nodeType,x.nodeType}catch{i=null;break e}var j=0,A=-1,z=-1,J=0,le=0,he=e,ee=null;t:for(;;){for(var ne;he!==i||h!==0&&he.nodeType!==3||(A=j+h),he!==x||u!==0&&he.nodeType!==3||(z=j+u),he.nodeType===3&&(j+=he.nodeValue.length),(ne=he.firstChild)!==null;)ee=he,he=ne;for(;;){if(he===e)break t;if(ee===i&&++J===h&&(A=j),ee===x&&++le===u&&(z=j),(ne=he.nextSibling)!==null)break;he=ee,ee=he.parentNode}he=ne}i=A===-1||z===-1?null:{start:A,end:z}}else i=null}i=i||{start:0,end:0}}else i=null;for(Wm={focusedElem:e,selectionRange:i},yu=!1,Xt=r;Xt!==null;)if(r=Xt,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,Xt=e;else for(;Xt!==null;){switch(r=Xt,x=r.alternate,e=r.flags,r.tag){case 0:if((e&4)!==0&&(e=r.updateQueue,e=e!==null?e.events:null,e!==null))for(i=0;i title"))),ln(x,u,i),x[ye]=e,Wt(x),u=x;break e;case"link":var j=ty("link","href",h).get(u+(i.href||""));if(j){for(var A=0;Agt&&(j=gt,gt=Le,Le=j);var F=s1(A,Le),U=s1(A,gt);if(F&&U&&(ne.rangeCount!==1||ne.anchorNode!==F.node||ne.anchorOffset!==F.offset||ne.focusNode!==U.node||ne.focusOffset!==U.offset)){var Q=he.createRange();Q.setStart(F.node,F.offset),ne.removeAllRanges(),Le>gt?(ne.addRange(Q),ne.extend(U.node,U.offset)):(Q.setEnd(U.node,U.offset),ne.addRange(Q))}}}}for(he=[],ne=A;ne=ne.parentNode;)ne.nodeType===1&&he.push({element:ne,left:ne.scrollLeft,top:ne.scrollTop});for(typeof A.focus=="function"&&A.focus(),A=0;Ai?32:i,P.T=null,i=Om,Om=null;var x=Xa,j=ma;if(Yt=0,Yo=Xa=null,ma=0,(ot&6)!==0)throw Error(o(331));var A=ot;if(ot|=4,ob(x.current),rb(x,x.current,j,i),ot=A,pl(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot(gr,x)}catch{}return!0}finally{Z.p=h,P.T=u,Sb(e,r)}}function Eb(e,r,i){r=rr(i,r),r=mm(e.stateNode,r,2),e=Ga(e,r,2),e!==null&&(Ft(e,2),Or(e))}function ct(e,r,i){if(e.tag===3)Eb(e,e,i);else for(;r!==null;){if(r.tag===3){Eb(r,e,i);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Wa===null||!Wa.has(u))){e=rr(i,e),i=kv(2),u=Ga(r,i,2),u!==null&&(Tv(i,u,r,e),Ft(u,2),Or(u));break}}r=r.return}}function Im(e,r,i){var u=e.pingCache;if(u===null){u=e.pingCache=new E4;var h=new Set;u.set(r,h)}else h=u.get(r),h===void 0&&(h=new Set,u.set(r,h));h.has(i)||(Rm=!0,h.add(i),e=A4.bind(null,e,r,i),r.then(e,e))}function A4(e,r,i){var u=e.pingCache;u!==null&&u.delete(r),e.pingedLanes|=e.suspendedLanes&i,e.warmLanes&=~i,xt===e&&(We&i)===i&&(_t===4||_t===3&&(We&62914560)===We&&300>It()-nu?(ot&2)===0&&qo(e,0):Am|=i,Fo===We&&(Fo=0)),Or(e)}function kb(e,r){r===0&&(r=it()),e=As(e,r),e!==null&&(Ft(e,r),Or(e))}function _4(e){var r=e.memoizedState,i=0;r!==null&&(i=r.retryLane),kb(e,i)}function D4(e,r){var i=0;switch(e.tag){case 31:case 13:var u=e.stateNode,h=e.memoizedState;h!==null&&(i=h.retryLane);break;case 19:u=e.stateNode;break;case 22:u=e.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),kb(e,i)}function O4(e,r){return _n(e,r)}var cu=null,Wo=null,Um=!1,uu=!1,Bm=!1,Qa=0;function Or(e){e!==Wo&&e.next===null&&(Wo===null?cu=Wo=e:Wo=Wo.next=e),uu=!0,Um||(Um=!0,z4())}function pl(e,r){if(!Bm&&uu){Bm=!0;do for(var i=!1,u=cu;u!==null;){if(e!==0){var h=u.pendingLanes;if(h===0)var x=0;else{var j=u.suspendedLanes,A=u.pingedLanes;x=(1<<31-Mt(42|e)+1)-1,x&=h&~(j&~A),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(i=!0,Ab(u,x))}else x=We,x=La(u,u===xt?x:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(x&3)===0||Oe(u,x)||(i=!0,Ab(u,x));u=u.next}while(i);Bm=!1}}function L4(){Tb()}function Tb(){uu=Um=!1;var e=0;Qa!==0&&Y4()&&(e=Qa);for(var r=It(),i=null,u=cu;u!==null;){var h=u.next,x=Mb(u,r);x===0?(u.next=null,i===null?cu=h:i.next=h,h===null&&(Wo=i)):(i=u,(e!==0||(x&3)!==0)&&(uu=!0)),u=h}Yt!==0&&Yt!==5||pl(e),Qa!==0&&(Qa=0)}function Mb(e,r){for(var i=e.suspendedLanes,u=e.pingedLanes,h=e.expirationTimes,x=e.pendingLanes&-62914561;0A)break;var le=z.transferSize,he=z.initiatorType;le&&Ub(he)&&(z=z.responseEnd,j+=le*(z"u"?null:document;function Zb(e,r,i){var u=Xo;if(u&&typeof r=="string"&&r){var h=tr(r);h='link[rel="'+e+'"][href="'+h+'"]',typeof i=="string"&&(h+='[crossorigin="'+i+'"]'),Xb.has(h)||(Xb.add(h),e={rel:e,crossOrigin:i,href:r},u.querySelector(h)===null&&(r=u.createElement("link"),ln(r,"link",e),Wt(r),u.head.appendChild(r)))}}function t3(e){pa.D(e),Zb("dns-prefetch",e,null)}function n3(e,r){pa.C(e,r),Zb("preconnect",e,r)}function r3(e,r,i){pa.L(e,r,i);var u=Xo;if(u&&e&&r){var h='link[rel="preload"][as="'+tr(r)+'"]';r==="image"&&i&&i.imageSrcSet?(h+='[imagesrcset="'+tr(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(h+='[imagesizes="'+tr(i.imageSizes)+'"]')):h+='[href="'+tr(e)+'"]';var x=h;switch(r){case"style":x=Zo(e);break;case"script":x=Qo(e)}cr.has(x)||(e=b({rel:"preload",href:r==="image"&&i&&i.imageSrcSet?void 0:e,as:r},i),cr.set(x,e),u.querySelector(h)!==null||r==="style"&&u.querySelector(vl(x))||r==="script"&&u.querySelector(bl(x))||(r=u.createElement("link"),ln(r,"link",e),Wt(r),u.head.appendChild(r)))}}function a3(e,r){pa.m(e,r);var i=Xo;if(i&&e){var u=r&&typeof r.as=="string"?r.as:"script",h='link[rel="modulepreload"][as="'+tr(u)+'"][href="'+tr(e)+'"]',x=h;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=Qo(e)}if(!cr.has(x)&&(e=b({rel:"modulepreload",href:e},r),cr.set(x,e),i.querySelector(h)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(bl(x)))return}u=i.createElement("link"),ln(u,"link",e),Wt(u),i.head.appendChild(u)}}}function s3(e,r,i){pa.S(e,r,i);var u=Xo;if(u&&e){var h=bo(u).hoistableStyles,x=Zo(e);r=r||"default";var j=h.get(x);if(!j){var A={loading:0,preload:null};if(j=u.querySelector(vl(x)))A.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":r},i),(i=cr.get(x))&&np(e,i);var z=j=u.createElement("link");Wt(z),ln(z,"link",e),z._p=new Promise(function(J,le){z.onload=J,z.onerror=le}),z.addEventListener("load",function(){A.loading|=1}),z.addEventListener("error",function(){A.loading|=2}),A.loading|=4,hu(j,r,u)}j={type:"stylesheet",instance:j,count:1,state:A},h.set(x,j)}}}function o3(e,r){pa.X(e,r);var i=Xo;if(i&&e){var u=bo(i).hoistableScripts,h=Qo(e),x=u.get(h);x||(x=i.querySelector(bl(h)),x||(e=b({src:e,async:!0},r),(r=cr.get(h))&&rp(e,r),x=i.createElement("script"),Wt(x),ln(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function i3(e,r){pa.M(e,r);var i=Xo;if(i&&e){var u=bo(i).hoistableScripts,h=Qo(e),x=u.get(h);x||(x=i.querySelector(bl(h)),x||(e=b({src:e,async:!0,type:"module"},r),(r=cr.get(h))&&rp(e,r),x=i.createElement("script"),Wt(x),ln(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function Qb(e,r,i,u){var h=(h=xe.current)?pu(h):null;if(!h)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(r=Zo(i.href),i=bo(h).hoistableStyles,u=i.get(r),u||(u={type:"style",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){e=Zo(i.href);var x=bo(h).hoistableStyles,j=x.get(e);if(j||(h=h.ownerDocument||h,j={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(e,j),(x=h.querySelector(vl(e)))&&!x._p&&(j.instance=x,j.state.loading=5),cr.has(e)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},cr.set(e,i),x||l3(h,e,i,j.state))),r&&u===null)throw Error(o(528,""));return j}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=i.async,i=i.src,typeof i=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Qo(i),i=bo(h).hoistableScripts,u=i.get(r),u||(u={type:"script",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Zo(e){return'href="'+tr(e)+'"'}function vl(e){return'link[rel="stylesheet"]['+e+"]"}function Jb(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function l3(e,r,i,u){e.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=e.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),ln(r,"link",i),Wt(r),e.head.appendChild(r))}function Qo(e){return'[src="'+tr(e)+'"]'}function bl(e){return"script[async]"+e}function ey(e,r,i){if(r.count++,r.instance===null)switch(r.type){case"style":var u=e.querySelector('style[data-href~="'+tr(i.href)+'"]');if(u)return r.instance=u,Wt(u),u;var h=b({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(e.ownerDocument||e).createElement("style"),Wt(u),ln(u,"style",h),hu(u,i.precedence,e),r.instance=u;case"stylesheet":h=Zo(i.href);var x=e.querySelector(vl(h));if(x)return r.state.loading|=4,r.instance=x,Wt(x),x;u=Jb(i),(h=cr.get(h))&&np(u,h),x=(e.ownerDocument||e).createElement("link"),Wt(x);var j=x;return j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),ln(x,"link",u),r.state.loading|=4,hu(x,i.precedence,e),r.instance=x;case"script":return x=Qo(i.src),(h=e.querySelector(bl(x)))?(r.instance=h,Wt(h),h):(u=i,(h=cr.get(x))&&(u=b({},i),rp(u,h)),e=e.ownerDocument||e,h=e.createElement("script"),Wt(h),ln(h,"link",u),e.head.appendChild(h),r.instance=h);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,hu(u,i.precedence,e));return r.instance}function hu(e,r,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),h=u.length?u[u.length-1]:null,x=h,j=0;j title"):null)}function c3(e,r,i){if(i===1||r.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return e=r.disabled,typeof r.precedence=="string"&&e==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function ry(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function u3(e,r,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var h=Zo(u.href),x=r.querySelector(vl(h));if(x){r=x._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(e.count++,e=xu.bind(e),r.then(e,e)),i.state.loading|=4,i.instance=x,Wt(x);return}x=r.ownerDocument||r,u=Jb(u),(h=cr.get(h))&&np(u,h),x=x.createElement("link"),Wt(x);var j=x;j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),ln(x,"link",u),i.instance=x}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(i,r),(r=i.state.preload)&&(i.state.loading&3)===0&&(e.count++,i=xu.bind(e),r.addEventListener("load",i),r.addEventListener("error",i))}}var ap=0;function d3(e,r){return e.stylesheets&&e.count===0&&bu(e,e.stylesheets),0ap?50:800)+r);return e.unsuspend=i,function(){e.unsuspend=null,clearTimeout(u),clearTimeout(h)}}:null}function xu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)bu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var vu=null;function bu(e,r){e.stylesheets=null,e.unsuspend!==null&&(e.count++,vu=new Map,r.forEach(f3,e),vu=null,xu.call(e))}function f3(e,r){if(!(r.state.loading&4)){var i=vu.get(e);if(i)var u=i.get(null);else{i=new Map,vu.set(e,i);for(var h=e.querySelectorAll("link[data-precedence],style[data-precedence]"),x=0;x"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),pp.exports=R3(),pp.exports}var _3=A3();/** + * react-router v7.18.2 + * + * 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 + */var Zh=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,i2=/^[\\/]{2}/;function D3(t,n){return n+t.replace(/\\/g,"/")}var Ay="popstate";function _y(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function O3(t={}){function n(o,c){var g;let l=(g=c.state)==null?void 0:g.masked,{pathname:d,search:m,hash:p}=l||o.location;return Qp("",{pathname:d,search:m,hash:p},c.state&&c.state.usr||null,c.state&&c.state.key||"default",l?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,c){return typeof c=="string"?c:Il(c)}return z3(n,a,null,t)}function Nt(t,n){if(t===!1||t===null||typeof t>"u")throw new Error(n)}function fr(t,n){if(!t){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function L3(){return Math.random().toString(36).substring(2,10)}function Dy(t,n){return{usr:t.state,key:t.key,idx:n,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function Qp(t,n,a=null,o,c){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof n=="string"?vi(n):n,state:a,key:n&&n.key||o||L3(),mask:c}}function Il({pathname:t="/",search:n="",hash:a=""}){return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function vi(t){let n={};if(t){let a=t.indexOf("#");a>=0&&(n.hash=t.substring(a),t=t.substring(0,a));let o=t.indexOf("?");o>=0&&(n.search=t.substring(o),t=t.substring(0,o)),t&&(n.pathname=t)}return n}function z3(t,n,a,o={}){let{window:c=document.defaultView,v5Compat:l=!1}=o,d=c.history,m="POP",p=null,g=v();g==null&&(g=0,d.replaceState({...d.state,idx:g},""));function v(){return(d.state||{idx:null}).idx}function b(){m="POP";let E=v(),k=E==null?null:E-g;g=E,p&&p({action:m,location:S.location,delta:k})}function w(E,k){m="PUSH";let N=_y(E)?E:Qp(S.location,E,k);g=v()+1;let T=Dy(N,g),M=S.createHref(N.mask||N);try{d.pushState(T,"",M)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;c.location.assign(M)}l&&p&&p({action:m,location:S.location,delta:1})}function y(E,k){m="REPLACE";let N=_y(E)?E:Qp(S.location,E,k);g=v();let T=Dy(N,g),M=S.createHref(N.mask||N);d.replaceState(T,"",M),l&&p&&p({action:m,location:S.location,delta:0})}function C(E){return P3(c,E)}let S={get action(){return m},get location(){return t(c,d)},listen(E){if(p)throw new Error("A history only accepts one active listener");return c.addEventListener(Ay,b),p=E,()=>{c.removeEventListener(Ay,b),p=null}},createHref(E){return n(c,E)},createURL:C,encodeLocation(E){let k=C(E);return{pathname:k.pathname,search:k.search,hash:k.hash}},push:w,replace:y,go(E){return d.go(E)}};return S}function P3(t,n,a=!1){let o="http://localhost";t&&(o=t.location.origin!=="null"?t.location.origin:t.location.href),Nt(o,"No window.location.(origin|href) available to create URL");let c=typeof n=="string"?n:Il(n);return c=c.replace(/ $/,"%20"),!a&&i2.test(c)&&(c=o+c),new URL(c,o)}function l2(t,n,a="/"){return I3(t,n,a,!1)}function I3(t,n,a,o,c){let l=typeof n=="string"?vi(n):n,d=Na(l.pathname||"/",a);if(d==null)return null;let m=U3(t),p=null,g=X3(d);for(let v=0;p==null&&v{let v={relativePath:g===void 0?d.path||"":g,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(v.relativePath.startsWith("/")){if(!v.relativePath.startsWith(o)&&p)return;Nt(v.relativePath.startsWith(o),`Absolute route path "${v.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),v.relativePath=v.relativePath.slice(o.length)}let b=Cr([o,v.relativePath]),w=a.concat(v);d.children&&d.children.length>0&&(Nt(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),c2(d.children,n,w,b,p)),!(d.path==null&&!d.index)&&n.push({path:b,score:q3(b,d.index),routesMeta:w.map((y,C)=>{let[S,E]=f2(y.relativePath,y.caseSensitive,C===w.length-1);return{...y,matcher:S,compiledParams:E}})})};return t.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))l(d,m);else for(let g of u2(d.path))l(d,m,!0,g)}),n}function u2(t){let n=t.split("/");if(n.length===0)return[];let[a,...o]=n,c=a.endsWith("?"),l=a.replace(/\?$/,"");if(o.length===0)return c?[l,""]:[l];let d=u2(o.join("/")),m=[];return m.push(...d.map(p=>p===""?l:[l,p].join("/"))),c&&m.push(...d),m.map(p=>t.startsWith("/")&&p===""?"/":p)}function B3(t){t.sort((n,a)=>n.score!==a.score?a.score-n.score:K3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var $3=/^:[\w-]+$/,H3=3,G3=2,V3=1,F3=10,Y3=-2,Oy=t=>t==="*";function q3(t,n){let a=t.split("/"),o=a.length;return a.some(Oy)&&(o+=Y3),n&&(o+=G3),a.filter(c=>!Oy(c)).reduce((c,l)=>c+($3.test(l)?H3:l===""?V3:F3),o)}function K3(t,n){return t.length===n.length&&t.slice(0,-1).every((o,c)=>o===n[c])?t[t.length-1]-n[n.length-1]:0}function W3(t,n,a=!1){let{routesMeta:o}=t,c={},l="/",d=[];for(let m=0;m{if(v==="*"){let C=m[w]||"";d=l.slice(0,l.length-C.length).replace(/(.)\/+$/,"$1")}const y=m[w];return b&&!y?g[v]=void 0:g[v]=(y||"").replace(/%2F/g,"/"),g},{}),pathname:l,pathnameBase:d,pattern:t}}function f2(t,n=!1,a=!0){fr(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let o=[],c="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,g,v)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let b=v.charAt(g+d.length);return b&&b!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(o.push({paramName:"*"}),c+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?c+="\\/*$":t!==""&&t!=="/"&&(c+="(?:(?=\\/|$))"),[new RegExp(c,n?void 0:"i"),o]}function X3(t){try{return t.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return fr(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),t}}function Na(t,n){if(n==="/")return t;if(!t.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=t.charAt(a);return o&&o!=="/"?null:t.slice(a)||"/"}function Z3(t,n="/"){let{pathname:a,search:o="",hash:c=""}=typeof t=="string"?vi(t):t,l;return a?(a=m2(a),a.startsWith("/")?l=Ly(a.substring(1),"/"):l=Ly(a,n)):l=n,{pathname:l,search:eN(o),hash:tN(c)}}function Ly(t,n){let a=ad(n).split("/");return t.split("/").forEach(c=>{c===".."?a.length>1&&a.pop():c!=="."&&a.push(c)}),a.length>1?a.join("/"):"/"}function vp(t,n,a,o){return`Cannot include a '${t}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Q3(t){return t.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Qh(t){let n=Q3(t);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function xd(t,n,a,o=!1){let c;typeof t=="string"?c=vi(t):(c={...t},Nt(!c.pathname||!c.pathname.includes("?"),vp("?","pathname","search",c)),Nt(!c.pathname||!c.pathname.includes("#"),vp("#","pathname","hash",c)),Nt(!c.search||!c.search.includes("#"),vp("#","search","hash",c)));let l=t===""||c.pathname==="",d=l?"/":c.pathname,m;if(d==null)m=a;else{let b=n.length-1;if(!o&&d.startsWith("..")){let w=d.split("/");for(;w[0]==="..";)w.shift(),b-=1;c.pathname=w.join("/")}m=b>=0?n[b]:"/"}let p=Z3(c,m),g=d&&d!=="/"&&d.endsWith("/"),v=(l||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(g||v)&&(p.pathname+="/"),p}var m2=t=>t.replace(/[\\/]{2,}/g,"/"),Cr=t=>m2(t.join("/")),ad=t=>t.replace(/\/+$/,""),J3=t=>ad(t).replace(/^\/*/,"/"),eN=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,tN=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,nN=class{constructor(t,n,a,o=!1){this.status=t,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function rN(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function aN(t){let n=t.map(a=>a.route.path).filter(Boolean);return Cr(n)||"/"}var p2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function h2(t,n){let a=t;if(typeof a!="string"||!Zh.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,c=!1;if(p2)try{let l=new URL(window.location.href),d=i2.test(a)?new URL(D3(a,l.protocol)):new URL(a),m=Na(d.pathname,n);d.origin===l.origin&&m!=null?a=m+d.search+d.hash:c=!0}catch{fr(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:c,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var g2=["POST","PUT","PATCH","DELETE"];new Set(g2);var sN=["GET",...g2];new Set(sN);var oN=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function iN(t){try{return oN.includes(new URL(t).protocol)}catch{return!1}}var bi=f.createContext(null);bi.displayName="DataRouter";var vd=f.createContext(null);vd.displayName="DataRouterState";var x2=f.createContext(!1);function lN(){return f.useContext(x2)}var v2=f.createContext({isTransitioning:!1});v2.displayName="ViewTransition";var cN=f.createContext(new Map);cN.displayName="Fetchers";var uN=f.createContext(null);uN.displayName="Await";var qn=f.createContext(null);qn.displayName="Navigation";var Jl=f.createContext(null);Jl.displayName="Location";var Er=f.createContext({outlet:null,matches:[],isDataRoute:!1});Er.displayName="Route";var Jh=f.createContext(null);Jh.displayName="RouteError";var b2="REACT_ROUTER_ERROR",dN="REDIRECT",fN="ROUTE_ERROR_RESPONSE";function mN(t){if(t.startsWith(`${b2}:${dN}:{`))try{let n=JSON.parse(t.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function pN(t){if(t.startsWith(`${b2}:${fN}:{`))try{let n=JSON.parse(t.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new nN(n.status,n.statusText,n.data)}catch{}}function hN(t,{relative:n}={}){Nt(yi(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(qn),{hash:c,pathname:l,search:d}=ec(t,{relative:n}),m=l;return a!=="/"&&(m=l==="/"?a:Cr([a,l])),o.createHref({pathname:m,search:d,hash:c})}function yi(){return f.useContext(Jl)!=null}function Kn(){return Nt(yi(),"useLocation() may be used only in the context of a component."),f.useContext(Jl).location}var y2="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function w2(t){f.useContext(qn).static||f.useLayoutEffect(t)}function ao(){let{isDataRoute:t}=f.useContext(Er);return t?RN():gN()}function gN(){Nt(yi(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(bi),{basename:n,navigator:a}=f.useContext(qn),{matches:o}=f.useContext(Er),{pathname:c}=Kn(),l=JSON.stringify(Qh(o)),d=f.useRef(!1);return w2(()=>{d.current=!0}),f.useCallback((p,g={})=>{if(fr(d.current,y2),!d.current)return;if(typeof p=="number"){a.go(p);return}let v=xd(p,JSON.parse(l),c,g.relative==="path");t==null&&n!=="/"&&(v.pathname=v.pathname==="/"?n:Cr([n,v.pathname])),(g.replace?a.replace:a.push)(v,g.state,g)},[n,a,l,c,t])}var xN=f.createContext(null);function vN(t){let n=f.useContext(Er).outlet;return f.useMemo(()=>n&&f.createElement(xN.Provider,{value:t},n),[n,t])}function ec(t,{relative:n}={}){let{matches:a}=f.useContext(Er),{pathname:o}=Kn(),c=JSON.stringify(Qh(a));return f.useMemo(()=>xd(t,JSON.parse(c),o,n==="path"),[t,c,o,n])}function bN(t,n){return j2(t,n)}function j2(t,n,a){var E;Nt(yi(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(qn),{matches:c}=f.useContext(Er),l=c[c.length-1],d=l?l.params:{},m=l?l.pathname:"/",p=l?l.pathnameBase:"/",g=l&&l.route;{let k=g&&g.path||"";S2(m,!g||k.endsWith("*")||k.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let v=Kn(),b;if(n){let k=typeof n=="string"?vi(n):n;Nt(p==="/"||((E=k.pathname)==null?void 0:E.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${k.pathname}" was given in the \`location\` prop.`),b=k}else b=v;let w=b.pathname||"/",y=w;if(p!=="/"){let k=p.replace(/^\//,"").split("/");y="/"+w.replace(/^\//,"").split("/").slice(k.length).join("/")}let C=a&&a.state.matches.length?a.state.matches.map(k=>Object.assign(k,{route:a.manifest[k.route.id]||k.route})):l2(t,{pathname:y});fr(g||C!=null,`No routes matched location "${b.pathname}${b.search}${b.hash}" `),fr(C==null||C[C.length-1].route.element!==void 0||C[C.length-1].route.Component!==void 0||C[C.length-1].route.lazy!==void 0,`Matched leaf route at location "${b.pathname}${b.search}${b.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let S=SN(C&&C.map(k=>Object.assign({},k,{params:Object.assign({},d,k.params),pathname:Cr([p,o.encodeLocation?o.encodeLocation(k.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathname]),pathnameBase:k.pathnameBase==="/"?p:Cr([p,o.encodeLocation?o.encodeLocation(k.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathnameBase])})),c,a);return n&&S?f.createElement(Jl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...b},navigationType:"POP"}},S):S}function yN(){let t=MN(),n=rN(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",c={padding:"0.5rem",backgroundColor:o},l={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",t),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:l},"ErrorBoundary")," or"," ",f.createElement("code",{style:l},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:c},a):null,d)}var wN=f.createElement(yN,null),C2=class extends f.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,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){this.props.onError?this.props.onError(t,n):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=pN(t.digest);a&&(t=a)}let n=t!==void 0?f.createElement(Er.Provider,{value:this.props.routeContext},f.createElement(Jh.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?f.createElement(jN,{error:t},n):n}};C2.contextType=x2;var bp=new WeakMap;function jN({children:t,error:n}){let{basename:a}=f.useContext(qn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=mN(n.digest);if(o){let c=bp.get(n);if(c)throw c;let l=h2(o.location,a),d=l.absoluteURL||l.to;if(iN(d))throw new Error("Invalid redirect location");if(p2&&!bp.get(n))if(l.isExternal||o.reloadDocument)window.location.href=d;else{const m=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(l.to,{replace:o.replace}));throw bp.set(n,m),m}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${d}`})}}return t}function CN({routeContext:t,match:n,children:a}){let o=f.useContext(bi);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(Er.Provider,{value:t},a)}function SN(t,n=[],a){let o=a==null?void 0:a.state;if(t==null){if(!o)return null;if(o.errors)t=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)t=o.matches;else return null}let c=t,l=o==null?void 0:o.errors;if(l!=null){let v=c.findIndex(b=>b.route.id&&(l==null?void 0:l[b.route.id])!==void 0);Nt(v>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(l).join(",")}`),c=c.slice(0,Math.min(c.length,v+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let v=0;v=0?c=c.slice(0,m+1):c=[c[0]];break}}}}let p=a==null?void 0:a.onError,g=o&&p?(v,b)=>{var w,y;p(v,{location:o.location,params:((y=(w=o.matches)==null?void 0:w[0])==null?void 0:y.params)??{},pattern:aN(o.matches),errorInfo:b})}:void 0;return c.reduceRight((v,b,w)=>{let y,C=!1,S=null,E=null;o&&(y=l&&b.route.id?l[b.route.id]:void 0,S=b.route.errorElement||wN,d&&(m<0&&w===0?(S2("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),C=!0,E=null):m===w&&(C=!0,E=b.route.hydrateFallbackElement||null)));let k=n.concat(c.slice(0,w+1)),N=()=>{let T;return y?T=S:C?T=E:b.route.Component?T=f.createElement(b.route.Component,null):b.route.element?T=b.route.element:T=v,f.createElement(CN,{match:b,routeContext:{outlet:v,matches:k,isDataRoute:o!=null},children:T})};return o&&(b.route.ErrorBoundary||b.route.errorElement||w===0)?f.createElement(C2,{location:o.location,revalidation:o.revalidation,component:S,error:y,children:N(),routeContext:{outlet:null,matches:k,isDataRoute:!0},onError:g}):N()},null)}function eg(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function NN(t){let n=f.useContext(bi);return Nt(n,eg(t)),n}function EN(t){let n=f.useContext(vd);return Nt(n,eg(t)),n}function kN(t){let n=f.useContext(Er);return Nt(n,eg(t)),n}function tg(t){let n=kN(t),a=n.matches[n.matches.length-1];return Nt(a.route.id,`${t} can only be used on routes that contain a unique "id"`),a.route.id}function TN(){return tg("useRouteId")}function MN(){var o;let t=f.useContext(Jh),n=EN("useRouteError"),a=tg("useRouteError");return t!==void 0?t:(o=n.errors)==null?void 0:o[a]}function RN(){let{router:t}=NN("useNavigate"),n=tg("useNavigate"),a=f.useRef(!1);return w2(()=>{a.current=!0}),f.useCallback(async(c,l={})=>{fr(a.current,y2),a.current&&(typeof c=="number"?await t.navigate(c):await t.navigate(c,{fromRouteId:n,...l}))},[t,n])}var zy={};function S2(t,n,a){!n&&!zy[t]&&(zy[t]=!0,fr(!1,a))}f.memo(AN);function AN({routes:t,manifest:n,future:a,state:o,isStatic:c,onError:l}){return j2(t,void 0,{manifest:n,state:o,isStatic:c,onError:l})}function ya({to:t,replace:n,state:a,relative:o}){Nt(yi()," may be used only in the context of a component.");let{static:c}=f.useContext(qn);fr(!c," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:l}=f.useContext(Er),{pathname:d}=Kn(),m=ao(),p=xd(t,Qh(l),d,o==="path"),g=JSON.stringify(p);return f.useEffect(()=>{m(JSON.parse(g),{replace:n,state:a,relative:o})},[m,g,o,n,a]),null}function _N(t){return vN(t.context)}function cn(t){Nt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function DN({basename:t="/",children:n=null,location:a,navigationType:o="POP",navigator:c,static:l=!1,useTransitions:d}){Nt(!yi(),"You cannot render a inside another . You should never have more than one in your app.");let m=t.replace(/^\/*/,"/"),p=f.useMemo(()=>({basename:m,navigator:c,static:l,useTransitions:d,future:{}}),[m,c,l,d]);typeof a=="string"&&(a=vi(a));let{pathname:g="/",search:v="",hash:b="",state:w=null,key:y="default",mask:C}=a,S=f.useMemo(()=>{let E=Na(g,m);return E==null?null:{location:{pathname:E,search:v,hash:b,state:w,key:y,mask:C},navigationType:o}},[m,g,v,b,w,y,o,C]);return fr(S!=null,` is not able to match the URL "${g}${v}${b}" because it does not start with the basename, so the won't render anything.`),S==null?null:f.createElement(qn.Provider,{value:p},f.createElement(Jl.Provider,{children:n,value:S}))}function Py({children:t,location:n}){return bN(Jp(t),n)}function Jp(t,n=[]){let a=[];return f.Children.forEach(t,(o,c)=>{if(!f.isValidElement(o))return;let l=[...n,c];if(o.type===f.Fragment){a.push.apply(a,Jp(o.props.children,l));return}Nt(o.type===cn,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),Nt(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||l.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=Jp(o.props.children,l)),a.push(d)}),a}var Fu="get",Yu="application/x-www-form-urlencoded";function bd(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function ON(t){return bd(t)&&t.tagName.toLowerCase()==="button"}function LN(t){return bd(t)&&t.tagName.toLowerCase()==="form"}function zN(t){return bd(t)&&t.tagName.toLowerCase()==="input"}function PN(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function IN(t,n){return t.button===0&&(!n||n==="_self")&&!PN(t)}function eh(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((n,a)=>{let o=t[a];return n.concat(Array.isArray(o)?o.map(c=>[a,c]):[[a,o]])},[]))}function UN(t,n){let a=eh(t);return n&&n.forEach((o,c)=>{a.has(c)||n.getAll(c).forEach(l=>{a.append(c,l)})}),a}var ku=null;function BN(){if(ku===null)try{new FormData(document.createElement("form"),0),ku=!1}catch{ku=!0}return ku}var $N=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function yp(t){return t!=null&&!$N.has(t)?(fr(!1,`"${t}" is not a valid \`encType\` for \`\`/\`\` and will default to "${Yu}"`),null):t}function HN(t,n){let a,o,c,l,d;if(LN(t)){let m=t.getAttribute("action");o=m?Na(m,n):null,a=t.getAttribute("method")||Fu,c=yp(t.getAttribute("enctype"))||Yu,l=new FormData(t)}else if(ON(t)||zN(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a `,_=>`${M}-${_.id}`)}const E=w`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${y(n.skinTones,(N,T)=>w`
${N}
`,N=>N)}
${y(n.currentEmojisWithCategories,(N,T)=>w`
${C(N.emojis,n.searchMode,"emo")}
`,N=>N.category)}
`,k=(N,T)=>{for(const M of t.querySelectorAll(`[${N}]`))T(M,M.getAttribute(N))};if(p){t.appendChild(E);for(const N of["click","focusout","input","keydown","keyup"])k(`data-on-${N}`,(T,M)=>{T.addEventListener(N,o[M])});k("data-ref",(N,T)=>{l[T]=N}),d.addEventListener("abort",()=>{t.removeChild(E)})}k("data-action",(N,T)=>{let M=m.get(T);M||m.set(T,M=new WeakSet),M.has(N)||(M.add(N),c[T](N))})}const md=typeof queueMicrotask=="function"?queueMicrotask:t=>Promise.resolve().then(t);function oO(t){let n=!1,a;const o=new Map,c=new Set;let l;const d=()=>{if(n)return;const g=[...c];c.clear();try{for(const v of g)v()}finally{l=!1,c.size&&(l=!0,md(d))}},m=new Proxy({},{get(g,v){if(a){let b=o.get(v);b||(b=new Set,o.set(v,b)),b.add(a)}return g[v]},set(g,v,b){if(g[v]!==b){g[v]=b;const w=o.get(v);if(w){for(const y of w)c.add(y);l||(l=!0,md(d))}}return!0}}),p=g=>{const v=()=>{const b=a;a=v;try{return g()}finally{a=b}};return v()};return t.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function qp(t,n,a){if(t.length!==n.length)return!1;for(let o=0;o{c.disconnect()})),c.observe(t)}}const Kp=[],{assign:$u}=Object;function lO(t,n){const a={},o=new AbortController,c=o.signal,{state:l,createEffect:d}=oO(c),m=new Map;$u(l,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),$u(l,n),$u(l,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:kD,isRtl:!1,currentGroupIndex:0,groups:Hp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{l.currentGroup!==l.groups[l.currentGroupIndex]&&(l.currentGroup=l.groups[l.currentGroupIndex])});const p=B=>{t.getElementById(B).focus()},g=B=>t.getElementById(`emo-${B.id}`),v=(B,ie)=>{a.rootElement.dispatchEvent(new CustomEvent(B,{detail:ie,bubbles:!0,composed:!0}))},b=(B,ie)=>B.id===ie.id,w=(B,ie)=>{const{category:we,emojis:Ce}=B,{category:ze,emojis:Ke}=ie;return we!==ze?!1:qp(Ce,Ke,b)},y=B=>{qp(l.currentEmojis,B,b)||(l.currentEmojis=B)},C=B=>{l.searchMode!==B&&(l.searchMode=B)},S=B=>{qp(l.currentEmojisWithCategories,B,w)||(l.currentEmojisWithCategories=B)},E=(B,ie)=>ie&&B.skins&&B.skins[ie]||B.unicode,T={labelWithSkin:(B,ie)=>VD([B.name||E(B,ie),B.annotation,...B.shortcodes||Kp].filter(Boolean)).join(", "),titleForEmoji:B=>B.annotation||(B.shortcodes||Kp).join(", "),unicodeWithSkin:E},M={onClickSkinToneButton:X,onEmojiClick:D,onNavClick:ae,onNavKeydown:re,onSearchKeydown:Z,onSkinToneOptionsClick:H,onSkinToneOptionsFocusOut:ge,onSkinToneOptionsKeydown:xe,onSkinToneOptionsKeyup:q,onSearchInput:me},_={calculateEmojiGridStyle:te,updateOnIntersection:K};let R=!0;d(()=>{sO(t,l,T,M,_,a,c,m,R),R=!1}),l.emojiVersion||Vp().then(B=>{B||(l.message=l.i18n.emojiUnsupportedMessage)}),d(()=>{async function B(){let ie=!1;const we=setTimeout(()=>{ie=!0,l.message=l.i18n.loadingMessage},ND);try{await l.database.ready(),l.databaseLoaded=!0}catch(Ce){console.error(Ce),l.message=l.i18n.networkErrorMessage}finally{clearTimeout(we),ie&&(ie=!1,l.message="")}}l.database&&B()}),d(()=>{l.pickerStyle=` + --num-groups: ${l.groups.length}; + --indicator-opacity: ${l.searchMode?0:1}; + --num-skintones: ${z0};`}),d(()=>{l.customEmoji&&l.database&&L()}),d(()=>{l.customEmoji&&l.customEmoji.length?l.groups!==Fh&&(l.groups=Fh):l.groups!==Hp&&(l.currentGroupIndex&&l.currentGroupIndex--,l.groups=Hp)}),d(()=>{async function B(){l.databaseLoaded&&(l.currentSkinTone=await l.database.getPreferredSkinTone())}B()}),d(()=>{l.skinTones=Array(z0).fill().map((B,ie)=>ID(l.skinToneEmoji,ie))}),d(()=>{l.skinToneButtonText=l.skinTones[l.currentSkinTone]}),d(()=>{l.skinToneButtonLabel=l.i18n.skinToneLabel.replace("{skinTone}",l.i18n.skinTones[l.currentSkinTone])}),d(()=>{async function B(){const{database:ie}=l,we=(await Promise.all(TD.map(Ce=>ie.getEmojiByUnicodeOrName(Ce)))).filter(Boolean);l.defaultFavoriteEmojis=we}l.databaseLoaded&&B()});function L(){const{customEmoji:B,database:ie}=l,we=B||Kp;ie.customEmoji!==we&&(ie.customEmoji=we)}d(()=>{async function B(){L();const{database:ie,defaultFavoriteEmojis:we,numColumns:Ce}=l,ze=await ie.getTopFavoriteEmoji(Ce),Ke=await fe(XS([...ze,...we],ft=>ft.unicode||ft.name).slice(0,Ce));l.currentFavorites=Ke}l.databaseLoaded&&l.defaultFavoriteEmojis&&B()});function te(B){$D(B,c,()=>{{const ie=getComputedStyle(a.rootElement),we=parseInt(ie.getPropertyValue("--num-columns"),10),Ce=ie.getPropertyValue("direction")==="rtl";l.numColumns=we,l.isRtl=Ce}})}function K(B){iO(B,c,ie=>{for(const{target:we,isIntersecting:Ce}of ie)we.classList.toggle("onscreen",Ce)})}d(()=>{async function B(){const{searchText:ie,currentGroup:we,databaseLoaded:Ce,customEmoji:ze}=l;if(!Ce)l.currentEmojis=[],l.searchMode=!1;else if(ie.length>=CD){const Ke=await P(ie);l.searchText===ie&&(y(Ke),C(!0))}else{const{id:Ke}=we;if(Ke!==-1||ze&&ze.length){const ft=await se(Ke);l.currentGroup.id===Ke&&(y(ft),C(!1))}}}B()});const I=()=>{ed(()=>FD(a.tabpanelElement))};d(()=>{const{currentEmojis:B,emojiVersion:ie}=l,we=B.filter(Ce=>Ce.unicode).filter(Ce=>P0(Ce)&&!Yh.has(Ce.unicode));if(!ie&&we.length)y(B),ed(()=>G(we));else{const Ce=ie?B:B.filter(Y);y(Ce),I()}});function G(B){GD(B,a.baselineEmoji,g)?I():l.currentEmojis=[...l.currentEmojis]}function Y(B){return!B.unicode||!P0(B)||Yh.get(B.unicode)}async function ce(B){const ie=l.emojiVersion||await Vp();return B.filter(({version:we})=>!we||we<=ie)}async function fe(B){return UD(B,l.emojiVersion||await Vp())}async function se(B){const ie=B===-1?l.customEmoji:await l.database.getEmojiByGroup(B);return fe(await ce(ie))}async function P(B){return fe(await ce(await l.database.getEmojiBySearchQuery(B)))}d(()=>{}),d(()=>{function B(){const{searchMode:we,currentEmojis:Ce}=l;if(we)return[{category:"",emojis:Ce}];const ze=new Map;for(const Ke of Ce){const ft=Ke.category||"";let Pt=ze.get(ft);Pt||(Pt=[],ze.set(ft,Pt)),Pt.push(Ke)}return[...ze.entries()].map(([Ke,ft])=>({category:Ke,emojis:ft})).sort((Ke,ft)=>l.customCategorySorting(Ke.category,ft.category))}const ie=B();S(ie)}),d(()=>{l.activeSearchItemId=l.activeSearchItem!==-1&&l.currentEmojis[l.activeSearchItem].id}),d(()=>{const{rawSearchText:B}=l;KS(()=>{l.searchText=(B||"").trim(),l.activeSearchItem=-1})});function Z(B){if(!l.searchMode||!l.currentEmojis.length)return;const ie=we=>{zr(B),l.activeSearchItem=Fp(we,l.activeSearchItem,l.currentEmojis)};switch(B.key){case"ArrowDown":return ie(!1);case"ArrowUp":return ie(!0);case"Enter":if(l.activeSearchItem===-1)l.activeSearchItem=0;else return zr(B),O(l.currentEmojis[l.activeSearchItem].id)}}function ae(B){const{target:ie}=B,we=ie.closest(".nav-button");if(!we)return;const Ce=parseInt(we.dataset.groupId,10);a.searchElement.value="",l.rawSearchText="",l.searchText="",l.activeSearchItem=-1,l.currentGroupIndex=l.groups.findIndex(ze=>ze.id===Ce)}function re(B){const{target:ie,key:we}=B,Ce=ze=>{ze&&(zr(B),ze.focus())};switch(we){case"ArrowLeft":return Ce(ie.previousElementSibling);case"ArrowRight":return Ce(ie.nextElementSibling);case"Home":return Ce(ie.parentElement.firstElementChild);case"End":return Ce(ie.parentElement.lastElementChild)}}async function V(B){const ie=await l.database.getEmojiByUnicodeOrName(B),we=[...l.currentEmojis,...l.currentFavorites].find(ze=>ze.id===B),Ce=we.unicode&&E(we,l.currentSkinTone);return await l.database.incrementFavoriteEmojiCount(B),{emoji:ie,skinTone:l.currentSkinTone,...Ce&&{unicode:Ce},...we.name&&{name:we.name}}}async function O(B){const ie=V(B);v("emoji-click-sync",ie),v("emoji-click",await ie)}function D(B){const{target:ie}=B;if(!ie.classList.contains("emoji"))return;zr(B);const we=ie.id.substring(4);O(we)}function $(B){l.currentSkinTone=B,l.skinTonePickerExpanded=!1,p("skintone-button"),v("skin-tone-change",{skinTone:B}),l.database.setPreferredSkinTone(B)}function H(B){const{target:{id:ie}}=B,we=ie&&ie.match(/^skintone-(\d)/);if(!we)return;zr(B);const Ce=parseInt(we[1],10);$(Ce)}function X(B){l.skinTonePickerExpanded=!l.skinTonePickerExpanded,l.activeSkinTone=l.currentSkinTone,l.skinTonePickerExpanded&&(zr(B),ed(()=>p("skintone-list")))}d(()=>{l.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{l.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):l.skinTonePickerExpandedAfterAnimation=!1});function xe(B){if(!l.skinTonePickerExpanded)return;const ie=async we=>{zr(B),l.activeSkinTone=we};switch(B.key){case"ArrowUp":return ie(Fp(!0,l.activeSkinTone,l.skinTones));case"ArrowDown":return ie(Fp(!1,l.activeSkinTone,l.skinTones));case"Home":return ie(0);case"End":return ie(l.skinTones.length-1);case"Enter":return zr(B),$(l.activeSkinTone);case"Escape":return zr(B),l.skinTonePickerExpanded=!1,p("skintone-button")}}function q(B){if(l.skinTonePickerExpanded)switch(B.key){case" ":return zr(B),$(l.activeSkinTone)}}async function ge(B){const{relatedTarget:ie}=B;(!ie||ie.id!=="skintone-list")&&(l.skinTonePickerExpanded=!1)}function me(B){l.rawSearchText=B.target.value}return{$set(B){$u(l,B)},$destroy(){o.abort()}}}const cO="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",uO="en";var dO={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},fO=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const ZS=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],mO=`:host{--emoji-font-family:${WS}}`;class Cx extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=fO+mO,this.shadowRoot.appendChild(a),this._ctx={locale:uO,dataSource:cO,skinToneEmoji:ED,customCategorySorting:MD,customEmoji:null,i18n:dO,emojiVersion:null,...n};for(const o of ZS)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){V0(this),this._cmp||(this._cmp=lO(this.shadowRoot,this._ctx))}disconnectedCallback(){V0(this),md(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(c,l)=>l.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new jD({locale:n,dataSource:a}))}_dbFlush(){md(()=>this._dbCreate())}}const QS={};for(const t of ZS)QS[t]={get(){return t==="database"&&this._dbCreate(),this._ctx[t]},set(n){if(t==="database")throw new Error("database is read-only");this._set(t,n)}};Object.defineProperties(Cx.prototype,QS);function V0(t){t instanceof Cx||Object.setPrototypeOf(t,customElements.get(t.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Cx);function pO({onPick:t}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const c=l=>{var p;const d=l.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&t(m)};return o.addEventListener("emoji-click",c),a.appendChild(o),()=>{o.removeEventListener("emoji-click",c),o.remove()}},[t]),s.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const hO=/^<(a?):([^:>]+):(\d{17,20})>$/;function td(t,n,a=!1){return`${a?"`}function JS(t){const n=String(t??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(hO);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function e5(t,n=!1){return`https://cdn.discordapp.com/emojis/${t}.${n?"gif":"png"}?size=64`}function gO(t,n=[]){const a=JS(t);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(c=>c.id===a.id);if(o)return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(c=>c.id===a.id);if(o&&a.value!==td(o.name,o.id,o.animated))return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function xO({value:t,guildEmojis:n,size:a="md"}){const o=gO(t,n),c=a==="lg"?"size-10":"size-7",l=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?s.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?s.jsxs("span",{className:"inline-flex items-center gap-3",children:[s.jsx("img",{src:e5(o.id,o.animated),alt:o.name??"custom emoji",className:pe(c,"shrink-0 rounded-md"),loading:"lazy"}),s.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[s.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),s.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):s.jsx("span",{className:pe(l,"leading-none"),title:o.value,children:o.value})}function vO({id:t,label:n,description:a,value:o,onChange:c,readOnly:l}){const[d,m]=f.useState(!1),[p,g]=f.useState("server"),[v,b]=f.useState(null),[w,y]=f.useState(""),[C,S]=f.useState(!1),[E,k]=f.useState(""),N=f.useCallback(async(I=!1)=>{S(!0),y("");try{const G=await Ne.getGuildResources(I);G.data?(b(G.data),Array.isArray(G.data.emojis)||y("Server response is missing emojis. Restart the bot after updating.")):y("No guild data returned.")}catch(G){y(G instanceof Error?G.message:"Could not load server emojis")}finally{S(!1)}},[]);f.useEffect(()=>{d&&N(!0)},[d,N]);const T=f.useMemo(()=>Array.isArray(v==null?void 0:v.emojis)?v.emojis:[],[v]),M=f.useMemo(()=>{const I=E.trim().toLowerCase();return I?T.filter(G=>G.name.toLowerCase().includes(I)):T},[T,E]),_=String(o??""),R=JS(_);function L(I){c(I),m(!1)}function te(I){c(td(I.name,I.id,I.animated)),m(!1)}function K(){c("")}return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:t,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,s.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx(xO,{value:o,guildEmojis:T,size:"lg"})}),s.jsxs("div",{className:"flex shrink-0 gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",size:"sm",disabled:l,onClick:()=>m(!0),children:"Choose emoji"}),_?s.jsx(ue,{type:"button",variant:"ghost",size:"sm",disabled:l,onClick:K,children:"Clear"}):null]})]}),s.jsx(Qs,{open:d,onOpenChange:m,children:s.jsxs(hs,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[s.jsxs(gs,{className:"space-y-1 border-b border-border px-5 py-4",children:[s.jsx(xs,{children:"Choose emoji"}),s.jsxs(vs,{children:["Server emojis save as"," ",s.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),s.jsxs(DS,{value:p,onValueChange:I=>g(I),className:"flex min-h-0 flex-1 flex-col",children:[s.jsxs(xx,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[s.jsx(Ys,{value:"server",children:"Server"}),s.jsx(Ys,{value:"unicode",children:"All emojis"})]}),s.jsxs($h,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[s.jsxs("div",{className:"relative mb-3",children:[s.jsx(ve,{icon:ji,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search by name…",value:E,onChange:I=>k(I.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),v?s.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[v.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,s.jsx(fc,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:C?s.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((I,G)=>s.jsx(Be,{className:"aspect-square rounded-lg"},G))}):w?s.jsxs("div",{className:"space-y-3 p-4 text-center",children:[s.jsx("p",{className:"text-sm text-destructive",children:w}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>void N(!0),children:"Retry"})]}):M.length===0?s.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):s.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:M.map(I=>{const G=R.kind==="custom"&&R.id===I.id;return s.jsx("button",{type:"button",title:`:${I.name}:`,className:pe("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",G&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>te(I),children:s.jsx("img",{src:I.url??e5(I.id,I.animated),alt:I.name,className:"size-8 object-contain",loading:"lazy"})},I.id)})})})]}),s.jsx($h,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:s.jsx(pO,{onPick:L})})]})]})}),s.jsx(De,{value:_,disabled:l,onChange:I=>c(I.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const F0="BOT_TOKEN",bO="MODEL_API_KEY";function pd({field:t,value:n,onChange:a,readOnly:o}){const c=t.path.replace(/\./g,"-");if(t.type==="googleFont")return s.jsx(S_,{field:t,value:n,onChange:a,readOnly:o});if(t.type==="boolean")return s.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[s.jsxs("div",{children:[s.jsx(_e,{htmlFor:c,className:"font-medium",children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null]}),s.jsx(kt,{id:c,checked:!!n,disabled:o,onCheckedChange:a})]});if(t.type==="stringList")return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(w_,{value:Array.isArray(n)?n:[],onChange:a})]});if(t.type==="select"&&t.options)return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),s.jsxs(Ca,{value:String(n??""),disabled:o,onValueChange:a,children:[s.jsx(Br,{id:c,className:"border-border bg-secondary/30",children:s.jsx(Sa,{placeholder:"Select…"})}),s.jsx($r,{children:t.options.map(d=>s.jsx(vt,{value:d.value,children:d.label},d.value))})]})]});if(t.type==="color"){const d=Ur(String(n??"#000000"));return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsxs("div",{className:"flex gap-2",children:[s.jsx(tf,{value:d,onChange:a}),s.jsx(De,{id:c,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(Ur(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(t.type==="emoji")return s.jsx(vO,{id:c,label:t.label,description:t.description,value:n,onChange:a,readOnly:o});if(t.type==="discordChannel"||t.type==="discordRole"||t.type==="discordCategory"){const d=t.type==="discordRole"?"role":t.type==="discordCategory"?"category":"channel";return s.jsx(TS,{id:c,label:t.label,description:t.description,kind:d,value:n,onChange:a,readOnly:o})}if(t.type==="secret"){const d=n===F0||n===bO||!n?"":"••••••••••••";return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(De,{id:c,type:"password",value:d,disabled:o,placeholder:t.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(t.placeholder??F0))},className:"border-border bg-secondary/30"})]})}const l="border-border bg-secondary/30";return t.type==="textarea"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),s.jsx(Jd,{id:c,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${l}`})]}):s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(De,{id:c,type:t.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(t.type==="number"?Number(d.target.value):d.target.value),placeholder:t.placeholder??(t.type==="discordId"?"Discord snowflake ID":void 0),className:l})]})}const Ze=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("rounded-xl border border-border bg-card text-card-foreground shadow-none",t),...n}));Ze.displayName="Card";const ut=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex flex-col space-y-1.5 p-6",t),...n}));ut.displayName="CardHeader";const dt=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("font-semibold leading-none tracking-tight",t),...n}));dt.displayName="CardTitle";const Ot=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("text-sm text-muted-foreground",t),...n}));Ot.displayName="CardDescription";const Qe=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("p-6 pt-0",t),...n}));Qe.displayName="CardContent";const Sx=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex items-center p-6 pt-0",t),...n}));Sx.displayName="CardFooter";function Y0(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function yO(t,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=t.toLowerCase();return/prefix/.test(a)?"text":/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Nx(t,n=""){const a=[];for(const[o,c]of Object.entries(t)){const l=n?`${n}.${o}`:o;if(Array.isArray(c)){if(c.length>0&&typeof c[0]=="object"&&c[0]!==null&&!Array.isArray(c[0]))continue;a.push({path:l,label:Y0(o),type:"stringList"});continue}if(c&&typeof c=="object"&&Object.keys(c).length>0){a.push(...Nx(c,l));continue}a.push({path:l,label:Y0(o),type:yO(o,c)})}return a}function wO(t){const n=Nx(t);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function Fr(t,n){const a=n.split(".");let o=t;for(const c of a){if(o==null||typeof o!="object")return;o=o[c]}return o}function Gn(t,n,a){const o=n.split("."),c=structuredClone(t);let l=c;for(let d=0;d{switch(t){case"success":return NO;case"info":return kO;case"warning":return EO;case"error":return TO;default:return null}},CO=Array(12).fill(0),SO=({visible:t,className:n})=>be.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":t},be.createElement("div",{className:"sonner-spinner"},CO.map((a,o)=>be.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),NO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),EO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),kO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),TO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),MO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},be.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),be.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),RO=()=>{let[t,n]=be.useState(document.hidden);return be.useEffect(()=>{let a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),t},qh=1,AO=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let n=this.subscribers.indexOf(t);this.subscribers.splice(n,1)}),this.publish=t=>{this.subscribers.forEach(n=>n(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var n;let{message:a,...o}=t,c=typeof(t==null?void 0:t.id)=="number"||((n=t.id)==null?void 0:n.length)>0?t.id:qh++,l=this.toasts.find(m=>m.id===c),d=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),l?this.toasts=this.toasts.map(m=>m.id===c?(this.publish({...m,...t,id:c,title:a}),{...m,...t,id:c,dismissible:d,title:a}):m):this.addToast({title:a,...o,dismissible:d,id:c}),c},this.dismiss=t=>(this.dismissedToasts.add(t),t||this.toasts.forEach(n=>{this.subscribers.forEach(a=>a({id:n.id,dismiss:!0}))}),this.subscribers.forEach(n=>n({id:t,dismiss:!0})),t),this.message=(t,n)=>this.create({...n,message:t}),this.error=(t,n)=>this.create({...n,message:t,type:"error"}),this.success=(t,n)=>this.create({...n,type:"success",message:t}),this.info=(t,n)=>this.create({...n,type:"info",message:t}),this.warning=(t,n)=>this.create({...n,type:"warning",message:t}),this.loading=(t,n)=>this.create({...n,type:"loading",message:t}),this.promise=(t,n)=>{if(!n)return;let a;n.loading!==void 0&&(a=this.create({...n,promise:t,type:"loading",message:n.loading,description:typeof n.description!="function"?n.description:void 0}));let o=t instanceof Promise?t:t(),c=a!==void 0,l,d=o.then(async p=>{if(l=["resolve",p],be.isValidElement(p))c=!1,this.create({id:a,type:"default",message:p});else if(DO(p)&&!p.ok){c=!1;let g=typeof n.error=="function"?await n.error(`HTTP error! status: ${p.status}`):n.error,v=typeof n.description=="function"?await n.description(`HTTP error! status: ${p.status}`):n.description;this.create({id:a,type:"error",message:g,description:v})}else if(n.success!==void 0){c=!1;let g=typeof n.success=="function"?await n.success(p):n.success,v=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"success",message:g,description:v})}}).catch(async p=>{if(l=["reject",p],n.error!==void 0){c=!1;let g=typeof n.error=="function"?await n.error(p):n.error,v=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"error",message:g,description:v})}}).finally(()=>{var p;c&&(this.dismiss(a),a=void 0),(p=n.finally)==null||p.call(n)}),m=()=>new Promise((p,g)=>d.then(()=>l[0]==="reject"?g(l[1]):p(l[1])).catch(g));return typeof a!="string"&&typeof a!="number"?{unwrap:m}:Object.assign(a,{unwrap:m})},this.custom=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return this.create({jsx:t(a),id:a,...n}),a},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Tn=new AO,_O=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return Tn.addToast({title:t,...n,id:a}),a},DO=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",OO=_O,LO=()=>Tn.toasts,zO=()=>Tn.getActiveToasts(),Dt=Object.assign(OO,{success:Tn.success,info:Tn.info,warning:Tn.warning,error:Tn.error,custom:Tn.custom,message:Tn.message,promise:Tn.promise,dismiss:Tn.dismiss,loading:Tn.loading},{getHistory:LO,getToasts:zO});function PO(t,{insertAt:n}={}){if(typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}PO(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} +`);function Hu(t){return t.label!==void 0}var IO=3,UO="32px",BO="16px",q0=4e3,$O=356,HO=14,GO=20,VO=200;function wr(...t){return t.filter(Boolean).join(" ")}function FO(t){let[n,a]=t.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}var YO=t=>{var n,a,o,c,l,d,m,p,g,v,b;let{invert:w,toast:y,unstyled:C,interacting:S,setHeights:E,visibleToasts:k,heights:N,index:T,toasts:M,expanded:_,removeToast:R,defaultRichColors:L,closeButton:te,style:K,cancelButtonStyle:I,actionButtonStyle:G,className:Y="",descriptionClassName:ce="",duration:fe,position:se,gap:P,loadingIcon:Z,expandByDefault:ae,classNames:re,icons:V,closeButtonAriaLabel:O="Close toast",pauseWhenPageIsHidden:D}=t,[$,H]=be.useState(null),[X,xe]=be.useState(null),[q,ge]=be.useState(!1),[me,B]=be.useState(!1),[ie,we]=be.useState(!1),[Ce,ze]=be.useState(!1),[Ke,ft]=be.useState(!1),[Pt,gn]=be.useState(0),[Yr,_n]=be.useState(0),wn=be.useRef(y.duration||fe||q0),Xn=be.useRef(null),Zn=be.useRef(null),It=T===0,po=T+1<=k,nn=y.type,Dn=y.dismissible!==!1,Da=y.className||"",ho=y.descriptionClassName||"",Qn=be.useMemo(()=>N.findIndex(Oe=>Oe.toastId===y.id)||0,[N,y.id]),Es=be.useMemo(()=>{var Oe;return(Oe=y.closeButton)!=null?Oe:te},[y.closeButton,te]),qr=be.useMemo(()=>y.duration||fe||q0,[y.duration,fe]),gr=be.useRef(0),Tt=be.useRef(0),On=be.useRef(0),Mt=be.useRef(null),[Oi,Li]=se.split("-"),go=be.useMemo(()=>N.reduce((Oe,tt,it)=>it>=Qn?Oe:Oe+tt.height,0),[N,Qn]),Kr=RO(),Oa=y.invert||w,Mr=nn==="loading";Tt.current=be.useMemo(()=>Qn*P+go,[Qn,go]),be.useEffect(()=>{wn.current=qr},[qr]),be.useEffect(()=>{ge(!0)},[]),be.useEffect(()=>{let Oe=Zn.current;if(Oe){let tt=Oe.getBoundingClientRect().height;return _n(tt),E(it=>[{toastId:y.id,height:tt,position:y.position},...it]),()=>E(it=>it.filter(rn=>rn.toastId!==y.id))}},[E,y.id]),be.useLayoutEffect(()=>{if(!q)return;let Oe=Zn.current,tt=Oe.style.height;Oe.style.height="auto";let it=Oe.getBoundingClientRect().height;Oe.style.height=tt,_n(it),E(rn=>rn.find(Ft=>Ft.toastId===y.id)?rn.map(Ft=>Ft.toastId===y.id?{...Ft,height:it}:Ft):[{toastId:y.id,height:it,position:y.position},...rn])},[q,y.title,y.description,E,y.id]);let Kt=be.useCallback(()=>{B(!0),gn(Tt.current),E(Oe=>Oe.filter(tt=>tt.toastId!==y.id)),setTimeout(()=>{R(y)},VO)},[y,R,E,Tt]);be.useEffect(()=>{if(y.promise&&nn==="loading"||y.duration===1/0||y.type==="loading")return;let Oe;return _||S||D&&Kr?(()=>{if(On.current{var tt;(tt=y.onAutoClose)==null||tt.call(y,y),Kt()},wn.current)),()=>clearTimeout(Oe)},[_,S,y,nn,D,Kr,Kt]),be.useEffect(()=>{y.delete&&Kt()},[Kt,y.delete]);function La(){var Oe,tt,it;return V!=null&&V.loading?be.createElement("div",{className:wr(re==null?void 0:re.loader,(Oe=y==null?void 0:y.classNames)==null?void 0:Oe.loader,"sonner-loader"),"data-visible":nn==="loading"},V.loading):Z?be.createElement("div",{className:wr(re==null?void 0:re.loader,(tt=y==null?void 0:y.classNames)==null?void 0:tt.loader,"sonner-loader"),"data-visible":nn==="loading"},Z):be.createElement(SO,{className:wr(re==null?void 0:re.loader,(it=y==null?void 0:y.classNames)==null?void 0:it.loader),visible:nn==="loading"})}return be.createElement("li",{tabIndex:0,ref:Zn,className:wr(Y,Da,re==null?void 0:re.toast,(n=y==null?void 0:y.classNames)==null?void 0:n.toast,re==null?void 0:re.default,re==null?void 0:re[nn],(a=y==null?void 0:y.classNames)==null?void 0:a[nn]),"data-sonner-toast":"","data-rich-colors":(o=y.richColors)!=null?o:L,"data-styled":!(y.jsx||y.unstyled||C),"data-mounted":q,"data-promise":!!y.promise,"data-swiped":Ke,"data-removed":me,"data-visible":po,"data-y-position":Oi,"data-x-position":Li,"data-index":T,"data-front":It,"data-swiping":ie,"data-dismissible":Dn,"data-type":nn,"data-invert":Oa,"data-swipe-out":Ce,"data-swipe-direction":X,"data-expanded":!!(_||ae&&q),style:{"--index":T,"--toasts-before":T,"--z-index":M.length-T,"--offset":`${me?Pt:Tt.current}px`,"--initial-height":ae?"auto":`${Yr}px`,...K,...y.style},onDragEnd:()=>{we(!1),H(null),Mt.current=null},onPointerDown:Oe=>{Mr||!Dn||(Xn.current=new Date,gn(Tt.current),Oe.target.setPointerCapture(Oe.pointerId),Oe.target.tagName!=="BUTTON"&&(we(!0),Mt.current={x:Oe.clientX,y:Oe.clientY}))},onPointerUp:()=>{var Oe,tt,it,rn;if(Ce||!Dn)return;Mt.current=null;let Ft=Number(((Oe=Zn.current)==null?void 0:Oe.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Rt=Number(((tt=Zn.current)==null?void 0:tt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),Jn=new Date().getTime()-((it=Xn.current)==null?void 0:it.getTime()),fn=$==="x"?Ft:Rt,Ln=Math.abs(fn)/Jn;if(Math.abs(fn)>=GO||Ln>.11){gn(Tt.current),(rn=y.onDismiss)==null||rn.call(y,y),xe($==="x"?Ft>0?"right":"left":Rt>0?"down":"up"),Kt(),ze(!0),ft(!1);return}we(!1),H(null)},onPointerMove:Oe=>{var tt,it,rn,Ft;if(!Mt.current||!Dn||((tt=window.getSelection())==null?void 0:tt.toString().length)>0)return;let Rt=Oe.clientY-Mt.current.y,Jn=Oe.clientX-Mt.current.x,fn=(it=t.swipeDirections)!=null?it:FO(se);!$&&(Math.abs(Jn)>1||Math.abs(Rt)>1)&&H(Math.abs(Jn)>Math.abs(Rt)?"x":"y");let Ln={x:0,y:0};$==="y"?(fn.includes("top")||fn.includes("bottom"))&&(fn.includes("top")&&Rt<0||fn.includes("bottom")&&Rt>0)&&(Ln.y=Rt):$==="x"&&(fn.includes("left")||fn.includes("right"))&&(fn.includes("left")&&Jn<0||fn.includes("right")&&Jn>0)&&(Ln.x=Jn),(Math.abs(Ln.x)>0||Math.abs(Ln.y)>0)&&ft(!0),(rn=Zn.current)==null||rn.style.setProperty("--swipe-amount-x",`${Ln.x}px`),(Ft=Zn.current)==null||Ft.style.setProperty("--swipe-amount-y",`${Ln.y}px`)}},Es&&!y.jsx?be.createElement("button",{"aria-label":O,"data-disabled":Mr,"data-close-button":!0,onClick:Mr||!Dn?()=>{}:()=>{var Oe;Kt(),(Oe=y.onDismiss)==null||Oe.call(y,y)},className:wr(re==null?void 0:re.closeButton,(c=y==null?void 0:y.classNames)==null?void 0:c.closeButton)},(l=V==null?void 0:V.close)!=null?l:MO):null,y.jsx||f.isValidElement(y.title)?y.jsx?y.jsx:typeof y.title=="function"?y.title():y.title:be.createElement(be.Fragment,null,nn||y.icon||y.promise?be.createElement("div",{"data-icon":"",className:wr(re==null?void 0:re.icon,(d=y==null?void 0:y.classNames)==null?void 0:d.icon)},y.promise||y.type==="loading"&&!y.icon?y.icon||La():null,y.type!=="loading"?y.icon||(V==null?void 0:V[nn])||jO(nn):null):null,be.createElement("div",{"data-content":"",className:wr(re==null?void 0:re.content,(m=y==null?void 0:y.classNames)==null?void 0:m.content)},be.createElement("div",{"data-title":"",className:wr(re==null?void 0:re.title,(p=y==null?void 0:y.classNames)==null?void 0:p.title)},typeof y.title=="function"?y.title():y.title),y.description?be.createElement("div",{"data-description":"",className:wr(ce,ho,re==null?void 0:re.description,(g=y==null?void 0:y.classNames)==null?void 0:g.description)},typeof y.description=="function"?y.description():y.description):null),f.isValidElement(y.cancel)?y.cancel:y.cancel&&Hu(y.cancel)?be.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||I,onClick:Oe=>{var tt,it;Hu(y.cancel)&&Dn&&((it=(tt=y.cancel).onClick)==null||it.call(tt,Oe),Kt())},className:wr(re==null?void 0:re.cancelButton,(v=y==null?void 0:y.classNames)==null?void 0:v.cancelButton)},y.cancel.label):null,f.isValidElement(y.action)?y.action:y.action&&Hu(y.action)?be.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||G,onClick:Oe=>{var tt,it;Hu(y.action)&&((it=(tt=y.action).onClick)==null||it.call(tt,Oe),!Oe.defaultPrevented&&Kt())},className:wr(re==null?void 0:re.actionButton,(b=y==null?void 0:y.classNames)==null?void 0:b.actionButton)},y.action.label):null))};function K0(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}function qO(t,n){let a={};return[t,n].forEach((o,c)=>{let l=c===1,d=l?"--mobile-offset":"--offset",m=l?BO:UO;function p(g){["top","right","bottom","left"].forEach(v=>{a[`${d}-${v}`]=typeof g=="number"?`${g}px`:g})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(g=>{o[g]===void 0?a[`${d}-${g}`]=m:a[`${d}-${g}`]=typeof o[g]=="number"?`${o[g]}px`:o[g]}):p(m)}),a}var KO=f.forwardRef(function(t,n){let{invert:a,position:o="bottom-right",hotkey:c=["altKey","KeyT"],expand:l,closeButton:d,className:m,offset:p,mobileOffset:g,theme:v="light",richColors:b,duration:w,style:y,visibleToasts:C=IO,toastOptions:S,dir:E=K0(),gap:k=HO,loadingIcon:N,icons:T,containerAriaLabel:M="Notifications",pauseWhenPageIsHidden:_}=t,[R,L]=be.useState([]),te=be.useMemo(()=>Array.from(new Set([o].concat(R.filter(D=>D.position).map(D=>D.position)))),[R,o]),[K,I]=be.useState([]),[G,Y]=be.useState(!1),[ce,fe]=be.useState(!1),[se,P]=be.useState(v!=="system"?v:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),Z=be.useRef(null),ae=c.join("+").replace(/Key/g,"").replace(/Digit/g,""),re=be.useRef(null),V=be.useRef(!1),O=be.useCallback(D=>{L($=>{var H;return(H=$.find(X=>X.id===D.id))!=null&&H.delete||Tn.dismiss(D.id),$.filter(({id:X})=>X!==D.id)})},[]);return be.useEffect(()=>Tn.subscribe(D=>{if(D.dismiss){L($=>$.map(H=>H.id===D.id?{...H,delete:!0}:H));return}setTimeout(()=>{m8.flushSync(()=>{L($=>{let H=$.findIndex(X=>X.id===D.id);return H!==-1?[...$.slice(0,H),{...$[H],...D},...$.slice(H+1)]:[D,...$]})})})}),[]),be.useEffect(()=>{if(v!=="system"){P(v);return}if(v==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?P("dark"):P("light")),typeof window>"u")return;let D=window.matchMedia("(prefers-color-scheme: dark)");try{D.addEventListener("change",({matches:$})=>{P($?"dark":"light")})}catch{D.addListener(({matches:H})=>{try{P(H?"dark":"light")}catch(X){console.error(X)}})}},[v]),be.useEffect(()=>{R.length<=1&&Y(!1)},[R]),be.useEffect(()=>{let D=$=>{var H,X;c.every(xe=>$[xe]||$.code===xe)&&(Y(!0),(H=Z.current)==null||H.focus()),$.code==="Escape"&&(document.activeElement===Z.current||(X=Z.current)!=null&&X.contains(document.activeElement))&&Y(!1)};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[c]),be.useEffect(()=>{if(Z.current)return()=>{re.current&&(re.current.focus({preventScroll:!0}),re.current=null,V.current=!1)}},[Z.current]),be.createElement("section",{ref:n,"aria-label":`${M} ${ae}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},te.map((D,$)=>{var H;let[X,xe]=D.split("-");return R.length?be.createElement("ol",{key:D,dir:E==="auto"?K0():E,tabIndex:-1,ref:Z,className:m,"data-sonner-toaster":!0,"data-theme":se,"data-y-position":X,"data-lifted":G&&R.length>1&&!l,"data-x-position":xe,style:{"--front-toast-height":`${((H=K[0])==null?void 0:H.height)||0}px`,"--width":`${$O}px`,"--gap":`${k}px`,...y,...qO(p,g)},onBlur:q=>{V.current&&!q.currentTarget.contains(q.relatedTarget)&&(V.current=!1,re.current&&(re.current.focus({preventScroll:!0}),re.current=null))},onFocus:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||V.current||(V.current=!0,re.current=q.relatedTarget)},onMouseEnter:()=>Y(!0),onMouseMove:()=>Y(!0),onMouseLeave:()=>{ce||Y(!1)},onDragEnd:()=>Y(!1),onPointerDown:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||fe(!0)},onPointerUp:()=>fe(!1)},R.filter(q=>!q.position&&$===0||q.position===D).map((q,ge)=>{var me,B;return be.createElement(YO,{key:q.id,icons:T,index:ge,toast:q,defaultRichColors:b,duration:(me=S==null?void 0:S.duration)!=null?me:w,className:S==null?void 0:S.className,descriptionClassName:S==null?void 0:S.descriptionClassName,invert:a,visibleToasts:C,closeButton:(B=S==null?void 0:S.closeButton)!=null?B:d,interacting:ce,position:D,style:S==null?void 0:S.style,unstyled:S==null?void 0:S.unstyled,classNames:S==null?void 0:S.classNames,cancelButtonStyle:S==null?void 0:S.cancelButtonStyle,actionButtonStyle:S==null?void 0:S.actionButtonStyle,removeToast:O,toasts:R.filter(ie=>ie.position==q.position),heights:K.filter(ie=>ie.position==q.position),setHeights:I,expandByDefault:l,gap:k,loadingIcon:N,expanded:G,pauseWhenPageIsHidden:_,swipeDirections:t.swipeDirections})})):null}))});async function nd(t){const n=Dt.loading("Saving changes…");try{const a=await t();if(Dt.success("Changes saved",{id:n}),a.botRestart){const o=Dt.loading("Restarting bot…");a.botRestart.success?Dt.success("Bot started",{id:o}):Dt.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Dt.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function WO({filename:t}){const{canEditConfig:n}=qt(),a=!n("supportbot"),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{p(!0),w(""),C("");try{const _=(await Ne.getAddonConfigJson(t)).data??{};c(_),d(structuredClone(_))}catch(M){w(M instanceof Error?M.message:"Failed to load config")}finally{p(!1)}},[t]);f.useEffect(()=>{S()},[S]);const E=o?wO(o):null;function k(M,_){c(R=>R&&Gn(R,M,_))}async function N(){if(!(a||!o)){v(!0),w(""),C("");try{const M=await nd(()=>Ne.saveAddonConfig(t,o));C(M.message||"Saved."),await S()}catch(M){w(M instanceof Error?M.message:"Save failed")}finally{v(!1)}}}if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o||!E)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b||"Failed to load"})});const T=l&&JSON.stringify(o)!==JSON.stringify(l);return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:S,disabled:m||g,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:N,disabled:g||!T,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save"]})]}),b?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(ve,{icon:ig,size:18}),s.jsx(qe,{children:b})]}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,E.map(M=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:M.title}),M.description?s.jsx(Ot,{children:M.description}):null]}),s.jsx(Qe,{className:"grid gap-4 sm:grid-cols-2",children:M.fields.map(_=>s.jsx("div",{className:_.type==="textarea"||_.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:_,value:Fr(o,_.path),readOnly:a,onChange:R=>k(_.path,R)})},_.path))})]},M.title))]})}function XO(t){return t.startsWith("Ticket.DepartmentSystem.")?"Ticket Departments":t.startsWith("Ticket.PrioritySystem.")?"Ticket Priorities":t.startsWith("Ticket.")?"Tickets":(t.split(".")[0]??"Other").replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,a=>a.toUpperCase())}function ZO(t,n){const a=new Set(t.flatMap(d=>d.fields.map(m=>m.path))),o=Nx(n).filter(d=>!a.has(d.path));if(o.length===0)return t;const c=t.map(d=>({...d,fields:[...d.fields]})),l=new Map;for(const d of o){const m=XO(d.path),p=l.get(m)??[];p.push(d),l.set(m,p)}for(const[d,m]of l.entries()){const p=c.find(g=>g.title.toLowerCase()===d.toLowerCase());p?p.fields.push(...m):c.push({title:d,description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((g,v)=>g.path.localeCompare(v.path))})}return c}function W0(t,n){(n==null||n>t.length)&&(n=t.length);for(var a=0,o=Array(n);a=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};Gu.initial(t),Gu.handler(n);var a={current:t},o=Al(wL)(a,n),c=Al(yL)(a),l=Al(Gu.changes)(t),d=Al(bL)(a);function m(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(v){return v};return Gu.selector(g),g(a.current)}function p(g){cL(o,c,l,d)(g)}return[m,p]}function bL(t,n){return Ql(n)?n(t.current):n}function yL(t,n){return t.current=J0(J0({},t.current),n),n}function wL(t,n,a){return Ql(n)?n(t.current):Object.keys(a).forEach(function(o){var c;return(c=n[o])===null||c===void 0?void 0:c.call(n,t.current[o])}),a}var jL={create:vL},CL={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function SL(t){return function n(){for(var a=this,o=arguments.length,c=new Array(o),l=0;l=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:t,n)}var Yn=XL;function zl(){}function li(t,n,a,o){return ZL(t,o)||QL(t,n,a,o)}function ZL(t,n){return t.editor.getModel(l5(t,n))}function QL(t,n,a,o){return t.editor.createModel(n,a,o?l5(t,o):void 0)}function l5(t,n){return t.Uri.parse(n)}function JL({original:t,modified:n,language:a,originalLanguage:o,modifiedLanguage:c,originalModelPath:l,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:g="light",loading:v="Loading...",options:b={},height:w="100%",width:y="100%",className:C,wrapperProps:S={},beforeMount:E=zl,onMount:k=zl}){let[N,T]=f.useState(!1),[M,_]=f.useState(!0),R=f.useRef(null),L=f.useRef(null),te=f.useRef(null),K=f.useRef(k),I=f.useRef(E),G=f.useRef(!1);i5(()=>{let se=s5.init();return se.then(P=>(L.current=P)&&_(!1)).catch(P=>(P==null?void 0:P.type)!=="cancelation"&&console.error("Monaco initialization: error:",P)),()=>R.current?fe():se.cancel()}),Yn(()=>{if(R.current&&L.current){let se=R.current.getOriginalEditor(),P=li(L.current,t||"",o||a||"text",l||"");P!==se.getModel()&&se.setModel(P)}},[l],N),Yn(()=>{if(R.current&&L.current){let se=R.current.getModifiedEditor(),P=li(L.current,n||"",c||a||"text",d||"");P!==se.getModel()&&se.setModel(P)}},[d],N),Yn(()=>{let se=R.current.getModifiedEditor();se.getOption(L.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],N),Yn(()=>{var se,P;(P=(se=R.current)==null?void 0:se.getModel())==null||P.original.setValue(t||"")},[t],N),Yn(()=>{let{original:se,modified:P}=R.current.getModel();L.current.editor.setModelLanguage(se,o||a||"text"),L.current.editor.setModelLanguage(P,c||a||"text")},[a,o,c],N),Yn(()=>{var se;(se=L.current)==null||se.editor.setTheme(g)},[g],N),Yn(()=>{var se;(se=R.current)==null||se.updateOptions(b)},[b],N);let Y=f.useCallback(()=>{var Z;if(!L.current)return;I.current(L.current);let se=li(L.current,t||"",o||a||"text",l||""),P=li(L.current,n||"",c||a||"text",d||"");(Z=R.current)==null||Z.setModel({original:se,modified:P})},[a,n,c,t,o,l,d]),ce=f.useCallback(()=>{var se;!G.current&&te.current&&(R.current=L.current.editor.createDiffEditor(te.current,{automaticLayout:!0,...b}),Y(),(se=L.current)==null||se.editor.setTheme(g),T(!0),G.current=!0)},[b,g,Y]);f.useEffect(()=>{N&&K.current(R.current,L.current)},[N]),f.useEffect(()=>{!M&&!N&&ce()},[M,N,ce]);function fe(){var P,Z,ae,re;let se=(P=R.current)==null?void 0:P.getModel();m||((Z=se==null?void 0:se.original)==null||Z.dispose()),p||((ae=se==null?void 0:se.modified)==null||ae.dispose()),(re=R.current)==null||re.dispose()}return be.createElement(o5,{width:y,height:w,isEditorReady:N,loading:v,_ref:te,className:C,wrapperProps:S})}var ez=JL;f.memo(ez);function tz(t){let n=f.useRef();return f.useEffect(()=>{n.current=t},[t]),n.current}var nz=tz,Vu=new Map;function rz({defaultValue:t,defaultLanguage:n,defaultPath:a,value:o,language:c,path:l,theme:d="light",line:m,loading:p="Loading...",options:g={},overrideServices:v={},saveViewState:b=!0,keepCurrentModel:w=!1,width:y="100%",height:C="100%",className:S,wrapperProps:E={},beforeMount:k=zl,onMount:N=zl,onChange:T,onValidate:M=zl}){let[_,R]=f.useState(!1),[L,te]=f.useState(!0),K=f.useRef(null),I=f.useRef(null),G=f.useRef(null),Y=f.useRef(N),ce=f.useRef(k),fe=f.useRef(),se=f.useRef(o),P=nz(l),Z=f.useRef(!1),ae=f.useRef(!1);i5(()=>{let O=s5.init();return O.then(D=>(K.current=D)&&te(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>I.current?V():O.cancel()}),Yn(()=>{var D,$,H,X;let O=li(K.current,t||o||"",n||c||"",l||a||"");O!==((D=I.current)==null?void 0:D.getModel())&&(b&&Vu.set(P,($=I.current)==null?void 0:$.saveViewState()),(H=I.current)==null||H.setModel(O),b&&((X=I.current)==null||X.restoreViewState(Vu.get(l))))},[l],_),Yn(()=>{var O;(O=I.current)==null||O.updateOptions(g)},[g],_),Yn(()=>{!I.current||o===void 0||(I.current.getOption(K.current.editor.EditorOption.readOnly)?I.current.setValue(o):o!==I.current.getValue()&&(ae.current=!0,I.current.executeEdits("",[{range:I.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),I.current.pushUndoStop(),ae.current=!1))},[o],_),Yn(()=>{var D,$;let O=(D=I.current)==null?void 0:D.getModel();O&&c&&(($=K.current)==null||$.editor.setModelLanguage(O,c))},[c],_),Yn(()=>{var O;m!==void 0&&((O=I.current)==null||O.revealLine(m))},[m],_),Yn(()=>{var O;(O=K.current)==null||O.editor.setTheme(d)},[d],_);let re=f.useCallback(()=>{var O;if(!(!G.current||!K.current)&&!Z.current){ce.current(K.current);let D=l||a,$=li(K.current,o||t||"",n||c||"",D||"");I.current=(O=K.current)==null?void 0:O.editor.create(G.current,{model:$,automaticLayout:!0,...g},v),b&&I.current.restoreViewState(Vu.get(D)),K.current.editor.setTheme(d),m!==void 0&&I.current.revealLine(m),R(!0),Z.current=!0}},[t,n,a,o,c,l,g,v,b,d,m]);f.useEffect(()=>{_&&Y.current(I.current,K.current)},[_]),f.useEffect(()=>{!L&&!_&&re()},[L,_,re]),se.current=o,f.useEffect(()=>{var O,D;_&&T&&((O=fe.current)==null||O.dispose(),fe.current=(D=I.current)==null?void 0:D.onDidChangeModelContent($=>{ae.current||T(I.current.getValue(),$)}))},[_,T]),f.useEffect(()=>{if(_){let O=K.current.editor.onDidChangeMarkers(D=>{var H;let $=(H=I.current.getModel())==null?void 0:H.uri;if($&&D.find(X=>X.path===$.path)){let X=K.current.editor.getModelMarkers({resource:$});M==null||M(X)}});return()=>{O==null||O.dispose()}}return()=>{}},[_,M]);function V(){var O,D;(O=fe.current)==null||O.dispose(),w?b&&Vu.set(l,I.current.saveViewState()):(D=I.current.getModel())==null||D.dispose(),I.current.dispose()}return be.createElement(o5,{width:y,height:C,isEditorReady:_,loading:p,_ref:G,className:S,wrapperProps:E})}var az=rz,sz=f.memo(az),oz=sz;function iz(t){return t!==null&&typeof t=="object"&&"Command"in t}function lz(t){return Object.entries(t).filter(([,n])=>iz(n)).map(([n,a])=>({key:n,...a}))}function cz({data:t,onChange:n}){const a=lz(t);function o(c,l){const d=t[c];n({...t,[c]:{...d,...l}})}return a.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(c=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(ve,{icon:ds,size:18})}),s.jsx(dt,{className:"text-base",children:c.key})]}),s.jsxs(Qe,{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(_e,{htmlFor:`${c.key}-enabled`,children:"Enabled"}),s.jsx(kt,{id:`${c.key}-enabled`,checked:c.Enabled!==!1,onCheckedChange:l=>o(c.key,{Enabled:l})})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{children:"Slash command"}),s.jsx(De,{value:c.Command??"",onChange:l=>o(c.key,{Command:l.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{children:"Description"}),s.jsx(De,{value:c.Description??"",onChange:l=>o(c.key,{Description:l.target.value}),className:"border-border bg-secondary/30"})]})]})]},c.key))})}function uz(t,n){let a=structuredClone(n);if(t==="supportbot"){const o=Fr(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Gn(a,"General.Token","BOT_TOKEN"))}if(t==="supportbot-ai"){const o=Fr(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Gn(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function dz(t,n,a,o){const c={};for(const l of n)for(const d of l.fields){const m=Fr(a,d.path),p=Fr(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(c[`${t}:${d.path}`]=m)}return c}function fz(t,n){const a=new Map,o=[];for(const l of t){const d=l.path.split(".");if(d.length>=5&&d[1]==="DepartmentSystem"&&d[2]==="Departments"){const m=d[3],p=a.get(m)??[];p.push(l),a.set(m,p)}else if(d.length>=3){const m=d[1],p=a.get(m)??[];p.push(l),a.set(m,p)}else o.push(l)}if(a.size===0)return{standalone:t,groups:[]};const c=[...a.entries()].map(([l,d])=>{const m=["enabled","name","description","emoji","category","role","channelprefix","defaultpriority","questions"];d.sort((v,b)=>{var E,k;const w=((E=v.path.split(".").pop())==null?void 0:E.toLowerCase())||"",y=((k=b.path.split(".").pop())==null?void 0:k.toLowerCase())||"",C=m.indexOf(w),S=m.indexOf(y);return C!==-1&&S!==-1?C-S:C!==-1?-1:S!==-1?1:w.localeCompare(y)});const p=d.find(v=>v.path.toLowerCase().endsWith(".name")||v.path.toLowerCase().endsWith(".title"));let g="";if(p&&n){const v=Fr(n,p.path);typeof v=="string"&&v.trim()&&(g=v.trim())}return g||(g=l.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,v=>v.toUpperCase())),{key:l,name:g,fields:d}});return{standalone:o,groups:c}}function mz({configFile:t}){const{permissions:n,canEditConfig:a}=qt(),o=Mn(n,"configs.raw_yaml"),c=!a(t),[l,d]=f.useState(null),[m,p]=f.useState(null),[g,v]=f.useState(!0),[b,w]=f.useState(!1),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState("visual");f.useEffect(()=>{!o&&k==="yaml"&&N("visual")},[o,k]);const[T,M]=f.useState(""),[_,R]=f.useState(""),[L]=wd(),[te,K]=f.useState(()=>L.get("tab")||null),[I,G]=f.useState(!1),[Y,ce]=f.useState(""),[fe,se]=f.useState(""),P=()=>{const q=Y.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"");if(!q||!l)return;const ge=fe.trim()||q,me=`Ticket.DepartmentSystem.Departments.${q}`,B={...l};Gn(B,`${me}.Name`,ge),Gn(B,`${me}.Description`,`Open a ${ge} ticket`),Gn(B,`${me}.Emoji`,"🎫"),Gn(B,`${me}.Category`,"CATEGORY_ID"),Gn(B,`${me}.Role`,"ROLE_ID"),Gn(B,`${me}.ChannelPrefix`,`${q}-`),Gn(B,`${me}.DefaultPriority`,"normal"),Gn(B,`${me}.Questions`,["What do you need assistance with?"]),d(B),G(!1),ce(""),se("")},Z=q=>{if(!l)return;const ge=`Ticket.DepartmentSystem.Departments.${q}`,me=JSON.parse(JSON.stringify(l));if(Object.keys(me).forEach(B=>{(B.startsWith(ge)||B===ge)&&delete me[B]}),me.Ticket&&typeof me.Ticket=="object"){const B=me.Ticket.DepartmentSystem;B&&typeof B=="object"&&B.Departments&&typeof B.Departments=="object"&&delete B.Departments[q]}d(me)},ae=FM(t),re=f.useMemo(()=>!ae||ae==="commands"||!l?ae:ZO(ae,l),[ae,l]);f.useEffect(()=>{var q;if(re&&re!=="commands"){const ge=L.get("tab");if(ge&&re.find(me=>me.title.toLowerCase()===ge.toLowerCase())){const me=re.find(B=>B.title.toLowerCase()===ge.toLowerCase());me&&me.title!==te&&K(me.title)}else(!te||!re.find(me=>me.title===te))&&K(((q=re[0])==null?void 0:q.title)||null)}},[re,te,L]);const V=f.useCallback(async()=>{v(!0),C(""),E("");try{const ge=(await Ne.getConfigJson(t)).data??{},me=uz(t,ge);d(me),p(me);const ie=(await Ne.getConfigRaw(t)).data??"",we=z8(ie,t);M(we),R(we)}catch(q){C(q instanceof Error?q.message:"Failed to load config")}finally{v(!1)}},[t]);f.useEffect(()=>{V()},[V]);function O(q,ge){d(me=>me&&Gn(me,q,ge))}async function D(){if(!(c||T===_)){w(!0),C(""),E("");try{const q=await nd(()=>Ne.saveConfigRaw(t,T));E(q.message||"Config saved."),await V()}catch(q){C(q instanceof Error?q.message:"Save failed")}finally{w(!1)}}}async function $(){if(!(c||!l||!m)){if(k==="yaml"){await D();return}w(!0),C(""),E("");try{if(ae==="commands"){const q={};for(const me of Object.keys(l))JSON.stringify(l[me])!==JSON.stringify(m[me])&&(q[`${t}:${me}`]=l[me]);if(Object.keys(q).length===0){E("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(q));E(ge.message||"")}else if(re&&re!=="commands"){const q=dz(t,re,l,m);if(Object.keys(q).length===0){E("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(q));E(ge.message||"")}await V()}catch(q){C(q instanceof Error?q.message:"Save failed")}finally{w(!1)}}}if(ae===null)return s.jsx(Ye,{children:s.jsx(qe,{children:"No visual editor available for this file."})});if(g)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!l)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y||"Failed to load"})});const H=m&&JSON.stringify(l)!==JSON.stringify(m),xe=k==="yaml"?T!==_:H;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[o?s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:k==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),s.jsx(ue,{type:"button",variant:k==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}):null,s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[xe?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:V,disabled:g||b,children:"Reload"}),c?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:$,disabled:b||!xe,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),b?"Saving…":"Save"]})]})]}),y?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(ve,{icon:ig,size:18}),s.jsx(qe,{children:y})]}):null,S?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:S})}):null,k==="yaml"?s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:"Raw YAML"}),s.jsx(Ot,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),s.jsx(Qe,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:s.jsx(oz,{height:"100%",language:"yaml",theme:"vs-dark",value:T,onChange:q=>M(q||""),options:{readOnly:c,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):ae==="commands"?s.jsx(cz,{data:l,onChange:q=>d(q)}):re&&re!=="commands"?s.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[s.jsx("nav",{className:"flex flex-col gap-1",children:re.map(q=>s.jsx("button",{onClick:()=>K(q.title),className:pe("text-left px-3 py-2 text-sm rounded-md transition-colors",te===q.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:q.title},q.title))}),s.jsx("div",{className:"min-w-0",children:re.filter(q=>q.title===te).map(q=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3 flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(dt,{className:"text-base",children:q.title}),q.description?s.jsx(Ot,{children:q.description}):null]}),q.title==="Ticket Departments"&&!c&&s.jsxs(ue,{type:"button",size:"sm",variant:"outline",onClick:()=>G(!0),className:"gap-1.5 text-xs h-8 shrink-0",children:[s.jsx(ve,{icon:sg,size:14})," Add Department"]})]}),s.jsx(Qe,{className:"space-y-6",children:(()=>{const{standalone:ge,groups:me}=fz(q.fields,l);return s.jsxs(s.Fragment,{children:[ge.length>0&&s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:ge.map(B=>s.jsx("div",{className:B.type==="textarea"||B.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:B,value:Fr(l,B.path),readOnly:c,onChange:ie=>O(B.path,ie)})},B.path))}),me.map(B=>s.jsxs("div",{className:"rounded-xl border border-border bg-card/60 p-4 space-y-4 shadow-sm transition-all hover:border-primary/40",children:[s.jsxs("div",{className:"flex items-center justify-between border-b border-border/60 pb-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-semibold text-base text-foreground",children:B.name}),s.jsx("span",{className:"text-xs font-mono px-2.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20 font-medium",children:q.title==="Ticket Departments"?`Ticket.${B.key}`:B.key})]}),q.title==="Ticket Departments"&&B.key!=="DepartmentSystem"&&!c&&s.jsx(ue,{type:"button",size:"sm",variant:"ghost",onClick:()=>Z(B.key),className:"h-7 w-7 p-0 text-muted-foreground hover:text-destructive",title:"Delete Department",children:s.jsx(ve,{icon:wi,size:14})})]}),s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:B.fields.map(ie=>s.jsx("div",{className:ie.type==="textarea"||ie.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:ie,value:Fr(l,ie.path),readOnly:c,onChange:we=>O(ie.path,we)})},ie.path))})]},B.key))]})})()})]},q.title))})]}):null,s.jsx(Qs,{open:I,onOpenChange:G,children:s.jsxs(hs,{className:"sm:max-w-[400px]",children:[s.jsxs(gs,{children:[s.jsx(xs,{className:"text-base",children:"Add Ticket Department"}),s.jsx(vs,{className:"text-xs",children:"Create a new support department for ticket creation."})]}),s.jsxs("div",{className:"space-y-3 py-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department Key (Internal ID)"}),s.jsx(De,{placeholder:"billing",value:Y,onChange:q=>ce(q.target.value.toLowerCase().replace(/[^a-z0-9_-]/g,"")),className:"text-xs font-mono border-border bg-secondary/30"}),s.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["e.g. ",s.jsx("code",{children:"billing"}),", ",s.jsx("code",{children:"technical"}),", ",s.jsx("code",{children:"sales"})]})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department Display Name"}),s.jsx(De,{placeholder:"Billing & Sales Support",value:fe,onChange:q=>se(q.target.value),className:"text-xs border-border bg-secondary/30"})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>G(!1),className:"text-xs",children:"Cancel"}),s.jsx(ue,{size:"sm",onClick:P,disabled:!Y.trim(),className:"text-xs bg-primary font-semibold",children:"Create Department"})]})]})})]})}const pz=Ne.listConfigs(),hz={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function gz(){var T,M;const{permissions:t,canViewConfig:n}=qt(),{files:a}=$2(),[o,c]=wd(),l=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>pz.filter(_=>n(_)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),g=f.useMemo(()=>[...m,...p.map(_=>_l(_))],[m,p]),v=g[0]??"",[b,w]=f.useState(()=>l&&g.includes(l)?l:v);if(f.useEffect(()=>{l&&g.includes(l)?w(l):g.includes(b)||(w(v),v&&c({file:v}))},[l,g,b,v,c]),g.length===0)return s.jsx(ya,{to:mg(t),replace:!0});const y=H8(b),C=(y==null?void 0:y.type)==="addon",S=C?y.file:null,E=C?H2(S):hz[b]??"Configuration",k=C?!!((T=t==null?void 0:t.configs.supportbot)!=null&&T.edit):t?!!((M=t.configs[b])!=null&&M.edit):!1,N=C?S:`${b}.yml`;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),s.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${N} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${N} — you do not have permission to save changes.`})]}),s.jsx("div",{className:"mt-6",children:C&&S?s.jsx(WO,{filename:S},S):s.jsx(mz,{configFile:b},b)})]})}const xz={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function vz(t){return t?xz[t]||"Sign-in failed. Please try again.":""}function bz(){const{branding:t}=Ed(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=qt(),[c]=wd(),l=f.useMemo(()=>vz(c.get("error")),[c]);return!a&&n?s.jsx(ya,{to:"/",replace:!0}):s.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:s.jsxs(Ze,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),s.jsxs(ut,{className:"space-y-6 pt-10 pb-4 text-center",children:[s.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:s.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),s.jsxs("div",{children:[s.jsx(dt,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:t.title||"SupportBot"}),s.jsx(Ot,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),s.jsxs(Qe,{className:"space-y-6 pb-10",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),s.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",s.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),l?s.jsx(Ye,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:s.jsx(qe,{className:"font-medium",children:l})}):null,s.jsxs(ue,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[s.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),s.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:s.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const mi=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:cg},{id:"database",title:"Database",subtitle:"SQLite or MySQL engine",icon:x8},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:By},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:Nd},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:rh},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:By}];function yz(t){return t==="oauth"?"oauth":t==="owners"?"owners":t}function wz({brandingTitle:t,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:c}){return s.jsx("div",{className:"min-h-svh bg-background",children:s.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[s.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?s.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):s.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:s.jsx(ve,{icon:cg,size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),s.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:t})]})]}),c]})})}function jz({currentIndex:t,validation:n}){const a=(t+1)/mi.length*100;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[s.jsxs("span",{children:["Step ",t+1," of ",mi.length]}),s.jsxs("span",{children:[Math.round(a),"%"]})]}),s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),s.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:mi.map((o,c)=>{var g;const l=yz(o.id),d=(g=n[l])==null?void 0:g.ok,m=c===t,p=cs.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx(ve,{icon:jd,size:14}),o.globalName||o.username,s.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!t.bot&&!((a=t.users)!=null&&a.length)?s.jsx("p",{children:t.warning||"Verified successfully."}):null]})}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:t.error})}):null}function Sz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",s.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",s.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"botToken",children:"Bot token"}),s.jsx(De,{id:"botToken",type:"password",autoComplete:"off",value:t.botToken,onChange:l=>n({...t,botToken:l.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.botToken}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.botToken,onClick:c,children:o?"Checking with Discord…":"Verify bot token"})})]})}function Nz({values:t,setValues:n,validation:a,validating:o,onValidate:c,onGenerate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"secretKey",children:"Session secret"}),s.jsx(De,{id:"secretKey",type:"password",autoComplete:"off",value:t.secretKey,onChange:d=>n({...t,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.secretKey}),s.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[s.jsx(ue,{type:"button",variant:"outline",onClick:l,children:"Generate secure secret"}),s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.secretKey,onClick:c,children:o?"Checking…":"Validate"})]})]})}function Ez({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",s.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"clientId",children:"Client ID"}),s.jsx(De,{id:"clientId",value:t.clientId,onChange:l=>n({...t,clientId:l.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"clientSecret",children:"Client Secret"}),s.jsx(De,{id:"clientSecret",type:"password",autoComplete:"off",value:t.clientSecret,onChange:l=>n({...t,clientSecret:l.target.value}),className:"h-11 font-mono text-sm"})]})]}),s.jsx(mo,{result:a.oauth}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.clientId||!t.clientSecret,onClick:c,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function kz({values:t,setValues:n,validation:a}){async function o(){if(t.redirectUri)try{await navigator.clipboard.writeText(t.redirectUri)}catch{}}return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",s.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"redirectUri",children:"Redirect URI"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(De,{id:"redirectUri",value:t.redirectUri,onChange:c=>n({...t,redirectUri:c.target.value}),className:"h-11 flex-1 font-mono text-xs"}),s.jsx(ue,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:s.jsx(ve,{icon:R2,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?s.jsx(mo,{result:a.redirectUri}):s.jsx(Ye,{className:"border-border bg-secondary",children:s.jsx(qe,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function Tz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",s.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",s.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"owners",children:"Owner user IDs"}),s.jsx(Jd,{id:"owners",value:t.ownerUserIds,onChange:l=>n({...t,ownerUserIds:l.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),s.jsx(mo,{result:a.owners}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.ownerUserIds.trim(),onClick:c,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function Mz({onContinue:t}){return s.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:s.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[s.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:s.jsx(ve,{icon:jd,size:40})}),s.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),s.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",s.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),s.jsx(Ye,{className:"mt-6 text-left",children:s.jsx(qe,{children:"After restarting, sign in with Discord to open the dashboard."})}),s.jsx(ue,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:t,children:"Continue to sign in"})]})})}function Rz({currentIndex:t,validating:n,saving:a,onBack:o,onNext:c,onFinish:l}){const d=t===mi.length-1;return s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(ue,{type:"button",variant:"ghost",disabled:t===0||a,onClick:o,children:[s.jsx(ve,{icon:T2,size:18,className:"mr-1"}),"Back"]}),s.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?s.jsx(ue,{type:"button",size:"lg",disabled:a||n,onClick:l,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):s.jsxs(ue,{type:"button",size:"lg",disabled:n||a,onClick:c,children:["Continue",s.jsx(ve,{icon:lg,size:18,className:"ml-1"})]})})]})}function Az({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),s.jsx(De,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:t.emeraldApiKey,onChange:l=>n({...t,emeraldApiKey:l.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.emeraldApi}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Checking…":t.emeraldApiKey?"Verify key":"Skip step"})})]})}function _z({values:t,setValues:n,validation:a,validating:o,onValidate:c}){const l=a.database,d=t.dbDriver==="mysql";return s.jsxs("div",{className:"flex flex-1 flex-col gap-6",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Choose your database storage engine. Select ",s.jsx("strong",{children:"SQLite"})," for instant zero-config local storage, or ",s.jsx("strong",{children:"MySQL / MariaDB"})," for external host databases."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"sqlite"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="sqlite"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"SQLite"}),s.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-xs font-medium text-emerald-500",children:"Zero Config"})]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["Single-file SQL database stored locally at ",s.jsx("code",{className:"font-mono",children:"./Data/supportbot.db"}),". Zero extra setup required."]})]}),s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"mysql"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="mysql"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"MySQL / MariaDB"}),s.jsx("span",{className:"rounded-full bg-blue-500/10 px-2.5 py-0.5 text-xs font-medium text-blue-500",children:"External Database"})]}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Connect to a remote or local MySQL database server."})]})]}),d&&s.jsxs("div",{className:"space-y-4 rounded-xl border border-border bg-card/50 p-4",children:[s.jsx("h4",{className:"text-sm font-semibold text-foreground",children:"MySQL Connection Settings"}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"dbHost",children:"Database Host"}),s.jsx(De,{id:"dbHost",placeholder:"127.0.0.1 or localhost",value:t.dbHost,onChange:m=>n(p=>({...p,dbHost:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbPort",children:"Port"}),s.jsx(De,{id:"dbPort",placeholder:"3306",value:t.dbPort,onChange:m=>n(p=>({...p,dbPort:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbDatabase",children:"Database Name"}),s.jsx(De,{id:"dbDatabase",placeholder:"supportbot",value:t.dbDatabase,onChange:m=>n(p=>({...p,dbDatabase:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbUser",children:"Database User"}),s.jsx(De,{id:"dbUser",placeholder:"root",value:t.dbUser,onChange:m=>n(p=>({...p,dbUser:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbPassword",children:"Password"}),s.jsx(De,{id:"dbPassword",type:"password",placeholder:"••••••••••••",value:t.dbPassword,onChange:m=>n(p=>({...p,dbPassword:m.target.value})),className:"h-11 text-sm font-mono"})]})]})]}),s.jsx(mo,{result:l}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Testing Connection...":"Test Connection & Validate"})})]})}function Dz(){const t=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return t+n}function Oz(t){return t.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function t2(t){return t==="oauth"?"oauth":t==="owners"?"owners":t==="database"?"database":t==="emeraldApi"?"emeraldApi":t}function Lz(){const t=ao(),{branding:n}=Ed(),{loading:a,error:o,refresh:c,status:l}=fS(),[d,m]=f.useState(0),[p,g]=f.useState({botToken:"",dbDriver:"sqlite",dbHost:"127.0.0.1",dbPort:"3306",dbUser:"",dbPassword:"",dbDatabase:"supportbot",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[v,b]=f.useState({}),[w,y]=f.useState(!1),[C,S]=f.useState(!1),[E,k]=f.useState(""),[N,T]=f.useState(!1),M=mi[d];f.useEffect(()=>{l!=null&&l.suggestedRedirectUri&&!p.redirectUri&&g(G=>({...G,redirectUri:l.suggestedRedirectUri}))},[l==null?void 0:l.suggestedRedirectUri,p.redirectUri]);const _=f.useMemo(()=>({botToken:p.botToken,dbDriver:p.dbDriver,dbHost:p.dbHost,dbPort:p.dbPort,dbUser:p.dbUser,dbPassword:p.dbPassword,dbDatabase:p.dbDatabase,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:Oz(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function R(){y(!0),k("");try{const G=await Ne.validateSetup(_);return b(Y=>{var ce;return{...Y,...(ce=G.data)==null?void 0:ce.results}}),G.data}catch(G){return k(G instanceof Error?G.message:"Validation failed"),null}finally{y(!1)}}async function L(){var ce,fe;const G=t2(M.id),Y=await R();return!!((fe=(ce=Y==null?void 0:Y.results)==null?void 0:ce[G])!=null&&fe.ok)}async function te(){const G=t2(M.id),Y=v[G];!(Y!=null&&Y.ok)&&!await L()||m(ce=>Math.min(ce+1,mi.length-1))}async function K(){S(!0),k("");try{const G=await R();if(!(G!=null&&G.ok)){k("Fix the steps marked with errors before finishing.");return}await Ne.completeSetup(_),T(!0)}catch(G){k(G instanceof Error?G.message:"Could not save setup")}finally{S(!1)}}function I(){const G={values:p,setValues:g,validation:v,validating:w};switch(M.id){case"botToken":return s.jsx(Sz,{...G,onValidate:()=>void L()});case"database":return s.jsx(_z,{...G,onValidate:()=>void L()});case"secretKey":return s.jsx(Nz,{...G,onGenerate:()=>g(Y=>({...Y,secretKey:Dz()})),onValidate:()=>void L()});case"oauth":return s.jsx(Ez,{...G,onValidate:()=>void L()});case"redirectUri":return s.jsx(kz,{values:p,setValues:g,validation:v});case"owners":return s.jsx(Tz,{...G,onValidate:()=>void L()});case"emeraldApi":return s.jsx(Az,{...G,onValidate:()=>void L()})}}return a?s.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:s.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[s.jsx(Be,{className:"h-14 w-64"}),s.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[s.jsx(Be,{className:"hidden h-80 lg:block"}),s.jsx(Be,{className:"h-[520px] rounded-2xl"})]})]})}):s.jsxs(wz,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:o})}):null,E?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:E})}):null,N?s.jsx(Mz,{onContinue:async()=>{await c(),t("/login",{replace:!0})}}):s.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[s.jsx(jz,{currentIndex:d,validation:v}),s.jsx(Cz,{step:M,footer:s.jsx(Rz,{currentIndex:d,validating:w,saving:C,onBack:()=>m(G=>Math.max(0,G-1)),onNext:()=>void te(),onFinish:()=>void K()}),children:I()})]})]})}const zz={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function Pz({title:t,icon:n,href:a,badge:o="Configured",status:c="done"}){return s.jsxs(Jt,{to:a,className:pe("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[s.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:s.jsx(ve,{icon:n,size:20})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate font-semibold",children:t}),s.jsx("span",{className:pe("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",zz[c]),children:o})]})]})}function Iz({percent:t,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:c="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,t)),p=d-m/100*d;return s.jsxs("div",{className:pe("relative inline-flex",a),children:[s.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:c})]}),s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[s.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),s.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const Uz={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function Bz({title:t,subtitle:n,icon:a,href:o,status:c,meta:l="Open in dashboard"}){const d=Uz[c];return s.jsxs(Jt,{to:o,className:pe("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsx("span",{className:pe("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),s.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:t}),s.jsx("span",{className:pe("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),s.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ve,{icon:a,size:16})}),s.jsx("span",{className:"text-xs text-muted-foreground",children:l})]}),s.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[s.jsx(ve,{icon:Nd,size:14,className:"opacity-60"}),s.jsx(ve,{icon:qs,size:14,className:"opacity-60 group-hover:text-primary"}),s.jsx(ve,{icon:lg,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function $z({stats:t}){const n=[{id:"ping",label:"Gateway latency",detail:`${t.bot.ping}ms`,badge:t.bot.ping<200?"Good":"High",badgeClass:t.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:fg(t.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${t.hosting.ram_used} / ${t.hosting.ram_total}`,badge:`${t.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return s.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[s.jsxs(dt,{className:"text-sm font-semibold",children:["Connected servers (",t.servers,")"]}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),s.jsxs(Qe,{className:"pt-0",children:[s.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,t.servers)}).map((a,o)=>s.jsxs(bs,{className:"size-9 border-2 border-card ring-0",children:[s.jsx(eo,{src:t.bot.avatar,alt:""}),s.jsx(ys,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),t.servers>6?s.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",t.servers-6]}):null]}),s.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[t.users.toLocaleString()," members across your guilds"]})]})]}),s.jsx(Ze,{className:"overflow-hidden border-border bg-secondary",children:s.jsx(Qe,{className:"p-5",children:s.jsxs("div",{className:"space-y-3",children:[s.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:s.jsx(ve,{icon:T8,size:22})}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),s.jsx(ue,{asChild:!0,size:"sm",className:"w-full",children:s.jsxs(Jt,{to:"/settings",children:[s.jsx(ve,{icon:Cd,size:16,className:"mr-2"}),"Open settings"]})})]})})}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[s.jsx(dt,{className:"text-sm font-semibold",children:"System activity"}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),s.jsxs(Qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>s.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[s.jsxs(bs,{className:"size-9",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{className:"bg-secondary text-xs",children:"SB"})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),s.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),s.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),s.jsx(ue,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:s.jsxs(Jt,{to:"/system",children:["All system details",s.jsx(ve,{icon:lg,size:14})]})})]})]}),s.jsx(Ze,{className:"border-border bg-card",children:s.jsxs(Qe,{className:"flex items-center gap-3 p-4",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ve,{icon:qs,size:18})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("p",{className:"text-sm font-medium",children:["v",t.bot.version]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",t.hosting.cpu_load]})]})]})})]})}const c5={todo:"Needs setup",progress:"In progress",done:"Active"};function Kh(t,n,a="Configure module"){const o=n==null?void 0:n[t];return o||{status:"todo",subtitle:a}}function Hz(){return s.jsxs("div",{className:"flex gap-6",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-44 rounded-2xl"}),s.jsx(Be,{className:"h-44 rounded-2xl"})]}),s.jsx(Be,{className:"h-8 w-48"}),s.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((t,n)=>s.jsx(Be,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),s.jsx(Be,{className:"h-8 w-56"}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((t,n)=>s.jsx(Be,{className:"h-20 rounded-2xl"},n))})]}),s.jsx(Be,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function Gz(){const{stats:t,loading:n,error:a}=kd(),[o,c]=f.useState("all"),l=f.useMemo(()=>{if(!t)return 0;const v=t.tickets.total||0;return v===0?100:Math.round(t.tickets.closed/v*100)},[t]),d=f.useMemo(()=>o==="open"||o==="closed"?ii.filter(v=>v.category==="tickets"):o==="all"?ii:ii.filter(v=>v.category===o),[o]);if(n)return s.jsx(Hz,{});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"No stats available"})});const m=t.tickets.open,p=t.tickets.closed,g=t.tickets.total;return s.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Ze,{className:"overflow-hidden border-border bg-card",children:s.jsxs(Qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",s.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),s.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),s.jsx(ue,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:s.jsx(Jt,{to:"/transcripts",children:"Review"})})]}),s.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[s.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),s.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),s.jsx(Ze,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:s.jsxs(Qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),s.jsxs("ul",{className:"space-y-1.5 text-sm",children:[s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[g," total"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),s.jsx(Iz,{percent:l,size:120})]})})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),s.jsx(DS,{value:o,onValueChange:v=>c(v),children:s.jsxs(xx,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[s.jsx(Ys,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),s.jsx(Ys,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),s.jsx(Ys,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),YM.filter(v=>v.id!=="all").map(v=>s.jsx(Ys,{value:v.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:v.label},v.id))]})})]}),s.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:is,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:jd,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(v=>{const b=Kh(v.id,t.modules,v.description);return{id:v.id,title:v.title,subtitle:b.subtitle,icon:v.icon,href:v.href,status:b.status,meta:b.status==="done"?"View settings":"Configure"}})).map(v=>s.jsx(Bz,{title:v.title,subtitle:v.subtitle,icon:v.icon,href:v.href,status:v.status,meta:v.meta},v.id))})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),s.jsx(Jt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ii.slice(0,4).map(v=>{const b=Kh(v.id,t.modules);return s.jsx(Pz,{title:v.title,icon:v.icon,href:v.href,badge:c5[b.status],status:b.status},v.id)})})]})]}),s.jsx($z,{stats:t})]})}function Vz(){const{permissions:t}=qt();return Mn(t,"overview")?s.jsx(Gz,{}):s.jsx(ya,{to:mg(t),replace:!0})}function ga({permission:t,children:n}){const{loading:a,isAuthenticated:o,permissions:c}=qt();return a?s.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Mn(c,t)?s.jsx(s.Fragment,{children:n}):s.jsx(ya,{to:mg(c),replace:!0}):s.jsx(ya,{to:"/login",replace:!0})}function Fz(){const{hasPermission:t}=qt(),n=t("settings.update"),a=ao(),[o,c]=f.useState([]),[l,d]=f.useState(""),[m,p]=f.useState(!0),[g,v]=f.useState(""),[b,w]=f.useState(""),[y,C]=f.useState(null),S=f.useCallback(async()=>{p(!0),v("");try{const k=await Ne.getAddonsCatalog();k.data&&(c(k.data.addons),d(k.data.repository))}catch(k){v(k instanceof Error?k.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(k){if(n){C(k.id),w(""),v("");try{const N=await Ne.installAddon(k.id);w(N.message||`${k.name} installed.`),await S();const T=k.configFiles[0];T&&a(`/configs?file=${_l(T)}`)}catch(N){v(N instanceof Error?N.message:"Install failed")}finally{C(null)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),s.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:S,disabled:m,children:[s.jsx(ve,{icon:_2,size:16,className:pe("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,b?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:b})}):null,s.jsxs("section",{className:"space-y-4",children:[s.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"})]}):s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(k=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs(dt,{className:"flex items-center gap-2 text-lg",children:[s.jsx(ve,{icon:dg,size:20,className:"text-primary"}),k.name]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Fn,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:k.price===0||!k.price?"Free":`$${k.price}`}),k.installed?s.jsxs(Fn,{variant:"secondary",className:"shrink-0 gap-1",children:[s.jsx(ve,{icon:D8,size:14}),"Installed"]}):null]})]}),s.jsx(Ot,{children:k.description})]}),s.jsxs(Qe,{className:"space-y-2 text-xs text-muted-foreground",children:[k.is_external?s.jsxs("p",{children:["Available on: ",s.jsx("span",{className:"font-medium text-foreground",children:k.external_store||"External Store"})]}):null,k.configFiles&&k.configFiles.length>0?s.jsxs("p",{children:["Config:"," ",k.configFiles.map((N,T)=>s.jsxs("span",{children:[T>0?", ":null,s.jsx(Jt,{to:`/configs?file=${_l(N)}`,className:"font-mono text-primary hover:underline",children:N})]},N))]}):null]}),s.jsxs(Sx,{className:"flex flex-wrap gap-2",children:[k.is_external?s.jsx(ue,{variant:"outline",size:"sm",asChild:!0,children:s.jsx("a",{href:k.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,k.installed&&k.configFiles&&k.configFiles[0]?s.jsx(ue,{size:"sm",variant:"secondary",asChild:!0,children:s.jsx(Jt,{to:`/configs?file=${_l(k.configFiles[0])}`,children:"Edit config"})}):null,k.installed?s.jsx(ue,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):k.is_external?null:s.jsxs(ue,{size:"sm",disabled:!n||y===k.id,onClick:()=>E(k),children:[s.jsx(ve,{icon:Cd,size:14,className:"mr-1"}),y===k.id?"Installing…":"Install"]})]})]},k.id))})]})]})}function Yz(){const{permissions:t}=qt(),[n,a]=f.useState(!1),[o,c]=f.useState(!1),[l,d]=f.useState(""),[m,p]=f.useState(""),[g,v]=f.useState(""),[b,w]=f.useState("Administrator"),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState("General"),T=z2(t,"supportbot"),M=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Dt.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),c(!1);try{const _=await Ne.buildAddon({name:m.toLowerCase(),description:g||"A custom command",permission:b,embed:{title:y,description:S||"Hello from your custom command!",color:k}});c(!0),d(_.message||"Restart required."),Dt.success(`Addon ${m}.js created successfully!`)}catch(_){Dt.error(_ instanceof Error?_.message:"Failed to build addon")}finally{a(!1)}};return T?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),s.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?s.jsxs(Ye,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[s.jsx(x0,{className:"h-4 w-4"}),s.jsxs(qe,{className:"ml-2",children:["Successfully built ",s.jsxs("strong",{children:[m,".js"]}),"! ",l]})]}):null,s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ze,{children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Command Details"}),s.jsx(Ot,{children:"Configure how users trigger the command."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Command Name"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-muted-foreground",children:"/"}),s.jsx(De,{placeholder:"ping",value:m,onChange:_=>p(_.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Description"}),s.jsx(De,{placeholder:"Replies with a custom embed",value:g,onChange:_=>v(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Required Permission"}),s.jsxs(Ca,{value:b,onValueChange:w,children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"none",children:"@everyone"}),s.jsx(vt,{value:"Administrator",children:"Administrator"}),s.jsx(vt,{value:"ManageMessages",children:"Manage Messages"}),s.jsx(vt,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),s.jsxs(Ze,{children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Response Embed"}),s.jsx(Ot,{children:"What the bot will reply with."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Title (Optional)"}),s.jsx(De,{placeholder:"Hello!",value:y,onChange:_=>C(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Description"}),s.jsx(Jd,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:S,onChange:_=>E(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Color"}),s.jsxs(Ca,{value:k,onValueChange:N,children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"General",children:"Theme General"}),s.jsx(vt,{value:"Success",children:"Theme Success"}),s.jsx(vt,{value:"Warning",children:"Theme Warning"}),s.jsx(vt,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs(Ze,{className:"sticky top-6 border-primary/20",children:[s.jsx(ut,{children:s.jsxs(dt,{className:"text-sm font-medium flex items-center gap-2",children:[s.jsx(ve,{icon:A8,size:16,className:"text-primary"}),"Live Preview"]})}),s.jsx(Qe,{children:s.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),s.jsxs("div",{className:"flex-1 space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),s.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[s.jsx(x0,{size:10})," BOT"]}),s.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),s.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[y&&s.jsx("div",{className:"mb-1 font-semibold text-white",children:y}),s.jsx("div",{className:"whitespace-pre-wrap",children:S||"Hello from your custom command!"})]})]})]})})}),s.jsx(Sx,{children:s.jsxs(ue,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:M,children:[s.jsx(ve,{icon:ds,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):s.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const Ex="supportbot-dashboard-accent",Pl="#45b46c",qz=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function Kz(t){const n=Ur(t,Pl),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,c=parseInt(n.slice(5,7),16)/255,l=Math.max(a,o,c),d=Math.min(a,o,c),m=(l+d)/2;let p=0,g=0;if(l!==d){const v=l-d;switch(g=m>.5?v/(2-l-d):v/(l+d),l){case a:p=((o-c)/v+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(t)})}function Jz({canEdit:t}){const[n,a]=f.useState(!1),[o,c]=f.useState(""),[l,d]=f.useState(!1);async function m(){if(t){a(!0),c("");try{const p=await Ne.resetDashboard();c(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){c(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return t?s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),s.jsxs(Qs,{open:l,onOpenChange:d,children:[s.jsx(TM,{asChild:!0,children:s.jsx(ue,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),s.jsxs(hs,{children:[s.jsxs(gs,{children:[s.jsx(xs,{children:"Are you absolutely sure?"}),s.jsx(vs,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&s.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),s.jsx(ue,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function eP({canEdit:t}){const{branding:n,setBrandingLocal:a}=Ed(),o=f.useRef(null),[c,l]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,g]=f.useState(!1),[v,b]=f.useState(!1),[w,y]=f.useState("");f.useEffect(()=>{l(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const C=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function S(){if(t){g(!0),y("");try{const T=await Ne.updateBranding({title:c,pageTitle:d});T.data&&a(T.data),y(T.message||"Branding saved.")}catch(T){y(T instanceof Error?T.message:"Save failed")}finally{g(!1)}}}async function E(T){if(!(!t||!T)){b(!0),y("");try{const M=await Qz(T),_=await Ne.uploadBrandingFavicon(M);_.data&&a(_.data),y(_.message||"Favicon uploaded.")}catch(M){y(M instanceof Error?M.message:"Upload failed")}finally{b(!1),o.current&&(o.current.value="")}}}async function k(){if(t){b(!0),y("");try{const T=await Ne.removeBrandingFavicon();T.data&&a(T.data),y(T.message||"Favicon removed.")}catch(T){y(T instanceof Error?T.message:"Remove failed")}finally{b(!1)}}}const N=c.trim()!==n.title||d.trim()!==n.pageTitle;return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"brand-title",children:"Sidebar title"}),s.jsx(De,{id:"brand-title",value:c,disabled:!t,maxLength:64,onChange:T=>l(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"brand-page-title",children:"Browser tab title"}),s.jsx(De,{id:"brand-page-title",value:d,disabled:!t,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),t?s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ue,{type:"button",disabled:p||!N,onClick:()=>void S(),children:p?"Saving…":"Save titles"}),w&&N?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]}):null]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:C?s.jsx("img",{src:C,alt:"Favicon preview",className:"size-full object-contain p-2"}):s.jsx(ve,{icon:y8,size:24,className:"text-muted-foreground/50"})}),s.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!t||v,onChange:T=>{var M;return void E(((M=T.target.files)==null?void 0:M[0])??null)}}),s.jsxs("div",{className:"flex flex-col gap-2",children:[t?s.jsxs("div",{className:"flex gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",disabled:v,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:v?"Uploading…":"Upload Favicon"}),n.hasFavicon?s.jsx(ue,{type:"button",variant:"destructive",disabled:v,onClick:()=>void k(),children:"Remove"}):null]}):s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!N&&w?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]})]})]})]})}function tP(){var b,w,y,C,S,E,k,N,T,M,_;const{hasPermission:t}=qt(),n=t("settings.update"),[a,o]=f.useState(!0),[c,l]=f.useState(!1),[d,m]=f.useState(""),[p,g]=f.useState(null);f.useEffect(()=>{Ne.getConfigJson("api").then(R=>{R.data&&g(R.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function v(){var R,L,te,K,I,G,Y,ce,fe,se,P;if(!(!n||!p)){l(!0),m("");try{const Z={"api:API.Port":(R=p.API)==null?void 0:R.Port,"api:API.EmeraldAPIKey":(L=p.API)==null?void 0:L.EmeraldAPIKey,"api:API.TrustProxy":(te=p.API)==null?void 0:te.TrustProxy,"api:API.OAuth.Enabled":(I=(K=p.API)==null?void 0:K.OAuth)==null?void 0:I.Enabled,"api:API.OAuth.ClientId":(Y=(G=p.API)==null?void 0:G.OAuth)==null?void 0:Y.ClientId,"api:API.OAuth.ClientSecret":(fe=(ce=p.API)==null?void 0:ce.OAuth)==null?void 0:fe.ClientSecret,"api:API.OAuth.RedirectUri":(P=(se=p.API)==null?void 0:se.OAuth)==null?void 0:P.RedirectUri};await Ne.updateConfigFields(Z),m("API settings saved and backend restarted.")}catch(Z){m(Z instanceof Error?Z.message:"Save failed")}finally{l(!1)}}}return a?s.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"API Port"}),s.jsx(De,{type:"number",value:((b=p.API)==null?void 0:b.Port)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,Port:parseInt(R.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Emerald API Key"}),s.jsx(De,{type:"password",value:((w=p.API)==null?void 0:w.EmeraldAPIKey)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,EmeraldAPIKey:R.target.value}}),className:"border-border bg-secondary/30"})]})]}),s.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[s.jsx(kt,{checked:((y=p.API)==null?void 0:y.TrustProxy)||!1,disabled:!n,onCheckedChange:R=>g({...p,API:{...p.API,TrustProxy:R}})}),s.jsx(_e,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),s.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[s.jsx(kt,{checked:((S=(C=p.API)==null?void 0:C.OAuth)==null?void 0:S.Enabled)||!1,disabled:!n,onCheckedChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,Enabled:R}}})}}),s.jsx(_e,{className:"text-sm",children:"Enable OAuth"})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Client ID"}),s.jsx(De,{value:((k=(E=p.API)==null?void 0:E.OAuth)==null?void 0:k.ClientId)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientId:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Client Secret"}),s.jsx(De,{type:"password",value:((T=(N=p.API)==null?void 0:N.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientSecret:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{children:"Redirect URI"}),s.jsx(De,{value:((_=(M=p.API)==null?void 0:M.OAuth)==null?void 0:_.RedirectUri)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,RedirectUri:R.target.value}}})},className:"border-border bg-secondary/30"}),s.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?s.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[s.jsx(ue,{type:"button",disabled:c,onClick:()=>void v(),children:c?"Saving…":"Save API Config"}),d?s.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function nP(){const{hasPermission:t}=qt(),n=t("settings.update"),[a,o]=f.useState(null),[c,l]=f.useState(!0),[d,m]=f.useState(!1),[p,g]=f.useState(""),[v,b]=f.useState(""),[w,y]=f.useState(()=>d5()??Pl),[C,S]=f.useState(""),[E,k]=f.useState("appearance"),N=f.useCallback(async()=>{l(!0),g("");try{const M=await Ne.checkForUpdates();M.data&&o(M.data)}catch(M){g(M instanceof Error?M.message:"Could not check for updates")}finally{l(!1)}},[]);f.useEffect(()=>{N()},[N]);async function T(M){if(M.updateAvailable){m(!0),g(""),b("");try{const _=await Ne.runUpdate(M.id,M.latest,M.zipUrl);b(_.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(_){g(_ instanceof Error?_.message:"Update failed")}finally{m(!1)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),s.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),s.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[s.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:s.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[s.jsx(ue,{variant:E==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("appearance"),children:"Appearance"}),s.jsx(ue,{variant:E==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("api"),children:"API Config"}),s.jsx(ue,{variant:E==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("updates"),children:"Update Checker"}),n&&s.jsx(ue,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${E==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>k("danger"),children:"Danger Zone"})]})}),s.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[E==="appearance"&&s.jsx("div",{className:"space-y-6",children:s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Dashboard appearance"}),s.jsx(Ot,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsx(eP,{canEdit:n}),s.jsxs("div",{className:"border-t border-border pt-4",children:[s.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),s.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(tf,{value:w,onChange:M=>{y(M),n2(M),S("Accent updated.")}}),s.jsx(De,{id:"accent-colour",value:w,onChange:M=>y(M.target.value),onBlur:()=>{const M=Ur(w,Pl);y(M),n2(M),S("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),s.jsx(ue,{type:"button",variant:"outline",onClick:()=>{Xz(),y(Pl),S("Reset to default purple.")},children:"Reset to default"})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[s.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),s.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),s.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),C?s.jsx("p",{className:"text-xs text-muted-foreground",children:C}):null]})]})]})}),E==="danger"&&n&&s.jsxs(Ze,{className:"border-destructive/50 bg-destructive/5",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg text-destructive",children:"Danger Zone"}),s.jsx(Ot,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),s.jsx(Qe,{children:s.jsx(Jz,{canEdit:n})})]}),E==="api"&&s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"API Configuration"}),s.jsx(Ot,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),s.jsx(Qe,{children:s.jsx(tP,{})})]}),E==="updates"&&s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Software updates"}),s.jsx(Ot,{children:"Manage updates for the bot and dashboard."})]}),s.jsxs(Qe,{className:"space-y-4",children:[c?s.jsx(Be,{className:"h-24 w-full"}):a&&a.length>0?s.jsx("div",{className:"space-y-4",children:a.map(M=>s.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("p",{className:"font-medium text-sm",children:[s.jsx("a",{href:M.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:M.name})," ","(",M.branch," branch)"]}),s.jsxs("div",{className:"flex gap-x-4 text-sm",children:[s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",M.current]})]}),s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",M.latest]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[M.updateAvailable?s.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):s.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),M.updateAvailable&&n?s.jsxs(ue,{type:"button",size:"sm",onClick:()=>void T(M),disabled:d,children:[d?s.jsx(ve,{icon:_2,size:16,className:"mr-2 animate-spin"}):s.jsx(ve,{icon:Cd,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,M.updateAvailable&&!n?s.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},M.id))}):null,p?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:p})}):null,v?s.jsx(Ye,{children:s.jsx(qe,{children:v})}):null,s.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:s.jsxs(ue,{type:"button",variant:"outline",onClick:N,disabled:c||d,children:[s.jsx(ve,{icon:ur,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function kx(t){const[n,a]=f.useState(!1),o=f.useRef(t);return o.current=t,f.useEffect(()=>{let c=null,l=null;const d=()=>{c=new EventSource("/api/stream"),c.onopen=()=>{a(!0)},c.addEventListener("connected",()=>{a(!0)}),c.addEventListener("metrics",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onMetrics)==null||g.call(p,v)}catch{}}),c.addEventListener("log",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onLog)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessage)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message_deleted",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessageDeleted)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message_updated",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessageUpdated)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_created",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketCreated)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_closed",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketClosed)==null||g.call(p,v)}catch{}}),c.onerror=()=>{a(!1),c==null||c.close(),l=window.setTimeout(d,4e3)}};return d(),()=>{l&&window.clearTimeout(l),c&&c.close()}},[]),{connected:n}}function Et({label:t,value:n,mono:a=!1}){return s.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("dt",{className:"text-sm text-muted-foreground",children:t}),s.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const rP={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function aP(t){return t==="ok"?"text-emerald-500":t==="offline"?"text-destructive":"text-amber-500"}function sP(){var E;const{stats:t,loading:n,error:a,refresh:o}=kd(),[c,l]=f.useState(null),[d,m]=f.useState(null),[p,g]=f.useState(!1),[v,b]=f.useState(null),{connected:w}=kx({onMetrics:k=>{b(k)}}),y=f.useCallback(async()=>{const[k,N]=await Promise.all([Ne.getGuildStatus().catch(()=>null),Ne.health().catch(()=>null)]);k!=null&&k.data&&l(k.data),N!=null&&N.success&&N.data&&m({dashboard:N.data.dashboard,botReady:N.data.botReady,oauthEnabled:N.data.oauthEnabled,setupComplete:N.data.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function C(){g(!0);try{await Promise.all([o(),y()])}finally{g(!1)}}if(n&&!t)return s.jsxs("div",{className:"space-y-6",children:[s.jsx(Be,{className:"h-10 w-64"}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-56 rounded-2xl"}),s.jsx(Be,{className:"h-56 rounded-2xl"})]})]});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"Could not load system details."})});const S=t.bot.ping<200;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ue,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:s.jsxs(Jt,{to:"/",children:[s.jsx(ve,{icon:T2,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),s.jsxs(ue,{type:"button",variant:"outline",disabled:p,onClick:()=>void C(),children:[s.jsx(ve,{icon:ur,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Discord bot"}),s.jsx(Ot,{children:"Connection and identity"})]}),s.jsxs(Qe,{children:[s.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[s.jsxs(bs,{className:"size-12",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{children:"SB"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:t.bot.username}),s.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:t.bot.id})]})]}),s.jsxs("dl",{children:[s.jsx(Et,{label:"Version",value:`v${t.bot.version}`,mono:!0}),s.jsx(Et,{label:"Gateway latency",value:s.jsxs("span",{className:S?"text-emerald-500":"text-amber-500",children:[t.bot.ping," ms"]})}),s.jsx(Et,{label:"Process uptime",value:fg(t.bot.uptime)}),s.jsx(Et,{label:"Connected servers",value:t.servers.toLocaleString()}),s.jsx(Et,{label:"Members tracked",value:t.users.toLocaleString()}),t.bot.inviteUrl?s.jsx(Et,{label:"Invite link",value:s.jsx("a",{href:t.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(dt,{className:"text-lg",children:"Host machine"}),s.jsx(Ot,{children:"Server resources running this instance"})]}),s.jsxs(Fn,{variant:w?"default":"outline",className:"text-xs",children:[s.jsx("span",{className:`mr-1.5 inline-block h-2 w-2 rounded-full ${w?"bg-emerald-500 animate-pulse":"bg-muted"}`}),w?"Live Stream":"Polling"]})]}),s.jsx(Qe,{children:s.jsxs("dl",{children:[s.jsx(Et,{label:"Memory used",value:v?`${(v.ram_used_mb/1024).toFixed(2)} GB / ${(v.ram_total_mb/1024).toFixed(2)} GB`:`${t.hosting.ram_used} / ${t.hosting.ram_total}`}),s.jsx(Et,{label:"Memory usage",value:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:(v?v.ram_percent:t.hosting.ram_percent)>85?"text-amber-500 font-bold":"text-foreground font-medium",children:[v?v.ram_percent:t.hosting.ram_percent,"%"]}),s.jsx("div",{className:"w-24 h-2 bg-secondary rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${v?v.ram_percent:t.hosting.ram_percent}%`}})})]})}),s.jsx(Et,{label:"CPU load (1 min avg)",value:v?String(v.cpu_load):t.hosting.cpu_load,mono:!0}),s.jsx(Et,{label:"Host uptime",value:t.hosting.uptime})]})})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Tickets"}),s.jsx(Ot,{children:"Database snapshot"})]}),s.jsx(Qe,{children:s.jsxs("dl",{children:[s.jsx(Et,{label:"Total tickets",value:t.tickets.total}),s.jsx(Et,{label:"Open",value:s.jsx("span",{className:"text-primary",children:t.tickets.open})}),s.jsx(Et,{label:"Closed",value:t.tickets.closed}),s.jsx(Et,{label:"Transcripts",value:s.jsx(Jt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Guild health"}),s.jsx(Ot,{children:"Configured server and membership"})]}),s.jsx(Qe,{children:c?s.jsxs("dl",{children:[s.jsx(Et,{label:"Status",value:s.jsx("span",{className:aP(c.status),children:rP[c.status]})}),s.jsx(Et,{label:"Configured guild ID",value:c.configuredGuildId||"Not set",mono:!0}),c.configuredGuild?s.jsx(Et,{label:"Configured server",value:`${c.configuredGuild.name} (${((E=c.configuredGuild.memberCount)==null?void 0:E.toLocaleString())??"?"} members)`}):null,c.message?s.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:c.message}):null,c.extraGuilds.length>0?s.jsxs("div",{className:"mt-3 space-y-2",children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),s.jsx("ul",{className:"space-y-1 text-sm",children:c.extraGuilds.map(k=>s.jsxs("li",{className:"font-mono text-xs",children:[k.name," · ",k.id]},k.id))})]}):null]}):s.jsx(Be,{className:"h-24 w-full"})})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Dashboard services"}),s.jsx(Ot,{children:"API and authentication"})]}),s.jsx(Qe,{children:d?s.jsxs("dl",{className:"max-w-xl",children:[s.jsx(Et,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),s.jsx(Et,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),s.jsx(Et,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),s.jsx(Et,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),s.jsx(Et,{label:"Software updates",value:s.jsx(Jt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),s.jsx(Et,{label:"Logs",value:s.jsx(Jt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):s.jsx(Be,{className:"h-32 w-full max-w-xl"})})]}),t.modules?s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Module setup status"}),s.jsx(Ot,{children:"Which features are configured and active"})]}),s.jsx(Qe,{children:s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ii.map(k=>{const N=Kh(k.id,t.modules);return s.jsxs(Jt,{to:k.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-sm font-medium",children:k.title}),s.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:N.subtitle})]}),s.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:c5[N.status]})]},k.id)})})})]}):null]})}function oP(t){if(!t)return"—";const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const iP=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],lP=["Output","Warn","Error"],cP={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},uP={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},gd=2e3,dP=2e3;function Wh(t,n){return`${t.type}-${t.timestamp??"na"}-${n}-${t.message.slice(0,32)}`}function fP(t,n,a){const o=a?[]:t,c=new Set(o.map((m,p)=>Wh(m,p))),l=[];for(let m=0;mgd?d.slice(d.length-gd):d}function mP(){const[t,n]=f.useState([]),[a,o]=f.useState(!0),[c,l]=f.useState(""),[d,m]=f.useState(!1),[p,g]=f.useState(!0),[v,b]=f.useState("all"),[w,y]=f.useState(""),[C,S]=f.useState(!0),[E,k]=f.useState(""),N=f.useRef(null),T=f.useRef(null),M=f.useRef(d);M.current=d;const _=f.useMemo(()=>v==="all"?lP:[v],[v]),R=f.useCallback(I=>{M.current||v!=="all"&&I.type!==v||(n(G=>{const Y=[...G,I];return Y.length>gd?Y.slice(Y.length-gd):Y}),S(!0))},[v]);kx({onLog:R});const L=f.useCallback(async I=>{var ce,fe;const G=await Ne.getLogs({types:_,cursor:I?void 0:N.current??void 0,tail:I?500:0}),Y=((ce=G.data)==null?void 0:ce.entries)??[];return N.current=((fe=G.data)==null?void 0:fe.cursor)??{},n(se=>fP(se,Y,I)),Y.length},[_]),te=f.useCallback(async()=>{var I;o(!0),l(""),N.current=null;try{const ce=(((I=(await Ne.getLogsMeta()).data)==null?void 0:I.files)??[]).filter(fe=>fe.file).map(fe=>`${fe.type}: ${fe.file}`).join(" · ");k(ce||"No log files yet — output appears when the bot runs."),await L(!0),S(!0)}catch(G){l(G instanceof Error?G.message:"Failed to load logs"),S(!1)}finally{o(!1)}},[L]);f.useEffect(()=>{te()},[te]),f.useEffect(()=>{if(d||a)return;const I=window.setInterval(async()=>{if(!M.current)try{await L(!1),S(!0),l("")}catch(G){S(!1),l(G instanceof Error?G.message:"Live update failed")}},dP);return()=>window.clearInterval(I)},[d,a,L]),f.useEffect(()=>{if(!p||d)return;const I=T.current;I&&(I.scrollTop=I.scrollHeight)},[t,p,d]);const K=f.useMemo(()=>t.filter(I=>{var Y;if(v!=="all"&&I.type!==v)return!1;if(!w.trim())return!0;const G=w.toLowerCase();return I.message.toLowerCase().includes(G)||(((Y=I.timestamp)==null?void 0:Y.toLowerCase().includes(G))??!1)}),[t,v,w]);return s.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),E?s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:E}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:pe("size-2 rounded-full",C&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),s.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":C?"Live":"Disconnected"})]})]}),c?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:c})}):null,s.jsxs(Ze,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[s.jsxs(ut,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(dt,{className:"text-base font-medium",children:["Console",a?null:s.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[K.length," line",K.length===1?"":"s"]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[s.jsx(kt,{id:"auto-scroll",checked:p,onCheckedChange:g}),s.jsx(_e,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>m(I=>!I),children:[s.jsx(ve,{icon:d?k8:E8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),te()},disabled:a,children:[s.jsx(ve,{icon:ur,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[s.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:iP.map(I=>s.jsx(ue,{type:"button",variant:v===I.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>b(I.id),children:I.label},I.id))}),s.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[s.jsx(ve,{icon:ji,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Filter lines…",value:w,onChange:I=>y(I.target.value),className:"h-9 pl-9"})]})]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-0",children:a?s.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((I,G)=>s.jsx(Be,{className:"h-4 w-full"},G))}):s.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:K.length===0?s.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):s.jsx("ul",{className:"space-y-1",children:K.map((I,G)=>s.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[s.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:oP(I.timestamp)}),s.jsx("span",{className:pe("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",uP[I.type]),children:I.type}),s.jsx("span",{className:pe("min-w-0 flex-1 whitespace-pre-wrap break-words",cP[I.type]),children:I.message||" "})]},Wh(I,G)))})})})]})]})}const pP=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],hP=450;function gP(t,n){return n&&t!=="viewer"}function xP(){const{user:t,hasPermission:n}=qt(),a=!gP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState(!1),T=f.useRef(null),M=f.useCallback(async()=>{var K;p(!0),w(""),C("");try{const G=(await Ne.getTranscriptTemplate()).data??null;if(G){const Y={...G,Typography:{...G.Typography,FontFamily:kS((K=G.Typography)==null?void 0:K.FontFamily)}};c(Y),d(structuredClone(Y))}}catch(I){w(I instanceof Error?I.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{M()},[M]);const _=f.useCallback(async K=>{N(!0);try{const I=await Ne.previewTranscriptTemplate(K);E(I)}catch{E("

Preview failed to load.

")}finally{N(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{_(o)},hP),()=>{T.current&&clearTimeout(T.current)}},[o,_]);function R(K,I){c(G=>G&&Gn(G,K,I))}async function L(){if(!(a||!o)){v(!0),w(""),C("");try{const K=await Ne.saveTranscriptTemplate(o);C(K.message||"Saved."),d(structuredClone(o))}catch(K){w(K instanceof Error?K.message:"Save failed")}finally{v(!1)}}}const te=o&&l&&JSON.stringify(o)!==JSON.stringify(l);return m?s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-96 rounded-xl"}),s.jsx(Be,{className:"h-96 rounded-xl"})]}):o?s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),s.jsxs("div",{className:"flex items-center gap-2",children:[te?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:L,disabled:g||!te,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save appearance"]})]})]}),b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[s.jsx(vP,{data:o,readOnly:a,onPatch:R}),s.jsxs(Ze,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(ut,{className:"pb-2",children:[s.jsx(dt,{className:"text-base",children:"Live preview"}),s.jsxs(Ot,{children:["Sample ticket with your current settings",k?" · updating…":""]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-4 pt-0",children:s.jsx("iframe",{title:"Transcript template preview",srcDoc:S,className:pe("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",k&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b||"Failed to load template"})})}function vP({data:t,readOnly:n,onPatch:a}){return s.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:pP.map(o=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:o.title}),o.description?s.jsx(Ot,{children:o.description}):null]}),s.jsx(Qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(c=>s.jsx("div",{className:c.type==="textarea"?"sm:col-span-2":"",children:s.jsx(pd,{field:c,value:Fr(t,c.path),readOnly:n,onChange:l=>a(c.path,l)})},c.path))})]},o.title))})}function bP(t,n){return n&&t!=="viewer"}function yP(){const{user:t,hasPermission:n}=qt(),a=!bP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(!0),[m,p]=f.useState(!1),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{var N,T,M;d(!0),w(""),C("");try{const R=(await Ne.getTranscriptSettings()).data;R&&c({autoDelete:{enabled:!!((N=R.autoDelete)!=null&&N.enabled),afterDays:((T=R.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((M=R.publicAccess)!=null&&M.enabled)}})}catch(_){w(_ instanceof Error?_.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(){if(!(!o||a)){p(!0),w(""),C("");try{const N=await Ne.updateTranscriptSettings(o);N.data&&c({autoDelete:{enabled:N.data.autoDelete.enabled,afterDays:N.data.autoDelete.afterDays},publicAccess:{enabled:N.data.publicAccess.enabled}}),C(N.message??"Settings saved.")}catch(N){w(N instanceof Error?N.message:"Failed to save settings")}finally{p(!1)}}}async function k(){var N,T;if(!a){v(!0),w(""),C("");try{const M=await Ne.purgeTranscripts();C(M.message??((N=M.data)!=null&&N.skipped?"Auto-delete is disabled.":`Removed ${((T=M.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(M){w(M instanceof Error?M.message:"Purge failed")}finally{v(!1)}}}return l?s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-40 w-full rounded-xl"}),s.jsx(Be,{className:"h-40 w-full rounded-xl"})]}):o?s.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?s.jsx(Ye,{children:s.jsx(qe,{children:"You have view-only access. An admin or editor can change these settings."})}):null,b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,y?s.jsx(Ye,{children:s.jsx(qe,{children:y})}):null,s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-base",children:"Auto-delete"}),s.jsx(Ot,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:N=>c(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:N.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),s.jsx(De,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:N=>c(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(N.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",disabled:a||g,onClick:()=>void k(),children:[s.jsx(ve,{icon:ur,size:16,className:pe(g&&"animate-spin")}),"Run cleanup now"]})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-base",children:"Public transcripts"}),s.jsxs(Ot,{children:["When enabled, anyone with the link can view a transcript at"," ",s.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),s.jsx(Qe,{children:s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:N=>c(T=>T&&{...T,publicAccess:{enabled:N.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:s.jsxs(ue,{type:"button",disabled:m,onClick:()=>void E(),children:[s.jsx(ve,{icon:Sd,size:16}),m?"Saving…":"Save settings"]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:"Could not load transcript settings."})})}function wP(t,n){return n&&t!=="viewer"}function r2(t){return t==null?"":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function a2(t){const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function jP(){var $;const{user:t,hasPermission:n}=qt(),a=wP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState("browse"),[l,d]=f.useState([]),[m,p]=f.useState(null),[g,v]=f.useState(!0),[b,w]=f.useState(""),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState(0),[T,M]=f.useState(!1),[_,R]=f.useState(!1),[L,te]=f.useState(!1),[K,I]=f.useState(!1),G=f.useCallback(async()=>{v(!0),C("");try{const X=(await Ne.listTranscripts()).data??[];d(X),p(xe=>{var q;return xe&&X.some(ge=>ge.id===xe)?xe:((q=X[0])==null?void 0:q.id)??null})}catch(H){C(H instanceof Error?H.message:"Failed to load transcripts")}finally{v(!1)}},[]);f.useEffect(()=>{G()},[G]),f.useEffect(()=>{o==="browse"&&Ne.getTranscriptSettings().then(H=>{var X,xe;te(!!((xe=(X=H.data)==null?void 0:X.publicAccess)!=null&&xe.enabled))}).catch(()=>te(!1))},[o]);const Y=f.useMemo(()=>{if(!S.trim())return l;const H=S.toLowerCase();return l.filter(X=>X.id.includes(H)||X.filename.toLowerCase().includes(H)||X.ticketName&&X.ticketName.toLowerCase().includes(H))},[l,S]),ce=f.useMemo(()=>l.find(H=>H.id===m)??null,[l,m]),fe=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,P=m&&L?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function Z(H){w(""),p(H),N(X=>X+1)}function ae(){fe&&window.open(fe,"_blank","noopener,noreferrer")}function re(){P&&window.open(P,"_blank","noopener,noreferrer")}async function V(){if(P)try{await navigator.clipboard.writeText(P),I(!0),window.setTimeout(()=>I(!1),2e3)}catch{w("Could not copy link to clipboard.")}}async function O(){var X;if(!m||!a)return;const H=((X=ce==null?void 0:ce.ticketName)==null?void 0:X.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${H}? This cannot be undone.`)){R(!0),w("");try{await Ne.deleteTranscript(m),await G()}catch(xe){w(xe instanceof Error?xe.message:"Failed to delete transcript")}finally{R(!1)}}}async function D(){if(!(!se||!ce)){M(!0),w("");try{const H=await fetch(se,{credentials:"include"});if(!H.ok){const ge=await H.json().catch(()=>({}));throw new Error(ge.error||`Download failed (${H.status})`)}const X=await H.blob(),xe=URL.createObjectURL(X),q=document.createElement("a");q.href=xe,q.download=ce.filename,q.click(),URL.revokeObjectURL(xe)}catch(H){w(H instanceof Error?H.message:"Failed to download transcript")}finally{M(!1)}}}return s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("browse"),children:"Library"}),s.jsx(ue,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("appearance"),children:"Appearance"}),s.jsx(ue,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("settings"),children:"Settings"})]}),o==="browse"?s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>G(),disabled:g,children:[s.jsx(ve,{icon:ur,size:16,className:pe(g&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?s.jsx(xP,{}):o==="settings"?s.jsx(yP,{}):s.jsxs(s.Fragment,{children:[y?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[s.jsxs(Ze,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[s.jsxs(ut,{className:"space-y-3 pb-3",children:[s.jsxs(dt,{className:"text-base font-medium",children:["Saved transcripts",!g&&l.length>0?s.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",l.length,")"]}):null]}),s.jsxs("div",{className:"relative",children:[s.jsx(ve,{icon:ji,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search by ticket name or channel ID…",value:S,onChange:H=>E(H.target.value),className:"pl-9"})]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-0 pb-4",children:s.jsx(fc,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:g?s.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((H,X)=>s.jsx(Be,{className:"h-16 w-full rounded-lg"},X))}):Y.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[s.jsx(ve,{icon:Ul,size:32,className:"opacity-40"}),s.jsx("p",{children:l.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):s.jsx("ul",{className:"space-y-1.5",children:Y.map(H=>{var q;const X=H.id===m,xe=((q=H.ticketName)==null?void 0:q.trim())||`Channel ${H.id}`;return s.jsx("li",{children:s.jsxs("button",{type:"button",onClick:()=>Z(H.id),className:pe("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",X?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[s.jsx("p",{className:"truncate text-sm font-medium",children:xe}),s.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[a2(H.createdAt),H.size!=null?` · ${r2(H.size)}`:""]})]})},H.id)})})})})]}),s.jsxs(Ze,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx(dt,{className:"truncate text-base font-medium",children:ce?(($=ce.ticketName)==null?void 0:$.trim())||`Channel ${ce.id}`:"Preview"}),ce?s.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[a2(ce.createdAt),ce.size!=null?` · ${r2(ce.size)}`:""]}):null]}),s.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[P?s.jsxs(s.Fragment,{children:[s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>void V(),children:[s.jsx(ve,{icon:R2,size:16}),K?"Copied":"Copy link"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:re,children:[s.jsx(ve,{icon:Nd,size:16}),"Public page"]})]}):null,s.jsxs(ue,{variant:"outline",size:"sm",disabled:!fe,onClick:ae,children:[s.jsx(ve,{icon:p8,size:16}),"Open tab"]}),s.jsxs(ue,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void D(),children:[s.jsx(ve,{icon:Cd,size:16}),T?"Saving…":"Download"]}),a?s.jsxs(ue,{variant:"outline",size:"sm",disabled:!m||_,className:"text-destructive hover:text-destructive",onClick:()=>void O(),children:[s.jsx(ve,{icon:wi,size:16}),_?"Deleting…":"Delete"]}):null]})]}),s.jsxs(Qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,ce&&fe?s.jsx("iframe",{title:`Transcript ${ce.id}`,src:fe,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},k):s.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[s.jsx(ve,{icon:Ul,size:40,className:"opacity-30"}),s.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function CP(){const[t,n]=f.useState([]),[a,o]=f.useState(""),[c,l]=f.useState(!0),[d,m]=f.useState(""),[p,g]=f.useState(!0);f.useEffect(()=>{try{Ne.getConfigJson("supportbot").then(W=>{if(W&&W.data&&typeof W.data=="object"){const oe=Fr(W.data,"Ticket.DepartmentSystem.Enabled");typeof oe=="boolean"&&g(oe)}}).catch(()=>{})}catch{}},[]);const[v,b]=f.useState("all"),[w,y]=f.useState("all"),[C,S]=f.useState(""),E=f.useMemo(()=>{const W=new Set;return Array.isArray(t)&&t.forEach(oe=>{if(oe&&oe.department&&typeof oe.department=="string"){const Se=oe.department.trim().toLowerCase();Se&&W.add(Se)}}),Array.from(W).sort()},[t]),k=f.useMemo(()=>Array.isArray(t)?t.filter(W=>{var oe,Se,ye,Re,nt,mt;if(!W||p&&v!=="all"&&((oe=W.department)==null?void 0:oe.toLowerCase())!==v.toLowerCase()||w!=="all"&&((Se=W.priority)==null?void 0:Se.toLowerCase())!==w.toLowerCase())return!1;if(C.trim()){const bt=C.toLowerCase().trim(),Rr=(ye=W.subject)==null?void 0:ye.toLowerCase().includes(bt),xn=(Re=W.ticket_id)==null?void 0:Re.toLowerCase().includes(bt),mn=(nt=W.user_id)==null?void 0:nt.toLowerCase().includes(bt),Wr=p&&((mt=W.department)==null?void 0:mt.toLowerCase().includes(bt));if(!Rr&&!xn&&!mn&&!Wr)return!1}return!0}):[],[t,p,v,w,C]),[N,T]=f.useState(null),[M,_]=f.useState(!1),[R,L]=f.useState(!1),[te,K]=f.useState([]),[I,G]=f.useState(!1),[Y,ce]=f.useState(""),[fe,se]=f.useState([]),[P,Z]=f.useState(!1),[ae,re]=f.useState(null),[V,O]=f.useState(!1),[D,$]=f.useState(""),[H,X]=f.useState(null),[xe,q]=f.useState(""),[ge,me]=f.useState(!1),[B,ie]=f.useState(null),[we,Ce]=f.useState(""),[ze,Ke]=f.useState(null),[ft,Pt]=f.useState(!1),[gn,Yr]=f.useState("general"),[_n,wn]=f.useState(""),[Xn,Zn]=f.useState(""),[It,po]=f.useState(!1),nn=async()=>{if(!_n.trim()){Dt.error("Please enter a subject or reason for the ticket.");return}po(!0);try{const W=await Ne.createTicket({department:gn,subject:_n.trim(),userId:Xn.trim()||void 0});Dt.success(W.message||"Ticket opened successfully!"),Pt(!1),wn(""),Zn(""),qr()}catch(W){Dt.error(W instanceof Error?W.message:"Failed to open ticket.")}finally{po(!1)}},Dn=W=>{ie(W),Ce("Closed via Web Dashboard"),me(!0)},Da=async()=>{if(!B)return;const W=B.ticket_id;Ke(W);try{await Ne.closeTicket(W,we||"Closed via Web Dashboard"),Dt.success("Ticket closed and transcript saved."),n(oe=>oe.filter(Se=>Se.ticket_id!==W)),(N==null?void 0:N.ticket_id)===W&&(_(!1),L(!1),T(null)),me(!1),ie(null)}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to close ticket.")}finally{Ke(null)}},ho=f.useRef(null),Qn=f.useRef(null),Es=()=>{var W;(W=ho.current)==null||W.scrollIntoView({behavior:"smooth"})},qr=f.useCallback(async()=>{l(!0),m("");try{const W=await Ne.listOpenTickets();W.data&&(o(W.data.guildId),n(W.data.tickets.sort((oe,Se)=>Se.created_at-oe.created_at)))}catch(W){m(W instanceof Error?W.message:"Failed to load open tickets")}finally{l(!1)}},[]);f.useEffect(()=>{qr()},[qr]),f.useEffect(()=>{Ne.getGuildResources().then(W=>{W.data&&re(W.data)}).catch(()=>{})},[]);const gr=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&(K(oe=>oe.some(Se=>Se.id===W.message.id)?oe:[...oe,W.message]),setTimeout(Es,100))},[N]),Tt=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&K(oe=>oe.filter(Se=>Se.id!==W.messageId))},[N]),On=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&K(oe=>oe.map(Se=>Se.id===W.messageId?{...Se,content:W.content}:Se))},[N]),Mt=f.useCallback(W=>{n(oe=>oe.some(Se=>Se.ticket_id===W.ticket_id)?oe:[W,...oe]),Dt.info("New Ticket Created",{description:`#${W.ticket_id} - ${W.subject||"No Subject"}`})},[]),Oi=f.useCallback(W=>{n(oe=>oe.filter(Se=>Se.ticket_id!==W.ticket_id)),(N==null?void 0:N.ticket_id)===W.ticket_id&&Dt.warning("Active ticket was closed in Discord.")},[N]);kx({onTicketMessage:gr,onTicketMessageDeleted:Tt,onTicketMessageUpdated:On,onTicketCreated:Mt,onTicketClosed:Oi});const Li=async W=>{var oe;T(W),_(!0),G(!0),K([]),se([]),X(null);try{const Se=await Ne.getTicketMessages(W.ticket_id);(oe=Se.data)!=null&&oe.messages&&(K(Se.data.messages),setTimeout(Es,150))}catch(Se){Dt.error(Se instanceof Error?Se.message:"Failed to fetch messages")}finally{G(!1)}},go=W=>{const oe=Array.from(W.target.files||[]);oe.length&&(oe.forEach(Se=>{const ye=new FileReader;ye.onload=Re=>{var mt;const nt=(mt=Re.target)==null?void 0:mt.result;se(bt=>[...bt,{filename:Se.name,data:nt,previewUrl:Se.type.startsWith("image/")?nt:void 0,sizeMb:(Se.size/1024/1024).toFixed(2)}])},ye.readAsDataURL(Se)}),Qn.current&&(Qn.current.value=""))},Kr=W=>{se(oe=>oe.filter((Se,ye)=>ye!==W))},Oa=async W=>{var ye;if(W.preventDefault(),!Y.trim()&&!fe.length||!N||P)return;const oe=Y.trim(),Se=[...fe];Z(!0),ce(""),se([]),O(!1);try{const Re=await Ne.me().catch(()=>null),nt=((ye=Re==null?void 0:Re.data)==null?void 0:ye.username)||"Staff",mt=await Ne.sendTicketReply(N.ticket_id,oe,nt,Se.map(bt=>({filename:bt.filename,data:bt.data})));mt.data&&(K(bt=>bt.some(Rr=>Rr.id===mt.data.id)?bt:[...bt,{id:mt.data.id,author:mt.data.author,content:mt.data.content,attachments:mt.data.attachments||[],createdAt:mt.data.createdAt}]),setTimeout(Es,100))}catch(Re){Dt.error(Re instanceof Error?Re.message:"Failed to send reply to Discord."),ce(oe),se(Se)}finally{Z(!1)}},Mr=async W=>{if(N)try{await Ne.deleteTicketMessage(N.ticket_id,W),K(oe=>oe.filter(Se=>Se.id!==W)),Dt.success("Message deleted in Discord.")}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to delete message.")}},Kt=W=>{X(W.id),q(W.content)},La=()=>{X(null),q("")},Oe=async W=>{if(!(!N||!xe.trim()))try{await Ne.editTicketMessage(N.ticket_id,W,xe.trim()),K(oe=>oe.map(Se=>Se.id===W?{...Se,content:xe.trim()}:Se)),X(null),Dt.success("Message updated in Discord.")}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to edit message.")}},tt=W=>{const oe=W.target.value;ce(oe);const Se=W.target.selectionStart||oe.length,ye=oe.slice(0,Se),Re=ye.lastIndexOf("@");if(Re!==-1&&!ye.slice(Re).includes(" ")){const nt=ye.slice(Re+1).toLowerCase();$(nt),O(!0)}else O(!1)},it=(W,oe,Se)=>{const ye=Y.lastIndexOf("@"),Re=Y.slice(0,ye),nt=Se?`<@&${oe}>`:`<@${oe}>`;ce(`${Re}${nt} `),O(!1)},rn=W=>{const oe=Math.floor((Date.now()-W)/1e3);return fg(oe)},Ft=W=>new Date(W).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),Rt=W=>{if(!W)return null;const oe=/(```[\s\S]*?```|`[^`]+`|\*\*\*[\s\S]+?\*\*\*|\*\*[\s\S]+?\*\*|__[\s\S]+?__|~~[\s\S]+?~~|\|\|[\s\S]+?\|\||<@!?&?\d+>|^###\s[^\n]+|^##\s[^\n]+|^-#\s[^\n]+|\[[^\]]+\]\(https?:\/\/[^\s)]+\)|https?:\/\/[^\s]+)/gm;return W.split(oe).map((ye,Re)=>{var Rr;if(!ye)return null;if(ye.startsWith("-# "))return s.jsx("span",{className:"text-xs text-muted-foreground font-medium block my-0.5 opacity-80",children:Rt(ye.slice(3))},Re);if(ye.startsWith("## "))return s.jsx("span",{className:"text-base font-bold text-foreground block my-1 tracking-tight",children:Rt(ye.slice(3))},Re);if(ye.startsWith("### "))return s.jsx("span",{className:"text-sm font-bold text-foreground block my-0.5",children:Rt(ye.slice(4))},Re);if(ye.startsWith("```")&&ye.endsWith("```")&&ye.length>=6){const xn=ye.slice(3,-3).replace(/^[a-z0-9_-]+\n/i,"");return s.jsx("pre",{className:"bg-black/60 p-2.5 rounded-lg text-xs font-mono my-1.5 border border-border overflow-x-auto text-emerald-400 font-mono",children:s.jsx("code",{children:xn})},Re)}if(ye.startsWith("`")&&ye.endsWith("`")&&ye.length>2)return s.jsx("code",{className:"bg-black/50 px-1.5 py-0.5 rounded text-xs font-mono text-emerald-300 border border-border/40",children:ye.slice(1,-1)},Re);if(ye.startsWith("***")&&ye.endsWith("***")&&ye.length>6)return s.jsx("strong",{className:"font-bold italic",children:Rt(ye.slice(3,-3))},Re);if(ye.startsWith("**")&&ye.endsWith("**")&&ye.length>4)return s.jsx("strong",{className:"font-bold",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("__")&&ye.endsWith("__")&&ye.length>4)return s.jsx("span",{className:"underline underline-offset-2",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("~~")&&ye.endsWith("~~")&&ye.length>4)return s.jsx("span",{className:"line-through opacity-80",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("||")&&ye.endsWith("||")&&ye.length>4)return s.jsx("span",{className:"bg-secondary text-transparent hover:text-foreground hover:bg-secondary/50 px-1.5 py-0.5 rounded transition-all cursor-pointer select-none border border-border/30",title:"Click to reveal spoiler",children:ye.slice(2,-2)},Re);const nt=ye.match(/^<@!?(\d+)>$/);if(nt){const xn=nt[1],mn=new Map;N&&mn.set(N.user_id,"Ticket Author"),te.forEach(xr=>{var Xr;(Xr=xr.author)!=null&&Xr.id&&mn.set(xr.author.id,xr.author.globalName||xr.author.username)});const Wr=mn.get(xn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-primary/20 text-primary mx-0.5",title:`User ID: ${xn}`,children:["@",Wr||"User"]},Re)}const mt=ye.match(/^<@&(\d+)>$/);if(mt){const xn=mt[1],mn=(Rr=ae==null?void 0:ae.roles)==null?void 0:Rr.find(Wr=>Wr.id===xn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-amber-500/20 text-amber-400 mx-0.5",children:["@",mn?mn.name:`Role (${xn})`]},Re)}const bt=ye.match(/^\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)$/);if(bt){const xn=bt[1],mn=bt[2];return s.jsx("a",{href:mn,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:xn},Re)}return/^https?:\/\/[^\s]+$/i.test(ye)?/\.(gif|jpe?g|png|webp)(\?[^\s]*)?$/i.test(ye)||/cdn\.discordapp\.com\/(emojis|attachments)\//i.test(ye)||/images\.discordapp\.net\//i.test(ye)||/media\d*\.giphy\.com\//i.test(ye)?s.jsx("span",{className:"block my-1",children:s.jsx("img",{src:ye,alt:"GIF/Image",className:"max-h-64 rounded-lg border border-border object-contain hover:opacity-95 transition-opacity",loading:"lazy"})},Re):s.jsx("a",{href:ye,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:ye},Re):ye})},Jn=W=>!W||W.length===0?null:s.jsx("div",{className:"space-y-2 mt-1",children:W.map(oe=>{var nt,mt,bt;const Se=((nt=oe.contentType)==null?void 0:nt.startsWith("image/"))||/\.(png|jpe?g|gif|webp|svg)$/i.test(oe.name),ye=((mt=oe.contentType)==null?void 0:mt.startsWith("video/"))||/\.(mp4|webm|mov|mkv)$/i.test(oe.name),Re=((bt=oe.contentType)==null?void 0:bt.startsWith("audio/"))||/\.(mp3|wav|ogg|m4a)$/i.test(oe.name);return Se?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black/40",children:s.jsx("a",{href:oe.url,target:"_blank",rel:"noreferrer",children:s.jsx("img",{src:oe.url,alt:oe.name,className:"max-h-80 max-w-full object-contain hover:opacity-95 transition-opacity",loading:"lazy"})})},oe.id):ye?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black",children:s.jsx("video",{src:oe.url,controls:!0,className:"max-h-80 max-w-full"})},oe.id):Re?s.jsx("div",{className:"p-2 border border-border rounded-lg bg-secondary/20",children:s.jsx("audio",{src:oe.url,controls:!0,className:"w-full h-8"})},oe.id):s.jsxs("div",{className:"p-2.5 rounded-lg border border-border bg-secondary/20 flex items-center justify-between text-xs gap-3",children:[s.jsxs("div",{className:"flex items-center gap-2 truncate",children:[s.jsx(ve,{icon:Uy,size:16,className:"text-primary shrink-0"}),s.jsx("span",{className:"truncate font-medium",children:oe.name})]}),s.jsx(ue,{variant:"ghost",size:"sm",asChild:!0,className:"h-7 px-2 text-xs",children:s.jsx("a",{href:oe.url,target:"_blank",rel:"noreferrer",download:!0,children:"Download"})})]},oe.id)})}),fn=W=>!W||W.length===0?null:s.jsx("div",{className:"space-y-3 mt-1.5 w-full",children:W.map((oe,Se)=>{var ye,Re,nt,mt;return s.jsxs("div",{className:"rounded-lg border border-border/60 bg-secondary/30 p-3.5 text-xs space-y-2 border-l-4 shadow-sm relative overflow-hidden max-w-xl",style:{borderLeftColor:oe.color||"#5865F2"},children:[oe.author&&s.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-foreground",children:[oe.author.iconURL&&s.jsx("img",{src:oe.author.iconURL,alt:"",className:"h-4 w-4 rounded-full"}),s.jsx("span",{children:oe.author.name})]}),((ye=oe.thumbnail)==null?void 0:ye.url)&&s.jsx("img",{src:oe.thumbnail.url,alt:"",className:"h-12 w-12 rounded object-cover absolute top-3 right-3 border border-border"}),oe.title&&s.jsx("h4",{className:"font-bold text-sm text-foreground tracking-tight pr-12",children:Rt(oe.title)}),oe.description&&s.jsx("div",{className:"text-muted-foreground whitespace-pre-wrap leading-relaxed pr-12",children:Rt(oe.description)}),oe.fields&&oe.fields.length>0&&s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2.5 pt-2 border-t border-border/30",children:oe.fields.map((bt,Rr)=>s.jsxs("div",{className:`space-y-0.5 ${bt.inline?"":"sm:col-span-2"}`,children:[s.jsx("p",{className:"font-semibold text-foreground text-[11px] uppercase tracking-wider",children:bt.name}),s.jsx("p",{className:"text-muted-foreground whitespace-pre-wrap",children:Rt(bt.value)})]},Rr))}),((Re=oe.image)==null?void 0:Re.url)&&s.jsx("div",{className:"rounded-md overflow-hidden border border-border mt-2",children:s.jsx("img",{src:oe.image.url,alt:"",className:"max-h-64 w-full object-cover"})}),(oe.footer||oe.timestamp)&&s.jsxs("div",{className:"flex items-center gap-2 pt-1 border-t border-border/20 text-[10px] text-muted-foreground",children:[((nt=oe.footer)==null?void 0:nt.iconURL)&&s.jsx("img",{src:oe.footer.iconURL,alt:"",className:"h-3.5 w-3.5 rounded-full"}),((mt=oe.footer)==null?void 0:mt.text)&&s.jsx("span",{children:oe.footer.text}),oe.timestamp&&s.jsxs("span",{children:[new Date(oe.timestamp).toLocaleDateString()," ",new Date(oe.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]},Se)})}),Ln=W=>{if(!W||W.length===0)return null;const oe=W.map(Se=>({...Se,components:(Se.components||[]).filter(ye=>ye.customId||ye.url||ye.type===2||ye.type===3||ye.type==="BUTTON"||ye.type==="STRING_SELECT")})).filter(Se=>Se.components&&Se.components.length>0);return oe.length===0?null:s.jsx("div",{className:"space-y-2 mt-2.5 w-full",children:oe.map((Se,ye)=>{var Re;return s.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:(Re=Se.components)==null?void 0:Re.map((nt,mt)=>s.jsxs("div",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-secondary/80 text-secondary-foreground text-xs font-semibold border border-border/80 shadow-sm hover:bg-secondary transition-colors cursor-pointer",children:[nt.emoji&&s.jsx("span",{children:nt.emoji}),s.jsx("span",{children:nt.label||nt.customId||"Button"})]},mt))},ye)})})},xo=()=>s.jsx(fc,{className:"flex-1 p-4 sm:p-6",children:s.jsxs("div",{className:"max-w-4xl mx-auto w-full space-y-4",children:[I?s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(Be,{className:"h-10 w-3/4"}),s.jsx(Be,{className:"h-10 w-1/2 ml-auto"}),s.jsx(Be,{className:"h-10 w-2/3"})]}):te.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground text-sm",children:"No recent messages in this ticket channel."}):te.map(W=>{var oe;return s.jsxs("div",{className:`group flex items-start gap-3 ${W.author.isDashboard?"flex-row-reverse":""}`,children:[s.jsxs(bs,{className:"h-8 w-8 shrink-0",children:[s.jsx(eo,{src:W.author.avatar,alt:W.author.username}),s.jsx(ys,{children:s.jsx(ve,{icon:L8,size:16})})]}),s.jsxs("div",{className:`flex flex-col space-y-1 max-w-[80%] ${W.author.isDashboard?"items-end":"items-start"}`,children:[s.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[s.jsx("span",{className:"font-semibold text-foreground",children:W.author.globalName||W.author.username}),W.author.bot&&s.jsx(Fn,{variant:"secondary",className:"px-1 py-0 text-[10px]",children:"BOT"}),W.author.isDashboard&&s.jsx(Fn,{variant:"default",className:"px-1 py-0 text-[10px]",children:"STAFF"}),s.jsx("span",{children:Ft(W.createdAt)}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity ml-1",children:[s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-foreground",onClick:()=>Kt(W),title:"Edit Message",children:s.jsx(ve,{icon:D2,size:12})}),s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-destructive",onClick:()=>Mr(W.id),title:"Delete Message",children:s.jsx(ve,{icon:wi,size:12})})]})]}),H===W.id?s.jsxs("div",{className:"flex items-center gap-2 w-full mt-1",children:[s.jsx(De,{value:xe,onChange:Se=>q(Se.target.value),className:"h-8 text-sm",autoFocus:!0}),s.jsx(ue,{size:"sm",className:"h-8 px-2 bg-primary",onClick:()=>Oe(W.id),children:s.jsx(ve,{icon:_8,size:14})}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-8 px-2",onClick:La,children:s.jsx(ve,{icon:va,size:14})})]}):W.content?s.jsx("div",{className:`rounded-lg px-3.5 py-2.5 text-sm whitespace-pre-wrap ${W.author.isDashboard?"bg-primary text-primary-foreground":"bg-secondary/40 text-secondary-foreground border border-border/50"}`,style:W.containerColor||W.author.bot&&!((oe=W.embeds)!=null&&oe.length)?{borderLeftWidth:"4px",borderLeftColor:W.containerColor||"#5865F2"}:void 0,children:Rt(W.content)}):null,Jn(W.attachments),fn(W.embeds),Ln(W.components)]})]},W.id)}),s.jsx("div",{ref:ho})]})}),vo=()=>{var W;return s.jsxs("div",{className:"p-4 border-t border-border bg-secondary/10 flex flex-col gap-2 relative",children:[fe.length>0&&s.jsx("div",{className:"max-w-4xl mx-auto w-full flex items-center gap-2 flex-wrap mb-1",children:fe.map((oe,Se)=>s.jsxs("div",{className:"flex items-center gap-2 p-1.5 px-3 rounded-lg border border-border bg-secondary text-xs",children:[oe.previewUrl?s.jsx("img",{src:oe.previewUrl,alt:"",className:"h-6 w-6 rounded object-cover"}):s.jsx(ve,{icon:Uy,size:14,className:"text-primary"}),s.jsx("span",{className:"font-medium max-w-[120px] truncate",children:oe.filename}),s.jsxs("span",{className:"text-muted-foreground text-[10px]",children:[oe.sizeMb,"MB"]}),s.jsx("button",{type:"button",onClick:()=>Kr(Se),className:"text-muted-foreground hover:text-destructive ml-1",children:s.jsx(ve,{icon:va,size:12})})]},Se))}),V&&s.jsxs("div",{className:"max-w-4xl mx-auto w-full absolute bottom-full mb-2 z-50 bg-popover text-popover-foreground border border-border rounded-xl shadow-xl overflow-hidden max-h-48 overflow-y-auto",children:[s.jsx("div",{className:"p-2 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider border-b",children:"Mentions (@)"}),N&&s.jsxs("button",{type:"button",onClick:()=>it("Ticket Author",N.user_id,!1),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(bs,{className:"h-5 w-5",children:s.jsx(ys,{children:"U"})}),s.jsx("span",{className:"font-medium",children:"Ticket Author"})]}),s.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["@",N.user_id]})]}),(W=ae==null?void 0:ae.roles)==null?void 0:W.filter(oe=>oe.name.toLowerCase().includes(D)).slice(0,5).map(oe=>s.jsxs("button",{type:"button",onClick:()=>it(oe.name,oe.id,!0),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("span",{className:"font-medium text-amber-400",children:["@",oe.name]}),s.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"Role"})]},oe.id))]}),s.jsxs("form",{onSubmit:Oa,className:"max-w-4xl mx-auto w-full flex items-center gap-2",children:[s.jsx("input",{type:"file",ref:Qn,multiple:!0,onChange:go,className:"hidden",accept:"image/*,video/*,audio/*,.pdf,.zip,.txt,.json"}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{var oe;return(oe=Qn.current)==null?void 0:oe.click()},title:"Attach files or media",className:"h-9 px-2.5",children:s.jsx(ve,{icon:b8,size:16})}),s.jsx(De,{value:Y,onChange:tt,placeholder:"Type a reply... Use @ to tag roles or users",disabled:P||I,className:"flex-1"}),s.jsx(ue,{type:"submit",size:"sm",disabled:P||!Y.trim()&&!fe.length||I,children:P?s.jsx(ve,{icon:ur,size:16,className:"animate-spin"}):s.jsxs(s.Fragment,{children:[s.jsx(ve,{icon:R8,size:16,className:"mr-1.5"}),"Send"]})})]})]})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),s.jsx("p",{className:"text-muted-foreground",children:"Manage open support tickets & reply live to Discord channels from the web dashboard."})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(ue,{onClick:()=>Pt(!0),className:"gap-2 bg-primary font-semibold text-xs h-9",children:[s.jsx(ve,{icon:is,size:15})," Open Ticket"]}),s.jsxs(ue,{onClick:()=>void qr(),disabled:c,variant:"outline",size:"sm",children:[s.jsx(ve,{icon:ur,size:16,className:c?"animate-spin mr-2":"mr-2"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between gap-3 bg-card/60 p-3.5 rounded-xl border border-border/80 shadow-sm",children:[s.jsxs("div",{className:"relative w-full md:w-80",children:[s.jsx(ve,{icon:ji,size:15,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search tickets by ID, user, subject...",value:C,onChange:W=>S(W.target.value),className:"pl-9 text-xs h-9 bg-secondary/30 border-border"})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2.5 w-full md:w-auto justify-end",children:[p&&s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Department:"}),s.jsxs(Ca,{value:v,onValueChange:b,children:[s.jsx(Br,{className:"text-xs h-9 w-[160px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Departments"})}),s.jsxs($r,{children:[s.jsx(vt,{value:"all",children:"All Departments"}),E.map(W=>s.jsx(vt,{value:W,className:"capitalize",children:W},W))]})]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Priority:"}),s.jsxs(Ca,{value:w,onValueChange:y,children:[s.jsx(Br,{className:"text-xs h-9 w-[140px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Priorities"})}),s.jsxs($r,{children:[s.jsx(vt,{value:"all",children:"All Priorities"}),s.jsx(vt,{value:"low",children:"Low"}),s.jsx(vt,{value:"medium",children:"Medium / Normal"}),s.jsx(vt,{value:"high",children:"High"}),s.jsx(vt,{value:"urgent",children:"Urgent"})]})]})]}),(v!=="all"||w!=="all"||C.trim())&&s.jsx(ue,{variant:"ghost",size:"sm",onClick:()=>{b("all"),y("all"),S("")},className:"h-9 text-xs text-muted-foreground hover:text-foreground px-2",children:"Reset"})]})]}),s.jsx(Ze,{className:"border-border bg-card",children:s.jsx(Qe,{className:"p-0",children:c?s.jsxs("div",{className:"space-y-4 p-6",children:[s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"})]}):d?s.jsx("div",{className:"p-6",children:s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:d})})}):k.length===0?s.jsxs("div",{className:"p-12 text-center text-muted-foreground space-y-2",children:[s.jsx("p",{children:"No open tickets found matching your filter criteria."}),(v!=="all"||w!=="all"||C.trim())&&s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>{b("all"),y("all"),S("")},className:"text-xs mt-2",children:"Clear Filters"})]}):s.jsx("div",{className:"divide-y divide-border",children:k.map(W=>s.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("p",{className:"font-medium text-primary",children:W.subject||"Untitled Ticket"}),s.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",W.ticket_id]}),p&&W.department&&s.jsx(Fn,{variant:"outline",className:"text-xs capitalize",children:W.department}),s.jsxs(Fn,{variant:W.priority==="high"?"destructive":W.priority==="medium"?"secondary":"outline",className:"text-xs capitalize",children:[W.priority," priority"]})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",s.jsx("span",{className:"font-mono",children:W.user_id}),W.description&&` • ${W.description}`]})]}),s.jsxs("div",{className:"flex items-center gap-3 w-full sm:w-auto justify-end",children:[s.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap mr-2",children:[s.jsx(ve,{icon:h8,size:14,className:"mr-1.5"}),rn(W.created_at)]}),s.jsxs(ue,{variant:"default",size:"sm",onClick:()=>Li(W),className:"bg-primary text-primary-foreground hover:bg-primary/90",children:[s.jsx(ve,{icon:g8,size:16,className:"mr-2"}),"Live Chat"]}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(W),disabled:ze===W.ticket_id,children:[ze===W.ticket_id?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Close"]}),a&&s.jsx(ue,{variant:"secondary",size:"sm",asChild:!0,children:s.jsx("a",{href:`https://discord.com/channels/${a}/${W.ticket_id}`,target:"_blank",rel:"noreferrer",children:s.jsx(ve,{icon:Nd,size:16})})})]})]},W.ticket_id))})})}),M&&R&&s.jsx("div",{className:"fixed inset-0 z-50 bg-black/65 backdrop-blur-sm flex items-center justify-center p-4 sm:p-6 lg:p-8 animate-in fade-in-0",onClick:W=>{W.target===W.currentTarget&&L(!1)},children:s.jsxs("div",{className:"bg-card text-card-foreground border border-border rounded-2xl shadow-2xl flex flex-col w-full max-w-5xl h-[88vh] overflow-hidden animate-in zoom-in-95",children:[s.jsxs("div",{className:"p-4 border-b border-border bg-secondary/20 flex flex-col space-y-1",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx("h2",{className:"text-lg font-bold tracking-tight truncate",children:(N==null?void 0:N.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",N==null?void 0:N.ticket_id]}),(N==null?void 0:N.department)&&s.jsx(Fn,{variant:"secondary",className:"text-xs capitalize shrink-0",children:N.department})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[N&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(N),disabled:ze===N.ticket_id,className:"h-8 px-2.5 text-xs",children:[ze===N.ticket_id?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Close Ticket"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>L(!1),className:"h-8 px-3 text-xs flex items-center gap-1.5",children:[s.jsx(ve,{icon:S8,size:14}),s.jsx("span",{children:"Collapse"})]}),s.jsx(ue,{variant:"ghost",size:"icon",onClick:()=>{_(!1),L(!1)},className:"h-8 w-8 text-muted-foreground hover:text-foreground",children:s.jsx(ve,{icon:va,size:18})})]})]}),(N==null?void 0:N.description)&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:N.description})]}),xo(),vo()]})}),M&&!R&&s.jsx(Yj,{open:M,onOpenChange:_,children:s.jsxs(Hg,{side:"right",className:"w-full sm:max-w-xl p-0 flex flex-col h-full bg-card",children:[s.jsxs(Gg,{className:"p-4 border-b border-border space-y-1 bg-secondary/20",children:[s.jsxs("div",{className:"flex items-center justify-between pr-8",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx(Vg,{className:"text-base font-bold truncate",children:(N==null?void 0:N.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",N==null?void 0:N.ticket_id]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[N&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(N),disabled:ze===N.ticket_id,className:"h-7 px-2 text-xs",children:[ze===N.ticket_id?s.jsx(ve,{icon:ur,size:13,className:"animate-spin mr-1"}):s.jsx(ve,{icon:va,size:13,className:"mr-1"}),"Close"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>L(!0),className:"h-7 px-2 text-xs flex items-center gap-1",title:"Open in Full View",children:[s.jsx(ve,{icon:C8,size:13}),s.jsx("span",{children:"Full View"})]})]})]}),(N==null?void 0:N.description)&&s.jsx(Fg,{className:"text-xs text-muted-foreground truncate",children:N.description})]}),xo(),vo()]})}),s.jsx(Qs,{open:ge,onOpenChange:me,children:s.jsxs(hs,{className:"sm:max-w-md bg-card border-border rounded-xl",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-lg font-bold flex items-center gap-2",children:[s.jsx(ve,{icon:va,className:"text-destructive",size:20}),"Close Ticket #",B==null?void 0:B.ticket_id]}),s.jsx(vs,{className:"text-xs text-muted-foreground pt-1",children:"Are you sure you want to close this ticket? A transcript will be created and the channel will be deleted in Discord."})]}),s.jsxs("div",{className:"space-y-2 py-2",children:[s.jsx("label",{className:"text-xs font-semibold text-foreground",children:"Reason for closing (Optional)"}),s.jsx(De,{value:we,onChange:W=>Ce(W.target.value),placeholder:"e.g. Issue resolved by support team",className:"text-sm"})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0 mt-2",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>me(!1),disabled:!!ze,children:"Cancel"}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:Da,disabled:!!ze,children:[ze?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Confirm Close"]})]})]})}),s.jsx(Qs,{open:ft,onOpenChange:Pt,children:s.jsxs(hs,{className:"sm:max-w-[450px]",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-base flex items-center gap-2",children:[s.jsx(ve,{icon:is,size:18,className:"text-primary"}),"Open Direct Ticket"]}),s.jsx(vs,{className:"text-xs",children:"Select a support department to create a new ticket channel in Discord immediately."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department"}),s.jsxs(Ca,{value:gn,onValueChange:Yr,children:[s.jsx(Br,{className:"text-xs border-border bg-secondary/30",children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"general",children:"🎫 General Support"}),s.jsx(vt,{value:"purchase",children:"💳 Purchase & Billing Support"}),s.jsx(vt,{value:"reports",children:"🚨 Player Report"}),s.jsx(vt,{value:"appeals",children:"⚖️ Ban Appeals"})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Ticket Subject / Reason"}),s.jsx(De,{value:_n,onChange:W=>wn(W.target.value),placeholder:"e.g. Assistance with server permissions",className:"text-xs border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Discord User ID (Optional)"}),s.jsx(De,{value:Xn,onChange:W=>Zn(W.target.value),placeholder:"e.g. 123456789012345678 (Leave blank for yourself)",className:"text-xs font-mono border-border bg-secondary/30"}),s.jsx("p",{className:"text-[11px] text-muted-foreground",children:"If specified, the ticket channel will be created for this user."})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>Pt(!1),disabled:It,className:"text-xs",children:"Cancel"}),s.jsxs(ue,{size:"sm",onClick:nn,disabled:It||!_n.trim(),className:"gap-1.5 text-xs bg-primary font-semibold",children:[It?s.jsx(ve,{icon:ur,size:14,className:"animate-spin"}):s.jsx(ve,{icon:is,size:14}),It?"Opening Ticket...":"Open Ticket"]})]})]})})]})}const SP=["admin","moderator","editor","viewer","custom"];function NP(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:ls("viewer"),yamlOwner:!1}}function EP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(kt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(kt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(kt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(kt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(kt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var v;const g=((v=t.configs)==null?void 0:v[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(kt,{checked:g.view,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,view:b}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(kt,{checked:g.edit,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,edit:b,view:b?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(kt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function kP(t){return t.permissions.users.manage?"Full + user management":t.permissions.settings.update?"Configs + settings updates":Object.values(t.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function TP(){const{user:t,hasPermission:n}=qt(),a=n("users.manage"),[o,c]=f.useState([]),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,v]=f.useState(""),[b,w]=f.useState(null),[y,C]=f.useState(!1),S=f.useCallback(async()=>{p(!0),v("");try{const[R,L]=await Promise.all([Ne.listDashboardUsers(),Ne.listGroups().catch(()=>({data:{groups:[]}}))]);R.data&&c(R.data.users),L.data&&d(L.data.groups)}catch(R){v(R instanceof Error?R.message:"Failed to load users")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);const E=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function k(){w(NP())}function N(R){w({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:ls(R.role),yamlOwner:R.yamlOwner})}function T(R){b&&w({...b,role:R,permissions:ls(R,b.permissions)})}async function M(){if(!(!b||!a)){C(!0),v("");try{b.mode==="add"?await Ne.addDashboardUser({id:b.id.trim(),role:b.role,username:b.username||void 0,globalName:b.globalName||void 0,enabled:b.enabled,permissions:b.role==="custom"?b.permissions:void 0}):await Ne.updateDashboardUser(b.id,{role:b.yamlOwner?void 0:b.role,enabled:b.enabled,username:b.username||void 0,globalName:b.globalName||void 0,permissions:b.role==="custom"?b.permissions:void 0}),w(null),await S()}catch(R){v(R instanceof Error?R.message:"Could not save user")}finally{C(!1)}}}async function _(R){if(a&&window.confirm("Remove this user from the dashboard?")){v("");try{await Ne.removeDashboardUser(R),await S()}catch(L){v(L instanceof Error?L.message:"Could not remove user")}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),s.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",s.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?s.jsxs(ue,{onClick:k,children:[s.jsx(ve,{icon:sg,size:16,className:"mr-2"}),"Add user"]}):null]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,s.jsx(Ze,{className:"border-border bg-card overflow-hidden",children:s.jsx(Qe,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):E.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:"No users found."}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"User"}),s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Access Summary"}),s.jsx("th",{className:"px-4 py-2.5",children:"Status"}),a&&s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:E.map(R=>{const L=l.find(I=>I.id===R.groupId||I.id===R.role),te=(L==null?void 0:L.color)||"#10B981",K=(L==null?void 0:L.name)||$y[R.yamlOwner?"owner":R.role]||R.role;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs(bs,{className:"size-7",children:[s.jsx(eo,{src:R.avatar,alt:R.username}),s.jsx(ys,{className:"text-[10px]",children:(R.username||R.id).slice(0,2).toUpperCase()})]}),s.jsxs("div",{className:"min-w-0 leading-tight",children:[s.jsxs("p",{className:"truncate font-semibold text-foreground text-xs",children:[P2(R),R.id===(t==null?void 0:t.id)?s.jsx("span",{className:"text-[11px] text-primary font-normal ml-1",children:"(you)"}):""]}),s.jsx("p",{className:"truncate text-[10px] text-muted-foreground font-mono",children:R.id})]})]})}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:te}}),s.jsx("span",{className:"font-medium text-xs text-foreground",children:K}),R.yamlOwner&&s.jsx("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Config Owner"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:kP(R)}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:R.enabled?s.jsx(Fn,{className:"text-[10px] px-2 py-0.5 bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15 border-emerald-500/20",children:"Active"}):s.jsx(Fn,{variant:"outline",className:"text-[10px] px-2 py-0.5",children:"Disabled"})}),a&&s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>N(R),children:[s.jsx(ve,{icon:v8,size:13}),"Edit"]}),!R.yamlOwner&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>_(R.id),children:[s.jsx(ve,{icon:wi,size:13}),"Remove"]})]})})]},R.id)})})]})})})}),s.jsx(Qs,{open:!!b,onOpenChange:R=>!R&&w(null),children:s.jsxs(hs,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:(b==null?void 0:b.mode)==="add"?"Add dashboard user":"Edit user"}),s.jsx(vs,{children:b!=null&&b.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":P8[(b==null?void 0:b.role)??"viewer"]})]}),b?s.jsxs("div",{className:"space-y-4",children:[b.mode==="add"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"discord-id",children:"Discord user ID"}),s.jsx(De,{id:"discord-id",value:b.id,onChange:R=>w({...b,id:R.target.value}),placeholder:"829112572816130058"})]}):null,s.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Display name (optional)"}),s.jsx(De,{value:b.globalName,onChange:R=>w({...b,globalName:R.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Username (optional)"}),s.jsx(De,{value:b.username,onChange:R=>w({...b,username:R.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Permission Group"}),s.jsxs(Ca,{value:b.role,disabled:b.yamlOwner,onValueChange:R=>{const L=l.find(te=>te.id===R);L?w({...b,role:R,permissions:L.permissions}):T(R)},children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsx($r,{children:b.yamlOwner?s.jsx(vt,{value:"owner",children:"Owner"}):l.length>0?l.map(R=>s.jsx(vt,{value:R.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2.5 rounded-full shrink-0",style:{backgroundColor:R.color||"#10B981"}}),s.jsx("span",{children:R.name})]})},R.id)):SP.map(R=>s.jsx(vt,{value:R,children:$y[R]},R))})]})]}),s.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[s.jsx("span",{className:"text-sm",children:"Account enabled"}),s.jsx(kt,{checked:b.enabled,disabled:b.yamlOwner,onCheckedChange:R=>w({...b,enabled:R})})]}),b.role==="custom"&&!b.yamlOwner?s.jsx(EP,{permissions:b.permissions,onChange:R=>w({...b,permissions:R})}):null]}):null,s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>w(null),children:"Cancel"}),s.jsx(ue,{disabled:y||!a||(b==null?void 0:b.mode)==="add"&&!/^\d{17,20}$/.test(b.id.trim()),onClick:()=>void M(),children:y?"Saving…":"Save"})]})]})})]})}const MP=[{name:"Emerald",hex:"#10B981"},{name:"Blue",hex:"#3B82F6"},{name:"Purple",hex:"#8B5CF6"},{name:"Amber",hex:"#F59E0B"},{name:"Red",hex:"#EF4444"},{name:"Cyan",hex:"#06B6D4"},{name:"Gray",hex:"#6B7280"}];function RP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(kt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(kt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(kt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(kt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(kt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var v;const g=((v=t.configs)==null?void 0:v[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(kt,{checked:g.view,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,view:b}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(kt,{checked:g.edit,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,edit:b,view:b?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(kt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function AP(){const{permissions:t,impersonateGroup:n,impersonatedGroup:a,stopImpersonation:o}=qt(),c=Mn(t,"users.manage"),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,v]=f.useState(null),[b,w]=f.useState(null),[y,C]=f.useState(!1),[S,E]=f.useState("add"),[k,N]=f.useState(!1),[T,M]=f.useState(""),[_,R]=f.useState(""),[L,te]=f.useState(""),[K,I]=f.useState("#10B981"),[G,Y]=f.useState(""),[ce,fe]=f.useState(ls("viewer")),se=async()=>{var V;p(!0),v(null);try{const O=await Ne.listGroups();d(((V=O.data)==null?void 0:V.groups)||[])}catch(O){v(O instanceof Error?O.message:"Failed to load groups")}finally{p(!1)}};f.useEffect(()=>{se()},[]);const P=()=>{E("add"),M(""),R(""),te(""),I("#10B981"),Y(""),fe(ls("viewer")),C(!0)},Z=V=>{E("edit"),M(V.id),R(V.name),te(V.description||""),I(V.color||"#10B981"),Y(V.discordRoleId||""),fe(V.permissions||ls("viewer")),C(!0)},ae=async()=>{if(!_.trim()){v("Group name is required");return}N(!0),v(null);try{S==="add"?(await Ne.createGroup({name:_.trim(),description:L.trim(),color:K,discordRoleId:G.trim()||null,permissions:ce}),w(`Group "${_}" created successfully.`)):(await Ne.updateGroup(T,{name:_.trim(),description:L.trim(),color:K,discordRoleId:G.trim()||null,permissions:ce}),w(`Group "${_}" updated successfully.`)),C(!1),await se()}catch(V){v(V instanceof Error?V.message:"Failed to save group")}finally{N(!1)}},re=async V=>{if(!V.isSystem&&confirm(`Are you sure you want to delete the group "${V.name}"?`))try{await Ne.deleteGroup(V.id),w(`Group "${V.name}" deleted.`),await se()}catch(O){v(O instanceof Error?O.message:"Failed to delete group")}};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Permission Groups"}),s.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create custom permission groups, assign staff members, and optionally sync with Discord Role IDs."})]}),c&&s.jsxs(ue,{onClick:P,className:"shrink-0 gap-2 bg-primary",children:[s.jsx(ve,{icon:sg,size:18}),"Create Group"]})]}),g&&s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}),b&&s.jsx(Ye,{className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-500",children:s.jsxs(qe,{className:"flex items-center justify-between",children:[s.jsx("span",{children:b}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>w(null),children:"Dismiss"})]})}),s.jsx(Ze,{className:"border-border bg-card overflow-hidden",children:s.jsx(Qe,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):l.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:'No permission groups found. Click "Create Group" to add one.'}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Description"}),s.jsx("th",{className:"px-4 py-2.5",children:"Discord Role ID"}),s.jsx("th",{className:"px-4 py-2.5",children:"Enabled Permissions"}),s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:l.map(V=>{var O,D,$,H,X,xe,q;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"size-2.5 rounded-full shrink-0 shadow-sm",style:{backgroundColor:V.color||"#10B981"}}),s.jsx("span",{className:"text-foreground font-semibold text-xs",children:V.name}),V.isSystem&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-secondary text-secondary-foreground border border-border/80",children:[s.jsx(ve,{icon:qu,size:10}),"System"]})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:V.description||"—"}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:V.discordRoleId?s.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-muted-foreground font-mono bg-secondary/50 px-2 py-0.5 rounded border border-border/50",children:[s.jsx(ve,{icon:qu,size:12,className:"text-primary"}),V.discordRoleId]}):s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"—"})}),s.jsx("td",{className:"px-4 py-2.5",children:s.jsxs("div",{className:"flex flex-wrap gap-1 max-w-md",children:[((O=V.permissions)==null?void 0:O.overview)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Overview"}),(((D=V.permissions)==null?void 0:D.tickets)??(($=V.permissions)==null?void 0:$.overview))&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:"Tickets"}),((H=V.permissions)==null?void 0:H.transcripts)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-purple-500/10 text-purple-400 border border-purple-500/20",children:"Transcripts"}),((X=V.permissions)==null?void 0:X.logs)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-blue-500/10 text-blue-400 border border-blue-500/20",children:"Logs"}),((q=(xe=V.permissions)==null?void 0:xe.users)==null?void 0:q.manage)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20",children:"User Mgmt"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:`h-7 px-2 text-xs gap-1 ${(a==null?void 0:a.id)===V.id?"text-amber-400 font-bold bg-amber-500/15 border border-amber-500/30":"text-amber-400 hover:text-amber-300 hover:bg-amber-500/10"}`,onClick:()=>(a==null?void 0:a.id)===V.id?o():n(V.id),children:[s.jsx(ve,{icon:qu,size:13}),(a==null?void 0:a.id)===V.id?"Active Preview":"View as Group"]}),c&&V.id!=="owner"&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>Z(V),children:[s.jsx(ve,{icon:D2,size:13}),"Edit"]}),c&&!V.isSystem&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>re(V),children:[s.jsx(ve,{icon:wi,size:13}),"Delete"]})]})})]},V.id)})})]})})})}),s.jsx(Qs,{open:y,onOpenChange:C,children:s.jsxs(hs,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:S==="add"?"Create Permission Group":`Edit Group: ${_}`}),s.jsx(vs,{children:"Configure group metadata, custom color badge, Discord role sync, and permission rules."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-name",children:"Group Name"}),s.jsx(De,{id:"group-name",placeholder:"e.g. Support Staff",value:_,onChange:V=>R(V.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-color",children:"Color Badge"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(tf,{value:K,onChange:I}),s.jsx(De,{value:K,onChange:V=>I(V.target.value),placeholder:"#10B981",className:"w-28 font-mono text-sm uppercase"}),s.jsx("div",{className:"flex flex-wrap gap-1 ml-auto",children:MP.map(V=>s.jsx("button",{type:"button",className:"size-6 rounded-full border border-white/20 transition-transform hover:scale-110",style:{backgroundColor:V.hex},onClick:()=>I(V.hex),title:V.name},V.hex))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-desc",children:"Description"}),s.jsx(De,{id:"group-desc",placeholder:"Brief description of what members in this group can access...",value:L,onChange:V=>te(V.target.value)})]}),s.jsx(TS,{id:"discord-role-id",label:"Discord Role ID (Optional Auto-Sync)",description:"If provided, Discord users with this Role ID will automatically inherit this group upon login.",kind:"role",value:G,onChange:V=>Y(String(V??""))}),s.jsxs("div",{className:"pt-2",children:[s.jsx("h4",{className:"text-sm font-semibold mb-3",children:"Group Permission Matrix"}),s.jsx(RP,{permissions:ce,onChange:fe})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",onClick:()=>C(!1),disabled:k,children:"Cancel"}),s.jsx(ue,{onClick:ae,disabled:k,className:"bg-primary",children:k?"Saving...":S==="add"?"Create Group":"Save Changes"})]})]})})]})}function _P({children:t}){const{isAuthenticated:n,loading:a}=qt();return a?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?s.jsx(s.Fragment,{children:t}):s.jsx(ya,{to:"/login",replace:!0})}function DP(){const{complete:t,loading:n}=fS(),a=Kn();return n?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):t?a.pathname==="/setup"?s.jsx(ya,{to:"/login",replace:!0}):s.jsxs(Py,{children:[s.jsx(cn,{path:"/login",element:s.jsx(bz,{})}),s.jsxs(cn,{element:s.jsx(_P,{children:s.jsx(TA,{})}),children:[s.jsx(cn,{index:!0,element:s.jsx(Vz,{})}),s.jsx(cn,{path:"system",element:s.jsx(ga,{permission:"overview",children:s.jsx(sP,{})})}),s.jsx(cn,{path:"settings",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(nP,{})})}),s.jsx(cn,{path:"configs",element:s.jsx(gz,{})}),s.jsx(cn,{path:"logs",element:s.jsx(ga,{permission:"logs",children:s.jsx(mP,{})})}),s.jsx(cn,{path:"tickets",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(CP,{})})}),s.jsx(cn,{path:"transcripts",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(jP,{})})}),s.jsx(cn,{path:"users",element:s.jsx(ga,{permission:"users.view",children:s.jsx(TP,{})})}),s.jsx(cn,{path:"groups",element:s.jsx(ga,{permission:"users.view",children:s.jsx(AP,{})})}),s.jsx(cn,{path:"addons",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(Fz,{})})}),s.jsx(cn,{path:"addons/builder",element:s.jsx(ga,{permission:"settings.update",children:s.jsx(Yz,{})})})]}),s.jsx(cn,{path:"*",element:s.jsx(ya,{to:"/",replace:!0})})]}):s.jsxs(Py,{children:[s.jsx(cn,{path:"/setup",element:s.jsx(Lz,{})}),s.jsx(cn,{path:"*",element:s.jsx(ya,{to:"/setup",replace:!0})})]})}function OP({...t}){return s.jsx(KO,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...t})}Zz();_3.createRoot(document.getElementById("root")).render(s.jsx(f.StrictMode,{children:s.jsx(a8,{children:s.jsx(aC,{children:s.jsx(B8,{children:s.jsx(MA,{children:s.jsxs(U8,{children:[s.jsx(DP,{}),s.jsx(OP,{})]})})})})})})); diff --git a/public/dashboard/index.html b/public/dashboard/index.html index 1bedc17..823007d 100644 --- a/public/dashboard/index.html +++ b/public/dashboard/index.html @@ -10,8 +10,8 @@ href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> - - + +
From 2017c33756be5bbadf80bf899c563c0e1ec389af Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Wed, 12 Aug 2026 00:12:18 +0100 Subject: [PATCH 20/22] update --- API/server.js | 20 ++++++-- Structures/Database.js | 23 ++++++---- .../{index-xYh1zX07.js => index-CzmlDpil.js} | 46 +++++++++---------- public/dashboard/index.html | 2 +- 4 files changed, 55 insertions(+), 36 deletions(-) rename public/dashboard/assets/{index-xYh1zX07.js => index-CzmlDpil.js} (52%) diff --git a/API/server.js b/API/server.js index 49205e1..48913ea 100644 --- a/API/server.js +++ b/API/server.js @@ -649,8 +649,11 @@ h1{font-size:1.25rem}a{color:#a78bfa} return res.status(404).json({ success: false, error: 'No connected Discord server found.' }); } - const deptKey = department || supportbot.Ticket?.DepartmentSystem?.DefaultDepartment || 'general'; - const deptConfig = supportbot.Ticket?.DepartmentSystem?.Departments?.[deptKey]; + const supportbot = configStore.supportbot; + const cmdconfig = configStore.commands; + + const deptKey = department || supportbot?.Ticket?.DepartmentSystem?.DefaultDepartment || 'general'; + const deptConfig = supportbot?.Ticket?.DepartmentSystem?.Departments?.[deptKey]; if (deptConfig && deptConfig.Enabled === false) { return res.status(400).json({ success: false, error: `Ticket department '${deptKey}' is currently disabled.` }); } @@ -661,19 +664,28 @@ h1{font-size:1.25rem}a{color:#a78bfa} targetUser = this.client.user; } - const openCmd = this.client.commands.get(cmdconfig.OpenTicket?.Command || "new"); + const openCmd = this.client.commands.get(cmdconfig?.OpenTicket?.Command || "new"); if (!openCmd) { return res.status(500).json({ success: false, error: 'Open ticket command not found in bot.' }); } const fakeInteraction = { + client: this.client, guild, user: targetUser, member: await guild.members.fetch(targetUser.id).catch(() => null), channel: guild.channels.cache.first(), department: deptKey, reason: subject || reason || "Opened via Web Dashboard", - priority: deptConfig?.DefaultPriority || supportbot.Ticket?.PrioritySystem?.DefaultPriority || "medium", + priority: deptConfig?.DefaultPriority || supportbot?.Ticket?.PrioritySystem?.DefaultPriority || "medium", + options: { + getString: (name) => { + if (name === "department") return deptKey; + if (name === "reason") return subject || reason || "Opened via Web Dashboard"; + if (name === "priority") return deptConfig?.DefaultPriority || supportbot?.Ticket?.PrioritySystem?.DefaultPriority || "medium"; + return null; + } + }, isCommand: () => false, isChatInputCommand: () => false, isButton: () => false, diff --git a/Structures/Database.js b/Structures/Database.js index 381f970..20576fa 100644 --- a/Structures/Database.js +++ b/Structures/Database.js @@ -355,6 +355,13 @@ function initMySQL() { } } catch (err) { console.error("[Database] Error initializing MySQL tables or state:", err.message); + console.warn("[Database] Falling back to SQLite database."); + mysqlReady = false; + if (mysqlPool) { + try { mysqlPool.end(); } catch (e) {} + mysqlPool = null; + } + initSQLite(); } })(); } @@ -449,7 +456,7 @@ function persistTicket(ticketId) { const t = state.tickets[ticketId]; if (!t) return; - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { const sql = ` INSERT INTO tickets ( ticket_id, user_id, subject, description, department, priority, status, @@ -526,7 +533,7 @@ function persistTicket(ticketId) { } function persistPanel(panelRow) { - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { mysqlPool.query( "INSERT INTO ticket_panels (id, message_id, channel_id, created_at) VALUES (?, ?, ?, ?)", [panelRow.id, panelRow.message_id, panelRow.channel_id, panelRow.created_at], @@ -542,7 +549,7 @@ function persistPanel(panelRow) { function persistTicketUser(ticketId, userId, action = "add") { if (action === "add") { - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { mysqlPool.query("INSERT IGNORE INTO ticket_users (ticket_id, user_id) VALUES (?, ?)", [ticketId, userId], (err) => { if (err) console.error("[Database] MySQL persistTicketUser error:", err.message); }); @@ -550,7 +557,7 @@ function persistTicketUser(ticketId, userId, action = "add") { sqliteDb.prepare("INSERT OR IGNORE INTO ticket_users (ticket_id, user_id) VALUES (?, ?)").run(ticketId, userId); } } else { - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { mysqlPool.query("DELETE FROM ticket_users WHERE ticket_id = ? AND user_id = ?", [ticketId, userId], (err) => { if (err) console.error("[Database] MySQL deleteTicketUser error:", err.message); }); @@ -564,7 +571,7 @@ function persistProfile(userId) { const p = state.profiles[userId]; if (!p) return; - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { const sql = ` INSERT INTO profiles (user_id, bio, timezone, clocked_in) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE bio=VALUES(bio), timezone=VALUES(timezone), clocked_in=VALUES(clocked_in); @@ -600,13 +607,13 @@ function persistSettings() { } function persistBlacklistedUser(userId, action = "add") { - if (isMySQL && !mysqlReady) { + if (isMySQL && mysqlReady && !mysqlPool) { mysqlWriteQueue.push(() => persistBlacklistedUser(userId, action)); return; } const b = state.blacklisted_users[userId]; if (action === "add" && b) { - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { const sql = ` INSERT INTO blacklisted_users (user_id, reason, added_by, created_at) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE reason=VALUES(reason), added_by=VALUES(added_by), created_at=VALUES(created_at); @@ -622,7 +629,7 @@ function persistBlacklistedUser(userId, action = "add") { stmt.run(b.user_id, b.reason || "", b.added_by || "", b.created_at || Date.now()); } } else { - if (isMySQL && mysqlPool) { + if (isMySQL && mysqlReady && mysqlPool) { mysqlPool.query("DELETE FROM blacklisted_users WHERE user_id = ?", [userId], (err) => { if (err) console.error("[Database] MySQL removeBlacklistedUser error:", err.message); }); diff --git a/public/dashboard/assets/index-xYh1zX07.js b/public/dashboard/assets/index-CzmlDpil.js similarity index 52% rename from public/dashboard/assets/index-xYh1zX07.js rename to public/dashboard/assets/index-CzmlDpil.js index 88ecbca..69799bc 100644 --- a/public/dashboard/assets/index-xYh1zX07.js +++ b/public/dashboard/assets/index-CzmlDpil.js @@ -1,4 +1,4 @@ -var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in t?w3(t,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[n]=a;var vy=(t,n,a)=>j3(t,typeof n!="symbol"?n+"":n,a),by=(t,n,a)=>n.has(t)||xy("Cannot "+a);var pn=(t,n,a)=>(by(t,n,"read from private field"),a?a.call(t):n.get(t)),yy=(t,n,a)=>n.has(t)?xy("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,a),dp=(t,n,a,o)=>(by(t,n,"write to private field"),o?o.call(t,a):n.set(t,a),a);function C3(t,n){for(var a=0;ao[c]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))o(c);new MutationObserver(c=>{for(const l of c)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(c){const l={};return c.integrity&&(l.integrity=c.integrity),c.referrerPolicy&&(l.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?l.credentials="include":c.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(c){if(c.ep)return;c.ep=!0;const l=a(c);fetch(c.href,l)}})();function s2(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var fp={exports:{}},Sl={};/** +var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in t?w3(t,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[n]=a;var by=(t,n,a)=>j3(t,typeof n!="symbol"?n+"":n,a),vy=(t,n,a)=>n.has(t)||xy("Cannot "+a);var pn=(t,n,a)=>(vy(t,n,"read from private field"),a?a.call(t):n.get(t)),yy=(t,n,a)=>n.has(t)?xy("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,a),dp=(t,n,a,o)=>(vy(t,n,"write to private field"),o?o.call(t,a):n.set(t,a),a);function C3(t,n){for(var a=0;ao[c]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))o(c);new MutationObserver(c=>{for(const l of c)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(c){const l={};return c.integrity&&(l.integrity=c.integrity),c.referrerPolicy&&(l.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?l.credentials="include":c.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(c){if(c.ep)return;c.ep=!0;const l=a(c);fetch(c.href,l)}})();function s2(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var fp={exports:{}},Sl={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var wy;function S3(){if(wy)return Sl;wy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,c,l){var d=null;if(l!==void 0&&(d=""+l),c.key!==void 0&&(d=""+c.key),"key"in c){l={};for(var m in c)m!=="key"&&(l[m]=c[m])}else l=c;return c=l.ref,{$$typeof:t,type:o,key:d,ref:c!==void 0?c:null,props:l}}return Sl.Fragment=n,Sl.jsx=a,Sl.jsxs=a,Sl}var jy;function N3(){return jy||(jy=1,fp.exports=S3()),fp.exports}var s=N3(),mp={exports:{}},Pe={};/** + */var wy;function S3(){if(wy)return Sl;wy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,c,l){var d=null;if(l!==void 0&&(d=""+l),c.key!==void 0&&(d=""+c.key),"key"in c){l={};for(var m in c)m!=="key"&&(l[m]=c[m])}else l=c;return c=l.ref,{$$typeof:t,type:o,key:d,ref:c!==void 0?c:null,props:l}}return Sl.Fragment=n,Sl.jsx=a,Sl.jsxs=a,Sl}var jy;function N3(){return jy||(jy=1,fp.exports=S3()),fp.exports}var s=N3(),mp={exports:{}},ze={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Cy;function E3(){if(Cy)return Pe;Cy=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),w=Symbol.iterator;function y(O){return O===null||typeof O!="object"?null:(O=w&&O[w]||O["@@iterator"],typeof O=="function"?O:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,E={};function k(O,D,$){this.props=O,this.context=D,this.refs=E,this.updater=$||C}k.prototype.isReactComponent={},k.prototype.setState=function(O,D){if(typeof O!="object"&&typeof O!="function"&&O!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,O,D,"setState")},k.prototype.forceUpdate=function(O){this.updater.enqueueForceUpdate(this,O,"forceUpdate")};function N(){}N.prototype=k.prototype;function T(O,D,$){this.props=O,this.context=D,this.refs=E,this.updater=$||C}var M=T.prototype=new N;M.constructor=T,S(M,k.prototype),M.isPureReactComponent=!0;var _=Array.isArray;function R(){}var L={H:null,A:null,T:null,S:null},te=Object.prototype.hasOwnProperty;function K(O,D,$){var H=$.ref;return{$$typeof:t,type:O,key:D,ref:H!==void 0?H:null,props:$}}function I(O,D){return K(O.type,D,O.props)}function G(O){return typeof O=="object"&&O!==null&&O.$$typeof===t}function Y(O){var D={"=":"=0",":":"=2"};return"$"+O.replace(/[=:]/g,function($){return D[$]})}var ce=/\/+/g;function fe(O,D){return typeof O=="object"&&O!==null&&O.key!=null?Y(""+O.key):D.toString(36)}function se(O){switch(O.status){case"fulfilled":return O.value;case"rejected":throw O.reason;default:switch(typeof O.status=="string"?O.then(R,R):(O.status="pending",O.then(function(D){O.status==="pending"&&(O.status="fulfilled",O.value=D)},function(D){O.status==="pending"&&(O.status="rejected",O.reason=D)})),O.status){case"fulfilled":return O.value;case"rejected":throw O.reason}}throw O}function P(O,D,$,H,X){var xe=typeof O;(xe==="undefined"||xe==="boolean")&&(O=null);var q=!1;if(O===null)q=!0;else switch(xe){case"bigint":case"string":case"number":q=!0;break;case"object":switch(O.$$typeof){case t:case n:q=!0;break;case v:return q=O._init,P(q(O._payload),D,$,H,X)}}if(q)return X=X(O),q=H===""?"."+fe(O,0):H,_(X)?($="",q!=null&&($=q.replace(ce,"$&/")+"/"),P(X,D,$,"",function(B){return B})):X!=null&&(G(X)&&(X=I(X,$+(X.key==null||O&&O.key===X.key?"":(""+X.key).replace(ce,"$&/")+"/")+q)),D.push(X)),1;q=0;var ge=H===""?".":H+":";if(_(O))for(var me=0;me{throw TypeError(t)};var j3=(t,n,a)=>n in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Ny;function k3(){return Ny||(Ny=1,(function(t){function n(P,Z){var ae=P.length;P.push(Z);e:for(;0>>1,V=P[re];if(0>>1;rec($,ae))Hc(X,$)?(P[re]=X,P[H]=ae,re=H):(P[re]=$,P[D]=ae,re=D);else if(Hc(X,ae))P[re]=X,P[H]=ae,re=H;else break e}}return Z}function c(P,Z){var ae=P.sortIndex-Z.sortIndex;return ae!==0?ae:P.id-Z.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var p=[],g=[],v=1,b=null,w=3,y=!1,C=!1,S=!1,E=!1,k=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function M(P){for(var Z=a(g);Z!==null;){if(Z.callback===null)o(g);else if(Z.startTime<=P)o(g),Z.sortIndex=Z.expirationTime,n(p,Z);else break;Z=a(g)}}function _(P){if(S=!1,M(P),!C)if(a(p)!==null)C=!0,R||(R=!0,Y());else{var Z=a(g);Z!==null&&se(_,Z.startTime-P)}}var R=!1,L=-1,te=5,K=-1;function I(){return E?!0:!(t.unstable_now()-KP&&I());){var re=b.callback;if(typeof re=="function"){b.callback=null,w=b.priorityLevel;var V=re(b.expirationTime<=P);if(P=t.unstable_now(),typeof V=="function"){b.callback=V,M(P),Z=!0;break t}b===a(p)&&o(p),M(P)}else o(p);b=a(p)}if(b!==null)Z=!0;else{var O=a(g);O!==null&&se(_,O.startTime-P),Z=!1}}break e}finally{b=null,w=ae,y=!1}Z=void 0}}finally{Z?Y():R=!1}}}var Y;if(typeof T=="function")Y=function(){T(G)};else if(typeof MessageChannel<"u"){var ce=new MessageChannel,fe=ce.port2;ce.port1.onmessage=G,Y=function(){fe.postMessage(null)}}else Y=function(){k(G,0)};function se(P,Z){L=k(function(){P(t.unstable_now())},Z)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(P){P.callback=null},t.unstable_forceFrameRate=function(P){0>P||125re?(P.sortIndex=ae,n(g,P),a(p)===null&&P===a(g)&&(S?(N(L),L=-1):S=!0,se(_,ae-re))):(P.sortIndex=V,n(p,P),C||y||(C=!0,R||(R=!0,Y()))),P},t.unstable_shouldYield=I,t.unstable_wrapCallback=function(P){var Z=w;return function(){var ae=w;w=Z;try{return P.apply(this,arguments)}finally{w=ae}}}})(gp)),gp}var Ey;function T3(){return Ey||(Ey=1,hp.exports=k3()),hp.exports}var xp={exports:{}},hn={};/** + */var Ny;function k3(){return Ny||(Ny=1,(function(t){function n(P,W){var oe=P.length;P.push(W);e:for(;0>>1,G=P[ae];if(0>>1;aec(B,oe))Vc(Z,B)?(P[ae]=Z,P[V]=oe,ae=V):(P[ae]=B,P[D]=oe,ae=D);else if(Vc(Z,oe))P[ae]=Z,P[V]=oe,ae=V;else break e}}return W}function c(P,W){var oe=P.sortIndex-W.sortIndex;return oe!==0?oe:P.id-W.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;t.unstable_now=function(){return l.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var p=[],g=[],b=1,v=null,w=3,y=!1,C=!1,S=!1,N=!1,E=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,M=typeof setImmediate<"u"?setImmediate:null;function k(P){for(var W=a(g);W!==null;){if(W.callback===null)o(g);else if(W.startTime<=P)o(g),W.sortIndex=W.expirationTime,n(p,W);else break;W=a(g)}}function _(P){if(S=!1,k(P),!C)if(a(p)!==null)C=!0,R||(R=!0,q());else{var W=a(g);W!==null&&se(_,W.startTime-P)}}var R=!1,L=-1,ne=5,X=-1;function I(){return N?!0:!(t.unstable_now()-XP&&I());){var ae=v.callback;if(typeof ae=="function"){v.callback=null,w=v.priorityLevel;var G=ae(v.expirationTime<=P);if(P=t.unstable_now(),typeof G=="function"){v.callback=G,k(P),W=!0;break t}v===a(p)&&o(p),k(P)}else o(p);v=a(p)}if(v!==null)W=!0;else{var O=a(g);O!==null&&se(_,O.startTime-P),W=!1}}break e}finally{v=null,w=oe,y=!1}W=void 0}}finally{W?q():R=!1}}}var q;if(typeof M=="function")q=function(){M(H)};else if(typeof MessageChannel<"u"){var ce=new MessageChannel,de=ce.port2;ce.port1.onmessage=H,q=function(){de.postMessage(null)}}else q=function(){E(H,0)};function se(P,W){L=E(function(){P(t.unstable_now())},W)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(P){P.callback=null},t.unstable_forceFrameRate=function(P){0>P||125ae?(P.sortIndex=oe,n(g,P),a(p)===null&&P===a(g)&&(S?(T(L),L=-1):S=!0,se(_,oe-ae))):(P.sortIndex=G,n(p,P),C||y||(C=!0,R||(R=!0,q()))),P},t.unstable_shouldYield=I,t.unstable_wrapCallback=function(P){var W=w;return function(){var oe=w;w=W;try{return P.apply(this,arguments)}finally{w=oe}}}})(gp)),gp}var Ey;function T3(){return Ey||(Ey=1,hp.exports=k3()),hp.exports}var xp={exports:{}},hn={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var ky;function M3(){if(ky)return hn;ky=1;var t=Xh();function n(p){var g="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),xp.exports=M3(),xp.exports}/** + */var ky;function M3(){if(ky)return hn;ky=1;var t=Xh();function n(p){var g="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),xp.exports=M3(),xp.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ var w3=Object.defineProperty;var xy=t=>{throw TypeError(t)};var j3=(t,n,a)=>n in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var My;function R3(){if(My)return Nl;My=1;var t=T3(),n=Xh(),a=o2();function o(e){var r="https://react.dev/errors/"+e;if(1V||(e.current=re[V],re[V]=null,V--)}function $(e,r){V++,re[V]=e.current,e.current=r}var H=O(null),X=O(null),xe=O(null),q=O(null);function ge(e,r){switch($(xe,r),$(X,e),$(H,null),r.nodeType){case 9:case 11:e=(e=r.documentElement)&&(e=e.namespaceURI)?Bb(e):0;break;default:if(e=r.tagName,r=r.namespaceURI)r=Bb(r),e=$b(r,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(H),$(H,e)}function me(){D(H),D(X),D(xe)}function B(e){e.memoizedState!==null&&$(q,e);var r=H.current,i=$b(r,e.type);r!==i&&($(X,e),$(H,i))}function ie(e){X.current===e&&(D(H),D(X)),q.current===e&&(D(q),yl._currentValue=ae)}var we,Ce;function ze(e){if(we===void 0)try{throw Error()}catch(i){var r=i.stack.trim().match(/\n( *(at )?)/);we=r&&r[1]||"",Ce=-1G||(e.current=ae[G],ae[G]=null,G--)}function B(e,r){G++,ae[G]=e.current,e.current=r}var V=O(null),Z=O(null),be=O(null),K=O(null);function ge(e,r){switch(B(be,r),B(Z,e),B(V,null),r.nodeType){case 9:case 11:e=(e=r.documentElement)&&(e=e.namespaceURI)?Bv(e):0;break;default:if(e=r.tagName,r=r.namespaceURI)r=Bv(r),e=$v(r,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(V),B(V,e)}function me(){D(V),D(Z),D(be)}function $(e){e.memoizedState!==null&&B(K,e);var r=V.current,i=$v(r,e.type);r!==i&&(B(Z,e),B(V,i))}function ie(e){Z.current===e&&(D(V),D(Z)),K.current===e&&(D(K),yl._currentValue=oe)}var ye,Se;function Be(e){if(ye===void 0)try{throw Error()}catch(i){var r=i.stack.trim().match(/\n( *(at )?)/);ye=r&&r[1]||"",Se=-1)":-1h||z[u]!==J[h]){var le=` -`+z[u].replace(" at new "," at ");return e.displayName&&le.includes("")&&(le=le.replace("",e.displayName)),le}while(1<=u&&0<=h);break}}}finally{Ke=!1,Error.prepareStackTrace=i}return(i=e?e.displayName||e.name:"")?ze(i):""}function Pt(e,r){switch(e.tag){case 26:case 27:case 5:return ze(e.type);case 16:return ze("Lazy");case 13:return e.child!==r&&r!==null?ze("Suspense Fallback"):ze("Suspense");case 19:return ze("SuspenseList");case 0:case 15:return ft(e.type,!1);case 11:return ft(e.type.render,!1);case 1:return ft(e.type,!0);case 31:return ze("Activity");default:return""}}function gn(e){try{var r="",i=null;do r+=Pt(e,i),i=e,e=e.return;while(e);return r}catch(u){return` +`+z[u].replace(" at new "," at ");return e.displayName&&le.includes("")&&(le=le.replace("",e.displayName)),le}while(1<=u&&0<=h);break}}}finally{Ke=!1,Error.prepareStackTrace=i}return(i=e?e.displayName||e.name:"")?Be(i):""}function qt(e,r){switch(e.tag){case 26:case 27:case 5:return Be(e.type);case 16:return Be("Lazy");case 13:return e.child!==r&&r!==null?Be("Suspense Fallback"):Be("Suspense");case 19:return Be("SuspenseList");case 0:case 15:return We(e.type,!1);case 11:return We(e.type.render,!1);case 1:return We(e.type,!0);case 31:return Be("Activity");default:return""}}function vn(e){try{var r="",i=null;do r+=qt(e,i),i=e,e=e.return;while(e);return r}catch(u){return` Error generating stack: `+u.message+` -`+u.stack}}var Yr=Object.prototype.hasOwnProperty,_n=t.unstable_scheduleCallback,wn=t.unstable_cancelCallback,Xn=t.unstable_shouldYield,Zn=t.unstable_requestPaint,It=t.unstable_now,po=t.unstable_getCurrentPriorityLevel,nn=t.unstable_ImmediatePriority,Dn=t.unstable_UserBlockingPriority,Da=t.unstable_NormalPriority,ho=t.unstable_LowPriority,Qn=t.unstable_IdlePriority,Es=t.log,qr=t.unstable_setDisableYieldValue,gr=null,Tt=null;function On(e){if(typeof Es=="function"&&qr(e),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode(gr,e)}catch{}}var Mt=Math.clz32?Math.clz32:go,Oi=Math.log,Li=Math.LN2;function go(e){return e>>>=0,e===0?32:31-(Oi(e)/Li|0)|0}var Kr=256,Oa=262144,Mr=4194304;function Kt(e){var r=e&42;if(r!==0)return r;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function La(e,r,i){var u=e.pendingLanes;if(u===0)return 0;var h=0,x=e.suspendedLanes,j=e.pingedLanes;e=e.warmLanes;var A=u&134217727;return A!==0?(u=A&~x,u!==0?h=Kt(u):(j&=A,j!==0?h=Kt(j):i||(i=A&~e,i!==0&&(h=Kt(i))))):(A=u&~x,A!==0?h=Kt(A):j!==0?h=Kt(j):i||(i=u&~e,i!==0&&(h=Kt(i)))),h===0?0:r!==0&&r!==h&&(r&x)===0&&(x=h&-h,i=r&-r,x>=i||x===32&&(i&4194048)!==0)?r:h}function Oe(e,r){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&r)===0}function tt(e,r){switch(e){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function it(){var e=Mr;return Mr<<=1,(Mr&62914560)===0&&(Mr=4194304),e}function rn(e){for(var r=[],i=0;31>i;i++)r.push(e);return r}function Ft(e,r){e.pendingLanes|=r,r!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Rt(e,r,i,u,h,x){var j=e.pendingLanes;e.pendingLanes=i,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=i,e.entangledLanes&=i,e.errorRecoveryDisabledLanes&=i,e.shellSuspendCounter=0;var A=e.entanglements,z=e.expirationTimes,J=e.hiddenUpdates;for(i=j&~i;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var h5=/[\n"\\]/g;function tr(e){return e.replace(h5,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function af(e,r,i,u,h,x,j,A){e.name="",j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"?e.type=j:e.removeAttribute("type"),r!=null?j==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+er(r)):e.value!==""+er(r)&&(e.value=""+er(r)):j!=="submit"&&j!=="reset"||e.removeAttribute("value"),r!=null?sf(e,j,er(r)):i!=null?sf(e,j,er(i)):u!=null&&e.removeAttribute("value"),h==null&&x!=null&&(e.defaultChecked=!!x),h!=null&&(e.checked=h&&typeof h!="function"&&typeof h!="symbol"),A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.name=""+er(A):e.removeAttribute("name")}function Ox(e,r,i,u,h,x,j,A){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(e.type=x),r!=null||i!=null){if(!(x!=="submit"&&x!=="reset"||r!=null)){rf(e);return}i=i!=null?""+er(i):"",r=r!=null?""+er(r):i,A||r===e.value||(e.value=r),e.defaultValue=r}u=u??h,u=typeof u!="function"&&typeof u!="symbol"&&!!u,e.checked=A?e.checked:!!u,e.defaultChecked=!!u,j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"&&(e.name=j),rf(e)}function sf(e,r,i){r==="number"&&xc(e.ownerDocument)===e||e.defaultValue===""+i||(e.defaultValue=""+i)}function wo(e,r,i,u){if(e=e.options,r){r={};for(var h=0;h"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),df=!1;if(Jr)try{var Ii={};Object.defineProperty(Ii,"passive",{get:function(){df=!0}}),window.addEventListener("test",Ii,Ii),window.removeEventListener("test",Ii,Ii)}catch{df=!1}var za=null,ff=null,bc=null;function $x(){if(bc)return bc;var e,r=ff,i=r.length,u,h="value"in za?za.value:za.textContent,x=h.length;for(e=0;e=$i),qx=" ",Kx=!1;function Wx(e,r){switch(e){case"keyup":return G5.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xx(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var No=!1;function F5(e,r){switch(e){case"compositionend":return Xx(r);case"keypress":return r.which!==32?null:(Kx=!0,qx);case"textInput":return e=r.data,e===qx&&Kx?null:e;default:return null}}function Y5(e,r){if(No)return e==="compositionend"||!xf&&Wx(e,r)?(e=$x(),bc=ff=za=null,No=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:i,offset:r-e};e=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=a1(i)}}function o1(e,r){return e&&r?e===r?!0:e&&e.nodeType===3?!1:r&&r.nodeType===3?o1(e,r.parentNode):"contains"in e?e.contains(r):e.compareDocumentPosition?!!(e.compareDocumentPosition(r)&16):!1:!1}function i1(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var r=xc(e.document);r instanceof e.HTMLIFrameElement;){try{var i=typeof r.contentWindow.location.href=="string"}catch{i=!1}if(i)e=r.contentWindow;else break;r=xc(e.document)}return r}function yf(e){var r=e&&e.nodeName&&e.nodeName.toLowerCase();return r&&(r==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||r==="textarea"||e.contentEditable==="true")}var e4=Jr&&"documentMode"in document&&11>=document.documentMode,Eo=null,wf=null,Fi=null,jf=!1;function l1(e,r,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;jf||Eo==null||Eo!==xc(u)||(u=Eo,"selectionStart"in u&&yf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Fi&&Vi(Fi,u)||(Fi=u,u=fu(wf,"onSelect"),0>=j,h-=j,Ar=1<<32-Mt(r)+h|i<$e?(Xe=ke,ke=null):Xe=ke.sibling;var at=ee(F,ke,Q[$e],de);if(at===null){ke===null&&(ke=Xe);break}e&&ke&&at.alternate===null&&r(F,ke),U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at,ke=Xe}if($e===Q.length)return i(F,ke),Je&&ta(F,$e),Ae;if(ke===null){for(;$e$e?(Xe=ke,ke=null):Xe=ke.sibling;var as=ee(F,ke,at.value,de);if(as===null){ke===null&&(ke=Xe);break}e&&ke&&as.alternate===null&&r(F,ke),U=x(as,U,$e),rt===null?Ae=as:rt.sibling=as,rt=as,ke=Xe}if(at.done)return i(F,ke),Je&&ta(F,$e),Ae;if(ke===null){for(;!at.done;$e++,at=Q.next())at=he(F,at.value,de),at!==null&&(U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at);return Je&&ta(F,$e),Ae}for(ke=u(ke);!at.done;$e++,at=Q.next())at=ne(ke,F,$e,at.value,de),at!==null&&(e&&at.alternate!==null&&ke.delete(at.key===null?$e:at.key),U=x(at,U,$e),rt===null?Ae=at:rt.sibling=at,rt=at);return e&&ke.forEach(function(y3){return r(F,y3)}),Je&&ta(F,$e),Ae}function gt(F,U,Q,de){if(typeof Q=="object"&&Q!==null&&Q.type===S&&Q.key===null&&(Q=Q.props.children),typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case y:e:{for(var Ae=Q.key;U!==null;){if(U.key===Ae){if(Ae=Q.type,Ae===S){if(U.tag===7){i(F,U.sibling),de=h(U,Q.props.children),de.return=F,F=de;break e}}else if(U.elementType===Ae||typeof Ae=="object"&&Ae!==null&&Ae.$$typeof===te&&Ps(Ae)===U.type){i(F,U.sibling),de=h(U,Q.props),Zi(de,Q),de.return=F,F=de;break e}i(F,U);break}else r(F,U);U=U.sibling}Q.type===S?(de=_s(Q.props.children,F.mode,de,Q.key),de.return=F,F=de):(de=Mc(Q.type,Q.key,Q.props,null,F.mode,de),Zi(de,Q),de.return=F,F=de)}return j(F);case C:e:{for(Ae=Q.key;U!==null;){if(U.key===Ae)if(U.tag===4&&U.stateNode.containerInfo===Q.containerInfo&&U.stateNode.implementation===Q.implementation){i(F,U.sibling),de=h(U,Q.children||[]),de.return=F,F=de;break e}else{i(F,U);break}else r(F,U);U=U.sibling}de=Mf(Q,F.mode,de),de.return=F,F=de}return j(F);case te:return Q=Ps(Q),gt(F,U,Q,de)}if(se(Q))return Ee(F,U,Q,de);if(Y(Q)){if(Ae=Y(Q),typeof Ae!="function")throw Error(o(150));return Q=Ae.call(Q),Le(F,U,Q,de)}if(typeof Q.then=="function")return gt(F,U,zc(Q),de);if(Q.$$typeof===T)return gt(F,U,_c(F,Q),de);Pc(F,Q)}return typeof Q=="string"&&Q!==""||typeof Q=="number"||typeof Q=="bigint"?(Q=""+Q,U!==null&&U.tag===6?(i(F,U.sibling),de=h(U,Q),de.return=F,F=de):(i(F,U),de=Tf(Q,F.mode,de),de.return=F,F=de),j(F)):i(F,U)}return function(F,U,Q,de){try{Xi=0;var Ae=gt(F,U,Q,de);return Po=null,Ae}catch(ke){if(ke===zo||ke===Oc)throw ke;var rt=Pn(29,ke,null,F.mode);return rt.lanes=de,rt.return=F,rt}finally{}}}var Us=A1(!0),_1=A1(!1),$a=!1;function $f(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hf(e,r){e=e.updateQueue,r.updateQueue===e&&(r.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ha(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,r,i){var u=e.updateQueue;if(u===null)return null;if(u=u.shared,(ot&2)!==0){var h=u.pending;return h===null?r.next=r:(r.next=h.next,h.next=r),u.pending=r,r=Tc(e),h1(e,null,i),r}return kc(e,u,r,i),Tc(e)}function Qi(e,r,i){if(r=r.updateQueue,r!==null&&(r=r.shared,(i&4194048)!==0)){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,fn(e,i)}}function Gf(e,r){var i=e.updateQueue,u=e.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var h=null,x=null;if(i=i.firstBaseUpdate,i!==null){do{var j={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};x===null?h=x=j:x=x.next=j,i=i.next}while(i!==null);x===null?h=x=r:x=x.next=r}else h=x=r;i={baseState:u.baseState,firstBaseUpdate:h,lastBaseUpdate:x,shared:u.shared,callbacks:u.callbacks},e.updateQueue=i;return}e=i.lastBaseUpdate,e===null?i.firstBaseUpdate=r:e.next=r,i.lastBaseUpdate=r}var Vf=!1;function Ji(){if(Vf){var e=Lo;if(e!==null)throw e}}function el(e,r,i,u){Vf=!1;var h=e.updateQueue;$a=!1;var x=h.firstBaseUpdate,j=h.lastBaseUpdate,A=h.shared.pending;if(A!==null){h.shared.pending=null;var z=A,J=z.next;z.next=null,j===null?x=J:j.next=J,j=z;var le=e.alternate;le!==null&&(le=le.updateQueue,A=le.lastBaseUpdate,A!==j&&(A===null?le.firstBaseUpdate=J:A.next=J,le.lastBaseUpdate=z))}if(x!==null){var he=h.baseState;j=0,le=J=z=null,A=x;do{var ee=A.lane&-536870913,ne=ee!==A.lane;if(ne?(We&ee)===ee:(u&ee)===ee){ee!==0&&ee===Oo&&(Vf=!0),le!==null&&(le=le.next={lane:0,tag:A.tag,payload:A.payload,callback:null,next:null});e:{var Ee=e,Le=A;ee=r;var gt=i;switch(Le.tag){case 1:if(Ee=Le.payload,typeof Ee=="function"){he=Ee.call(gt,he,ee);break e}he=Ee;break e;case 3:Ee.flags=Ee.flags&-65537|128;case 0:if(Ee=Le.payload,ee=typeof Ee=="function"?Ee.call(gt,he,ee):Ee,ee==null)break e;he=b({},he,ee);break e;case 2:$a=!0}}ee=A.callback,ee!==null&&(e.flags|=64,ne&&(e.flags|=8192),ne=h.callbacks,ne===null?h.callbacks=[ee]:ne.push(ee))}else ne={lane:ee,tag:A.tag,payload:A.payload,callback:A.callback,next:null},le===null?(J=le=ne,z=he):le=le.next=ne,j|=ee;if(A=A.next,A===null){if(A=h.shared.pending,A===null)break;ne=A,A=ne.next,ne.next=null,h.lastBaseUpdate=ne,h.shared.pending=null}}while(!0);le===null&&(z=he),h.baseState=z,h.firstBaseUpdate=J,h.lastBaseUpdate=le,x===null&&(h.shared.lanes=0),Ka|=j,e.lanes=j,e.memoizedState=he}}function D1(e,r){if(typeof e!="function")throw Error(o(191,e));e.call(r)}function O1(e,r){var i=e.callbacks;if(i!==null)for(e.callbacks=null,e=0;ex?x:8;var j=P.T,A={};P.T=A,cm(e,!1,r,i);try{var z=h(),J=P.S;if(J!==null&&J(A,z),z!==null&&typeof z=="object"&&typeof z.then=="function"){var le=c4(z,u);rl(e,r,le,Hn(e))}else rl(e,r,u,Hn(e))}catch(he){rl(e,r,{then:function(){},status:"rejected",reason:he},Hn())}finally{Z.p=x,j!==null&&A.types!==null&&(j.types=A.types),P.T=j}}function h4(){}function im(e,r,i,u){if(e.tag!==5)throw Error(o(476));var h=fv(e).queue;dv(e,h,r,ae,i===null?h4:function(){return mv(e),i(u)})}function fv(e){var r=e.memoizedState;if(r!==null)return r;r={memoizedState:ae,baseState:ae,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:ae},next:null};var i={};return r.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:i},next:null},e.memoizedState=r,e=e.alternate,e!==null&&(e.memoizedState=r),r}function mv(e){var r=fv(e);r.next===null&&(r=e.alternate.memoizedState),rl(e,r.next.queue,{},Hn())}function lm(){return sn(yl)}function pv(){return zt().memoizedState}function hv(){return zt().memoizedState}function g4(e){for(var r=e.return;r!==null;){switch(r.tag){case 24:case 3:var i=Hn();e=Ha(i);var u=Ga(r,e,i);u!==null&&(kn(u,r,i),Qi(u,r,i)),r={cache:Pf()},e.payload=r;return}r=r.return}}function x4(e,r,i){var u=Hn();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},qc(e)?xv(r,i):(i=Ef(e,r,i,u),i!==null&&(kn(i,e,u),vv(i,r,u)))}function gv(e,r,i){var u=Hn();rl(e,r,i,u)}function rl(e,r,i,u){var h={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(qc(e))xv(r,h);else{var x=e.alternate;if(e.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var j=r.lastRenderedState,A=x(j,i);if(h.hasEagerState=!0,h.eagerState=A,zn(A,j))return kc(e,r,h,0),xt===null&&Ec(),!1}catch{}finally{}if(i=Ef(e,r,h,u),i!==null)return kn(i,e,u),vv(i,r,u),!0}return!1}function cm(e,r,i,u){if(u={lane:2,revertLane:$m(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},qc(e)){if(r)throw Error(o(479))}else r=Ef(e,i,u,2),r!==null&&kn(r,e,2)}function qc(e){var r=e.alternate;return e===Ue||r!==null&&r===Ue}function xv(e,r){Uo=Bc=!0;var i=e.pending;i===null?r.next=r:(r.next=i.next,i.next=r),e.pending=r}function vv(e,r,i){if((i&4194048)!==0){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,fn(e,i)}}var al={readContext:sn,use:Gc,useCallback:At,useContext:At,useEffect:At,useImperativeHandle:At,useLayoutEffect:At,useInsertionEffect:At,useMemo:At,useReducer:At,useRef:At,useState:At,useDebugValue:At,useDeferredValue:At,useTransition:At,useSyncExternalStore:At,useId:At,useHostTransitionStatus:At,useFormState:At,useActionState:At,useOptimistic:At,useMemoCache:At,useCacheRefresh:At};al.useEffectEvent=At;var bv={readContext:sn,use:Gc,useCallback:function(e,r){return vn().memoizedState=[e,r===void 0?null:r],e},useContext:sn,useEffect:nv,useImperativeHandle:function(e,r,i){i=i!=null?i.concat([e]):null,Fc(4194308,4,ov.bind(null,r,e),i)},useLayoutEffect:function(e,r){return Fc(4194308,4,e,r)},useInsertionEffect:function(e,r){Fc(4,2,e,r)},useMemo:function(e,r){var i=vn();r=r===void 0?null:r;var u=e();if(Bs){On(!0);try{e()}finally{On(!1)}}return i.memoizedState=[u,r],u},useReducer:function(e,r,i){var u=vn();if(i!==void 0){var h=i(r);if(Bs){On(!0);try{i(r)}finally{On(!1)}}}else h=r;return u.memoizedState=u.baseState=h,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:h},u.queue=e,e=e.dispatch=x4.bind(null,Ue,e),[u.memoizedState,e]},useRef:function(e){var r=vn();return e={current:e},r.memoizedState=e},useState:function(e){e=nm(e);var r=e.queue,i=gv.bind(null,Ue,r);return r.dispatch=i,[e.memoizedState,i]},useDebugValue:sm,useDeferredValue:function(e,r){var i=vn();return om(i,e,r)},useTransition:function(){var e=nm(!1);return e=dv.bind(null,Ue,e.queue,!0,!1),vn().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,r,i){var u=Ue,h=vn();if(Je){if(i===void 0)throw Error(o(407));i=i()}else{if(i=r(),xt===null)throw Error(o(349));(We&127)!==0||B1(u,r,i)}h.memoizedState=i;var x={value:i,getSnapshot:r};return h.queue=x,nv(H1.bind(null,u,x,e),[e]),u.flags|=2048,$o(9,{destroy:void 0},$1.bind(null,u,x,i,r),null),i},useId:function(){var e=vn(),r=xt.identifierPrefix;if(Je){var i=_r,u=Ar;i=(u&~(1<<32-Mt(u)-1)).toString(32)+i,r="_"+r+"R_"+i,i=$c++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof u.is=="string"?j.createElement("select",{is:u.is}):j.createElement("select"),u.multiple?x.multiple=!0:u.size&&(x.size=u.size);break;default:x=typeof u.is=="string"?j.createElement(h,{is:u.is}):j.createElement(h)}}x[ye]=r,x[Re]=u;e:for(j=r.child;j!==null;){if(j.tag===5||j.tag===6)x.appendChild(j.stateNode);else if(j.tag!==4&&j.tag!==27&&j.child!==null){j.child.return=j,j=j.child;continue}if(j===r)break e;for(;j.sibling===null;){if(j.return===null||j.return===r)break e;j=j.return}j.sibling.return=j.return,j=j.sibling}r.stateNode=x;e:switch(ln(x,h,u),h){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ia(r)}}return wt(r),Cm(r,r.type,e===null?null:e.memoizedProps,r.pendingProps,i),null;case 6:if(e&&r.stateNode!=null)e.memoizedProps!==u&&ia(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(e=xe.current,_o(r)){if(e=r.stateNode,i=r.memoizedProps,u=null,h=an,h!==null)switch(h.tag){case 27:case 5:u=h.memoizedProps}e[ye]=r,e=!!(e.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||Ib(e.nodeValue,i)),e||Ua(r,!0)}else e=mu(e).createTextNode(u),e[ye]=r,r.stateNode=e}return wt(r),null;case 31:if(i=r.memoizedState,e===null||e.memoizedState!==null){if(u=_o(r),i!==null){if(e===null){if(!u)throw Error(o(318));if(e=r.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[ye]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;wt(r),e=!1}else i=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),e=!0;if(!e)return r.flags&256?(Un(r),r):(Un(r),null);if((r.flags&128)!==0)throw Error(o(558))}return wt(r),null;case 13:if(u=r.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(h=_o(r),u!==null&&u.dehydrated!==null){if(e===null){if(!h)throw Error(o(318));if(h=r.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(o(317));h[ye]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;wt(r),h=!1}else h=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=h),h=!0;if(!h)return r.flags&256?(Un(r),r):(Un(r),null)}return Un(r),(r.flags&128)!==0?(r.lanes=i,r):(i=u!==null,e=e!==null&&e.memoizedState!==null,i&&(u=r.child,h=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(h=u.alternate.memoizedState.cachePool.pool),x=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(x=u.memoizedState.cachePool.pool),x!==h&&(u.flags|=2048)),i!==e&&i&&(r.child.flags|=8192),Qc(r,r.updateQueue),wt(r),null);case 4:return me(),e===null&&Fm(r.stateNode.containerInfo),wt(r),null;case 10:return ra(r.type),wt(r),null;case 19:if(D(Lt),u=r.memoizedState,u===null)return wt(r),null;if(h=(r.flags&128)!==0,x=u.rendering,x===null)if(h)ol(u,!1);else{if(_t!==0||e!==null&&(e.flags&128)!==0)for(e=r.child;e!==null;){if(x=Uc(e),x!==null){for(r.flags|=128,ol(u,!1),e=x.updateQueue,r.updateQueue=e,Qc(r,e),r.subtreeFlags=0,e=i,i=r.child;i!==null;)g1(i,e),i=i.sibling;return $(Lt,Lt.current&1|2),Je&&ta(r,u.treeForkCount),r.child}e=e.sibling}u.tail!==null&&It()>ru&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304)}else{if(!h)if(e=Uc(x),e!==null){if(r.flags|=128,h=!0,e=e.updateQueue,r.updateQueue=e,Qc(r,e),ol(u,!0),u.tail===null&&u.tailMode==="hidden"&&!x.alternate&&!Je)return wt(r),null}else 2*It()-u.renderingStartTime>ru&&i!==536870912&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304);u.isBackwards?(x.sibling=r.child,r.child=x):(e=u.last,e!==null?e.sibling=x:r.child=x,u.last=x)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=It(),e.sibling=null,i=Lt.current,$(Lt,h?i&1|2:i&1),Je&&ta(r,u.treeForkCount),e):(wt(r),null);case 22:case 23:return Un(r),Yf(),u=r.memoizedState!==null,e!==null?e.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(i&536870912)!==0&&(r.flags&128)===0&&(wt(r),r.subtreeFlags&6&&(r.flags|=8192)):wt(r),i=r.updateQueue,i!==null&&Qc(r,i.retryQueue),i=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(i=e.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==i&&(r.flags|=2048),e!==null&&D(zs),null;case 24:return i=null,e!==null&&(i=e.memoizedState.cache),r.memoizedState.cache!==i&&(r.flags|=2048),ra(Ut),wt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function j4(e,r){switch(Af(r),r.tag){case 1:return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return ra(Ut),me(),e=r.flags,(e&65536)!==0&&(e&128)===0?(r.flags=e&-65537|128,r):null;case 26:case 27:case 5:return ie(r),null;case 31:if(r.memoizedState!==null){if(Un(r),r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 13:if(Un(r),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return D(Lt),null;case 4:return me(),null;case 10:return ra(r.type),null;case 22:case 23:return Un(r),Yf(),e!==null&&D(zs),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 24:return ra(Ut),null;case 25:return null;default:return null}}function Gv(e,r){switch(Af(r),r.tag){case 3:ra(Ut),me();break;case 26:case 27:case 5:ie(r);break;case 4:me();break;case 31:r.memoizedState!==null&&Un(r);break;case 13:Un(r);break;case 19:D(Lt);break;case 10:ra(r.type);break;case 22:case 23:Un(r),Yf(),e!==null&&D(zs);break;case 24:ra(Ut)}}function il(e,r){try{var i=r.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var h=u.next;i=h;do{if((i.tag&e)===e){u=void 0;var x=i.create,j=i.inst;u=x(),j.destroy=u}i=i.next}while(i!==h)}}catch(A){ct(r,r.return,A)}}function Ya(e,r,i){try{var u=r.updateQueue,h=u!==null?u.lastEffect:null;if(h!==null){var x=h.next;u=x;do{if((u.tag&e)===e){var j=u.inst,A=j.destroy;if(A!==void 0){j.destroy=void 0,h=r;var z=i,J=A;try{J()}catch(le){ct(h,z,le)}}}u=u.next}while(u!==x)}}catch(le){ct(r,r.return,le)}}function Vv(e){var r=e.updateQueue;if(r!==null){var i=e.stateNode;try{O1(r,i)}catch(u){ct(e,e.return,u)}}}function Fv(e,r,i){i.props=$s(e.type,e.memoizedProps),i.state=e.memoizedState;try{i.componentWillUnmount()}catch(u){ct(e,r,u)}}function ll(e,r){try{var i=e.ref;if(i!==null){switch(e.tag){case 26:case 27:case 5:var u=e.stateNode;break;case 30:u=e.stateNode;break;default:u=e.stateNode}typeof i=="function"?e.refCleanup=i(u):i.current=u}}catch(h){ct(e,r,h)}}function Dr(e,r){var i=e.ref,u=e.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(h){ct(e,r,h)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(h){ct(e,r,h)}else i.current=null}function Yv(e){var r=e.type,i=e.memoizedProps,u=e.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break e;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(h){ct(e,e.return,h)}}function Sm(e,r,i){try{var u=e.stateNode;V4(u,e.type,i,r),u[Re]=r}catch(h){ct(e,e.return,h)}}function qv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Ja(e.type)||e.tag===4}function Nm(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||qv(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.tag===27&&Ja(e.type)||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 Em(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(e,r):(r=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,r.appendChild(e),i=i._reactRootContainer,i!=null||r.onclick!==null||(r.onclick=Qr));else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode,r=null),e=e.child,e!==null))for(Em(e,r,i),e=e.sibling;e!==null;)Em(e,r,i),e=e.sibling}function Jc(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?i.insertBefore(e,r):i.appendChild(e);else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode),e=e.child,e!==null))for(Jc(e,r,i),e=e.sibling;e!==null;)Jc(e,r,i),e=e.sibling}function Kv(e){var r=e.stateNode,i=e.memoizedProps;try{for(var u=e.type,h=r.attributes;h.length;)r.removeAttributeNode(h[0]);ln(r,u,i),r[ye]=e,r[Re]=i}catch(x){ct(e,e.return,x)}}var la=!1,Ht=!1,km=!1,Wv=typeof WeakSet=="function"?WeakSet:Set,Xt=null;function C4(e,r){if(e=e.containerInfo,Km=yu,e=i1(e),yf(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else e:{i=(i=e.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var h=u.anchorOffset,x=u.focusNode;u=u.focusOffset;try{i.nodeType,x.nodeType}catch{i=null;break e}var j=0,A=-1,z=-1,J=0,le=0,he=e,ee=null;t:for(;;){for(var ne;he!==i||h!==0&&he.nodeType!==3||(A=j+h),he!==x||u!==0&&he.nodeType!==3||(z=j+u),he.nodeType===3&&(j+=he.nodeValue.length),(ne=he.firstChild)!==null;)ee=he,he=ne;for(;;){if(he===e)break t;if(ee===i&&++J===h&&(A=j),ee===x&&++le===u&&(z=j),(ne=he.nextSibling)!==null)break;he=ee,ee=he.parentNode}he=ne}i=A===-1||z===-1?null:{start:A,end:z}}else i=null}i=i||{start:0,end:0}}else i=null;for(Wm={focusedElem:e,selectionRange:i},yu=!1,Xt=r;Xt!==null;)if(r=Xt,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,Xt=e;else for(;Xt!==null;){switch(r=Xt,x=r.alternate,e=r.flags,r.tag){case 0:if((e&4)!==0&&(e=r.updateQueue,e=e!==null?e.events:null,e!==null))for(i=0;i title"))),ln(x,u,i),x[ye]=e,Wt(x),u=x;break e;case"link":var j=ty("link","href",h).get(u+(i.href||""));if(j){for(var A=0;Agt&&(j=gt,gt=Le,Le=j);var F=s1(A,Le),U=s1(A,gt);if(F&&U&&(ne.rangeCount!==1||ne.anchorNode!==F.node||ne.anchorOffset!==F.offset||ne.focusNode!==U.node||ne.focusOffset!==U.offset)){var Q=he.createRange();Q.setStart(F.node,F.offset),ne.removeAllRanges(),Le>gt?(ne.addRange(Q),ne.extend(U.node,U.offset)):(Q.setEnd(U.node,U.offset),ne.addRange(Q))}}}}for(he=[],ne=A;ne=ne.parentNode;)ne.nodeType===1&&he.push({element:ne,left:ne.scrollLeft,top:ne.scrollTop});for(typeof A.focus=="function"&&A.focus(),A=0;Ai?32:i,P.T=null,i=Om,Om=null;var x=Xa,j=ma;if(Yt=0,Yo=Xa=null,ma=0,(ot&6)!==0)throw Error(o(331));var A=ot;if(ot|=4,ob(x.current),rb(x,x.current,j,i),ot=A,pl(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot(gr,x)}catch{}return!0}finally{Z.p=h,P.T=u,Sb(e,r)}}function Eb(e,r,i){r=rr(i,r),r=mm(e.stateNode,r,2),e=Ga(e,r,2),e!==null&&(Ft(e,2),Or(e))}function ct(e,r,i){if(e.tag===3)Eb(e,e,i);else for(;r!==null;){if(r.tag===3){Eb(r,e,i);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Wa===null||!Wa.has(u))){e=rr(i,e),i=kv(2),u=Ga(r,i,2),u!==null&&(Tv(i,u,r,e),Ft(u,2),Or(u));break}}r=r.return}}function Im(e,r,i){var u=e.pingCache;if(u===null){u=e.pingCache=new E4;var h=new Set;u.set(r,h)}else h=u.get(r),h===void 0&&(h=new Set,u.set(r,h));h.has(i)||(Rm=!0,h.add(i),e=A4.bind(null,e,r,i),r.then(e,e))}function A4(e,r,i){var u=e.pingCache;u!==null&&u.delete(r),e.pingedLanes|=e.suspendedLanes&i,e.warmLanes&=~i,xt===e&&(We&i)===i&&(_t===4||_t===3&&(We&62914560)===We&&300>It()-nu?(ot&2)===0&&qo(e,0):Am|=i,Fo===We&&(Fo=0)),Or(e)}function kb(e,r){r===0&&(r=it()),e=As(e,r),e!==null&&(Ft(e,r),Or(e))}function _4(e){var r=e.memoizedState,i=0;r!==null&&(i=r.retryLane),kb(e,i)}function D4(e,r){var i=0;switch(e.tag){case 31:case 13:var u=e.stateNode,h=e.memoizedState;h!==null&&(i=h.retryLane);break;case 19:u=e.stateNode;break;case 22:u=e.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),kb(e,i)}function O4(e,r){return _n(e,r)}var cu=null,Wo=null,Um=!1,uu=!1,Bm=!1,Qa=0;function Or(e){e!==Wo&&e.next===null&&(Wo===null?cu=Wo=e:Wo=Wo.next=e),uu=!0,Um||(Um=!0,z4())}function pl(e,r){if(!Bm&&uu){Bm=!0;do for(var i=!1,u=cu;u!==null;){if(e!==0){var h=u.pendingLanes;if(h===0)var x=0;else{var j=u.suspendedLanes,A=u.pingedLanes;x=(1<<31-Mt(42|e)+1)-1,x&=h&~(j&~A),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(i=!0,Ab(u,x))}else x=We,x=La(u,u===xt?x:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(x&3)===0||Oe(u,x)||(i=!0,Ab(u,x));u=u.next}while(i);Bm=!1}}function L4(){Tb()}function Tb(){uu=Um=!1;var e=0;Qa!==0&&Y4()&&(e=Qa);for(var r=It(),i=null,u=cu;u!==null;){var h=u.next,x=Mb(u,r);x===0?(u.next=null,i===null?cu=h:i.next=h,h===null&&(Wo=i)):(i=u,(e!==0||(x&3)!==0)&&(uu=!0)),u=h}Yt!==0&&Yt!==5||pl(e),Qa!==0&&(Qa=0)}function Mb(e,r){for(var i=e.suspendedLanes,u=e.pingedLanes,h=e.expirationTimes,x=e.pendingLanes&-62914561;0A)break;var le=z.transferSize,he=z.initiatorType;le&&Ub(he)&&(z=z.responseEnd,j+=le*(z"u"?null:document;function Zb(e,r,i){var u=Xo;if(u&&typeof r=="string"&&r){var h=tr(r);h='link[rel="'+e+'"][href="'+h+'"]',typeof i=="string"&&(h+='[crossorigin="'+i+'"]'),Xb.has(h)||(Xb.add(h),e={rel:e,crossOrigin:i,href:r},u.querySelector(h)===null&&(r=u.createElement("link"),ln(r,"link",e),Wt(r),u.head.appendChild(r)))}}function t3(e){pa.D(e),Zb("dns-prefetch",e,null)}function n3(e,r){pa.C(e,r),Zb("preconnect",e,r)}function r3(e,r,i){pa.L(e,r,i);var u=Xo;if(u&&e&&r){var h='link[rel="preload"][as="'+tr(r)+'"]';r==="image"&&i&&i.imageSrcSet?(h+='[imagesrcset="'+tr(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(h+='[imagesizes="'+tr(i.imageSizes)+'"]')):h+='[href="'+tr(e)+'"]';var x=h;switch(r){case"style":x=Zo(e);break;case"script":x=Qo(e)}cr.has(x)||(e=b({rel:"preload",href:r==="image"&&i&&i.imageSrcSet?void 0:e,as:r},i),cr.set(x,e),u.querySelector(h)!==null||r==="style"&&u.querySelector(vl(x))||r==="script"&&u.querySelector(bl(x))||(r=u.createElement("link"),ln(r,"link",e),Wt(r),u.head.appendChild(r)))}}function a3(e,r){pa.m(e,r);var i=Xo;if(i&&e){var u=r&&typeof r.as=="string"?r.as:"script",h='link[rel="modulepreload"][as="'+tr(u)+'"][href="'+tr(e)+'"]',x=h;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=Qo(e)}if(!cr.has(x)&&(e=b({rel:"modulepreload",href:e},r),cr.set(x,e),i.querySelector(h)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(bl(x)))return}u=i.createElement("link"),ln(u,"link",e),Wt(u),i.head.appendChild(u)}}}function s3(e,r,i){pa.S(e,r,i);var u=Xo;if(u&&e){var h=bo(u).hoistableStyles,x=Zo(e);r=r||"default";var j=h.get(x);if(!j){var A={loading:0,preload:null};if(j=u.querySelector(vl(x)))A.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":r},i),(i=cr.get(x))&&np(e,i);var z=j=u.createElement("link");Wt(z),ln(z,"link",e),z._p=new Promise(function(J,le){z.onload=J,z.onerror=le}),z.addEventListener("load",function(){A.loading|=1}),z.addEventListener("error",function(){A.loading|=2}),A.loading|=4,hu(j,r,u)}j={type:"stylesheet",instance:j,count:1,state:A},h.set(x,j)}}}function o3(e,r){pa.X(e,r);var i=Xo;if(i&&e){var u=bo(i).hoistableScripts,h=Qo(e),x=u.get(h);x||(x=i.querySelector(bl(h)),x||(e=b({src:e,async:!0},r),(r=cr.get(h))&&rp(e,r),x=i.createElement("script"),Wt(x),ln(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function i3(e,r){pa.M(e,r);var i=Xo;if(i&&e){var u=bo(i).hoistableScripts,h=Qo(e),x=u.get(h);x||(x=i.querySelector(bl(h)),x||(e=b({src:e,async:!0,type:"module"},r),(r=cr.get(h))&&rp(e,r),x=i.createElement("script"),Wt(x),ln(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function Qb(e,r,i,u){var h=(h=xe.current)?pu(h):null;if(!h)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(r=Zo(i.href),i=bo(h).hoistableStyles,u=i.get(r),u||(u={type:"style",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){e=Zo(i.href);var x=bo(h).hoistableStyles,j=x.get(e);if(j||(h=h.ownerDocument||h,j={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(e,j),(x=h.querySelector(vl(e)))&&!x._p&&(j.instance=x,j.state.loading=5),cr.has(e)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},cr.set(e,i),x||l3(h,e,i,j.state))),r&&u===null)throw Error(o(528,""));return j}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=i.async,i=i.src,typeof i=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Qo(i),i=bo(h).hoistableScripts,u=i.get(r),u||(u={type:"script",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Zo(e){return'href="'+tr(e)+'"'}function vl(e){return'link[rel="stylesheet"]['+e+"]"}function Jb(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function l3(e,r,i,u){e.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=e.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),ln(r,"link",i),Wt(r),e.head.appendChild(r))}function Qo(e){return'[src="'+tr(e)+'"]'}function bl(e){return"script[async]"+e}function ey(e,r,i){if(r.count++,r.instance===null)switch(r.type){case"style":var u=e.querySelector('style[data-href~="'+tr(i.href)+'"]');if(u)return r.instance=u,Wt(u),u;var h=b({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(e.ownerDocument||e).createElement("style"),Wt(u),ln(u,"style",h),hu(u,i.precedence,e),r.instance=u;case"stylesheet":h=Zo(i.href);var x=e.querySelector(vl(h));if(x)return r.state.loading|=4,r.instance=x,Wt(x),x;u=Jb(i),(h=cr.get(h))&&np(u,h),x=(e.ownerDocument||e).createElement("link"),Wt(x);var j=x;return j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),ln(x,"link",u),r.state.loading|=4,hu(x,i.precedence,e),r.instance=x;case"script":return x=Qo(i.src),(h=e.querySelector(bl(x)))?(r.instance=h,Wt(h),h):(u=i,(h=cr.get(x))&&(u=b({},i),rp(u,h)),e=e.ownerDocument||e,h=e.createElement("script"),Wt(h),ln(h,"link",u),e.head.appendChild(h),r.instance=h);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,hu(u,i.precedence,e));return r.instance}function hu(e,r,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),h=u.length?u[u.length-1]:null,x=h,j=0;j title"):null)}function c3(e,r,i){if(i===1||r.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return e=r.disabled,typeof r.precedence=="string"&&e==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function ry(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function u3(e,r,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var h=Zo(u.href),x=r.querySelector(vl(h));if(x){r=x._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(e.count++,e=xu.bind(e),r.then(e,e)),i.state.loading|=4,i.instance=x,Wt(x);return}x=r.ownerDocument||r,u=Jb(u),(h=cr.get(h))&&np(u,h),x=x.createElement("link"),Wt(x);var j=x;j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),ln(x,"link",u),i.instance=x}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(i,r),(r=i.state.preload)&&(i.state.loading&3)===0&&(e.count++,i=xu.bind(e),r.addEventListener("load",i),r.addEventListener("error",i))}}var ap=0;function d3(e,r){return e.stylesheets&&e.count===0&&bu(e,e.stylesheets),0ap?50:800)+r);return e.unsuspend=i,function(){e.unsuspend=null,clearTimeout(u),clearTimeout(h)}}:null}function xu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)bu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var vu=null;function bu(e,r){e.stylesheets=null,e.unsuspend!==null&&(e.count++,vu=new Map,r.forEach(f3,e),vu=null,xu.call(e))}function f3(e,r){if(!(r.state.loading&4)){var i=vu.get(e);if(i)var u=i.get(null);else{i=new Map,vu.set(e,i);for(var h=e.querySelectorAll("link[data-precedence],style[data-precedence]"),x=0;x"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),pp.exports=R3(),pp.exports}var _3=A3();/** +`+u.stack}}var Xn=Object.prototype.hasOwnProperty,br=t.unstable_scheduleCallback,yn=t.unstable_cancelCallback,wn=t.unstable_shouldYield,Zn=t.unstable_requestPaint,Kt=t.unstable_now,po=t.unstable_getCurrentPriorityLevel,Pt=t.unstable_ImmediatePriority,Qn=t.unstable_UserBlockingPriority,Da=t.unstable_NormalPriority,Es=t.unstable_LowPriority,qr=t.unstable_IdlePriority,ho=t.log,Kr=t.unstable_setDisableYieldValue,Dn=null,yt=null;function On(e){if(typeof ho=="function"&&Kr(e),yt&&typeof yt.setStrictMode=="function")try{yt.setStrictMode(Dn,e)}catch{}}var Rt=Math.clz32?Math.clz32:go,Ai=Math.log,_i=Math.LN2;function go(e){return e>>>=0,e===0?32:31-(Ai(e)/_i|0)|0}var Wr=256,Oa=262144,Ar=4194304;function Wt(e){var r=e&42;if(r!==0)return r;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function La(e,r,i){var u=e.pendingLanes;if(u===0)return 0;var h=0,x=e.suspendedLanes,j=e.pingedLanes;e=e.warmLanes;var A=u&134217727;return A!==0?(u=A&~x,u!==0?h=Wt(u):(j&=A,j!==0?h=Wt(j):i||(i=A&~e,i!==0&&(h=Wt(i))))):(A=u&~x,A!==0?h=Wt(A):j!==0?h=Wt(j):i||(i=u&~e,i!==0&&(h=Wt(i)))),h===0?0:r!==0&&r!==h&&(r&x)===0&&(x=h&-h,i=r&-r,x>=i||x===32&&(i&4194048)!==0)?r:h}function De(e,r){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&r)===0}function rt(e,r){switch(e){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function lt(){var e=Ar;return Ar<<=1,(Ar&62914560)===0&&(Ar=4194304),e}function rn(e){for(var r=[],i=0;31>i;i++)r.push(e);return r}function It(e,r){e.pendingLanes|=r,r!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Jn(e,r,i,u,h,x){var j=e.pendingLanes;e.pendingLanes=i,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=i,e.entangledLanes&=i,e.errorRecoveryDisabledLanes&=i,e.shellSuspendCounter=0;var A=e.entanglements,z=e.expirationTimes,J=e.hiddenUpdates;for(i=j&~i;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var h5=/[\n"\\]/g;function rr(e){return e.replace(h5,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function af(e,r,i,u,h,x,j,A){e.name="",j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"?e.type=j:e.removeAttribute("type"),r!=null?j==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+nr(r)):e.value!==""+nr(r)&&(e.value=""+nr(r)):j!=="submit"&&j!=="reset"||e.removeAttribute("value"),r!=null?sf(e,j,nr(r)):i!=null?sf(e,j,nr(i)):u!=null&&e.removeAttribute("value"),h==null&&x!=null&&(e.defaultChecked=!!x),h!=null&&(e.checked=h&&typeof h!="function"&&typeof h!="symbol"),A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.name=""+nr(A):e.removeAttribute("name")}function Ox(e,r,i,u,h,x,j,A){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(e.type=x),r!=null||i!=null){if(!(x!=="submit"&&x!=="reset"||r!=null)){rf(e);return}i=i!=null?""+nr(i):"",r=r!=null?""+nr(r):i,A||r===e.value||(e.value=r),e.defaultValue=r}u=u??h,u=typeof u!="function"&&typeof u!="symbol"&&!!u,e.checked=A?e.checked:!!u,e.defaultChecked=!!u,j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"&&(e.name=j),rf(e)}function sf(e,r,i){r==="number"&&xc(e.ownerDocument)===e||e.defaultValue===""+i||(e.defaultValue=""+i)}function bo(e,r,i,u){if(e=e.options,r){r={};for(var h=0;h"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),df=!1;if(Jr)try{var Ii={};Object.defineProperty(Ii,"passive",{get:function(){df=!0}}),window.addEventListener("test",Ii,Ii),window.removeEventListener("test",Ii,Ii)}catch{df=!1}var za=null,ff=null,vc=null;function $x(){if(vc)return vc;var e,r=ff,i=r.length,u,h="value"in za?za.value:za.textContent,x=h.length;for(e=0;e=$i),qx=" ",Kx=!1;function Wx(e,r){switch(e){case"keyup":return G5.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xx(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var jo=!1;function F5(e,r){switch(e){case"compositionend":return Xx(r);case"keypress":return r.which!==32?null:(Kx=!0,qx);case"textInput":return e=r.data,e===qx&&Kx?null:e;default:return null}}function Y5(e,r){if(jo)return e==="compositionend"||!xf&&Wx(e,r)?(e=$x(),vc=ff=za=null,jo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:i,offset:r-e};e=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=a1(i)}}function o1(e,r){return e&&r?e===r?!0:e&&e.nodeType===3?!1:r&&r.nodeType===3?o1(e,r.parentNode):"contains"in e?e.contains(r):e.compareDocumentPosition?!!(e.compareDocumentPosition(r)&16):!1:!1}function i1(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var r=xc(e.document);r instanceof e.HTMLIFrameElement;){try{var i=typeof r.contentWindow.location.href=="string"}catch{i=!1}if(i)e=r.contentWindow;else break;r=xc(e.document)}return r}function yf(e){var r=e&&e.nodeName&&e.nodeName.toLowerCase();return r&&(r==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||r==="textarea"||e.contentEditable==="true")}var e4=Jr&&"documentMode"in document&&11>=document.documentMode,Co=null,wf=null,Fi=null,jf=!1;function l1(e,r,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;jf||Co==null||Co!==xc(u)||(u=Co,"selectionStart"in u&&yf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Fi&&Vi(Fi,u)||(Fi=u,u=fu(wf,"onSelect"),0>=j,h-=j,Dr=1<<32-Rt(r)+h|i<$e?(Qe=ke,ke=null):Qe=ke.sibling;var st=ee(F,ke,Q[$e],fe);if(st===null){ke===null&&(ke=Qe);break}e&&ke&&st.alternate===null&&r(F,ke),U=x(st,U,$e),at===null?Re=st:at.sibling=st,at=st,ke=Qe}if($e===Q.length)return i(F,ke),tt&&ta(F,$e),Re;if(ke===null){for(;$e$e?(Qe=ke,ke=null):Qe=ke.sibling;var as=ee(F,ke,st.value,fe);if(as===null){ke===null&&(ke=Qe);break}e&&ke&&as.alternate===null&&r(F,ke),U=x(as,U,$e),at===null?Re=as:at.sibling=as,at=as,ke=Qe}if(st.done)return i(F,ke),tt&&ta(F,$e),Re;if(ke===null){for(;!st.done;$e++,st=Q.next())st=he(F,st.value,fe),st!==null&&(U=x(st,U,$e),at===null?Re=st:at.sibling=st,at=st);return tt&&ta(F,$e),Re}for(ke=u(ke);!st.done;$e++,st=Q.next())st=re(ke,F,$e,st.value,fe),st!==null&&(e&&st.alternate!==null&&ke.delete(st.key===null?$e:st.key),U=x(st,U,$e),at===null?Re=st:at.sibling=st,at=st);return e&&ke.forEach(function(y3){return r(F,y3)}),tt&&ta(F,$e),Re}function ht(F,U,Q,fe){if(typeof Q=="object"&&Q!==null&&Q.type===S&&Q.key===null&&(Q=Q.props.children),typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case y:e:{for(var Re=Q.key;U!==null;){if(U.key===Re){if(Re=Q.type,Re===S){if(U.tag===7){i(F,U.sibling),fe=h(U,Q.props.children),fe.return=F,F=fe;break e}}else if(U.elementType===Re||typeof Re=="object"&&Re!==null&&Re.$$typeof===ne&&Ps(Re)===U.type){i(F,U.sibling),fe=h(U,Q.props),Zi(fe,Q),fe.return=F,F=fe;break e}i(F,U);break}else r(F,U);U=U.sibling}Q.type===S?(fe=_s(Q.props.children,F.mode,fe,Q.key),fe.return=F,F=fe):(fe=Mc(Q.type,Q.key,Q.props,null,F.mode,fe),Zi(fe,Q),fe.return=F,F=fe)}return j(F);case C:e:{for(Re=Q.key;U!==null;){if(U.key===Re)if(U.tag===4&&U.stateNode.containerInfo===Q.containerInfo&&U.stateNode.implementation===Q.implementation){i(F,U.sibling),fe=h(U,Q.children||[]),fe.return=F,F=fe;break e}else{i(F,U);break}else r(F,U);U=U.sibling}fe=Mf(Q,F.mode,fe),fe.return=F,F=fe}return j(F);case ne:return Q=Ps(Q),ht(F,U,Q,fe)}if(se(Q))return Ee(F,U,Q,fe);if(q(Q)){if(Re=q(Q),typeof Re!="function")throw Error(o(150));return Q=Re.call(Q),Oe(F,U,Q,fe)}if(typeof Q.then=="function")return ht(F,U,zc(Q),fe);if(Q.$$typeof===M)return ht(F,U,_c(F,Q),fe);Pc(F,Q)}return typeof Q=="string"&&Q!==""||typeof Q=="number"||typeof Q=="bigint"?(Q=""+Q,U!==null&&U.tag===6?(i(F,U.sibling),fe=h(U,Q),fe.return=F,F=fe):(i(F,U),fe=Tf(Q,F.mode,fe),fe.return=F,F=fe),j(F)):i(F,U)}return function(F,U,Q,fe){try{Xi=0;var Re=ht(F,U,Q,fe);return Oo=null,Re}catch(ke){if(ke===Do||ke===Oc)throw ke;var at=Pn(29,ke,null,F.mode);return at.lanes=fe,at.return=F,at}finally{}}}var Us=A1(!0),_1=A1(!1),$a=!1;function $f(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hf(e,r){e=e.updateQueue,r.updateQueue===e&&(r.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ha(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ga(e,r,i){var u=e.updateQueue;if(u===null)return null;if(u=u.shared,(it&2)!==0){var h=u.pending;return h===null?r.next=r:(r.next=h.next,h.next=r),u.pending=r,r=Tc(e),h1(e,null,i),r}return kc(e,u,r,i),Tc(e)}function Qi(e,r,i){if(r=r.updateQueue,r!==null&&(r=r.shared,(i&4194048)!==0)){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,bt(e,i)}}function Gf(e,r){var i=e.updateQueue,u=e.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var h=null,x=null;if(i=i.firstBaseUpdate,i!==null){do{var j={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};x===null?h=x=j:x=x.next=j,i=i.next}while(i!==null);x===null?h=x=r:x=x.next=r}else h=x=r;i={baseState:u.baseState,firstBaseUpdate:h,lastBaseUpdate:x,shared:u.shared,callbacks:u.callbacks},e.updateQueue=i;return}e=i.lastBaseUpdate,e===null?i.firstBaseUpdate=r:e.next=r,i.lastBaseUpdate=r}var Vf=!1;function Ji(){if(Vf){var e=_o;if(e!==null)throw e}}function el(e,r,i,u){Vf=!1;var h=e.updateQueue;$a=!1;var x=h.firstBaseUpdate,j=h.lastBaseUpdate,A=h.shared.pending;if(A!==null){h.shared.pending=null;var z=A,J=z.next;z.next=null,j===null?x=J:j.next=J,j=z;var le=e.alternate;le!==null&&(le=le.updateQueue,A=le.lastBaseUpdate,A!==j&&(A===null?le.firstBaseUpdate=J:A.next=J,le.lastBaseUpdate=z))}if(x!==null){var he=h.baseState;j=0,le=J=z=null,A=x;do{var ee=A.lane&-536870913,re=ee!==A.lane;if(re?(Ze&ee)===ee:(u&ee)===ee){ee!==0&&ee===Ao&&(Vf=!0),le!==null&&(le=le.next={lane:0,tag:A.tag,payload:A.payload,callback:null,next:null});e:{var Ee=e,Oe=A;ee=r;var ht=i;switch(Oe.tag){case 1:if(Ee=Oe.payload,typeof Ee=="function"){he=Ee.call(ht,he,ee);break e}he=Ee;break e;case 3:Ee.flags=Ee.flags&-65537|128;case 0:if(Ee=Oe.payload,ee=typeof Ee=="function"?Ee.call(ht,he,ee):Ee,ee==null)break e;he=v({},he,ee);break e;case 2:$a=!0}}ee=A.callback,ee!==null&&(e.flags|=64,re&&(e.flags|=8192),re=h.callbacks,re===null?h.callbacks=[ee]:re.push(ee))}else re={lane:ee,tag:A.tag,payload:A.payload,callback:A.callback,next:null},le===null?(J=le=re,z=he):le=le.next=re,j|=ee;if(A=A.next,A===null){if(A=h.shared.pending,A===null)break;re=A,A=re.next,re.next=null,h.lastBaseUpdate=re,h.shared.pending=null}}while(!0);le===null&&(z=he),h.baseState=z,h.firstBaseUpdate=J,h.lastBaseUpdate=le,x===null&&(h.shared.lanes=0),Ka|=j,e.lanes=j,e.memoizedState=he}}function D1(e,r){if(typeof e!="function")throw Error(o(191,e));e.call(r)}function O1(e,r){var i=e.callbacks;if(i!==null)for(e.callbacks=null,e=0;ex?x:8;var j=P.T,A={};P.T=A,cm(e,!1,r,i);try{var z=h(),J=P.S;if(J!==null&&J(A,z),z!==null&&typeof z=="object"&&typeof z.then=="function"){var le=c4(z,u);rl(e,r,le,Hn(e))}else rl(e,r,u,Hn(e))}catch(he){rl(e,r,{then:function(){},status:"rejected",reason:he},Hn())}finally{W.p=x,j!==null&&A.types!==null&&(j.types=A.types),P.T=j}}function h4(){}function im(e,r,i,u){if(e.tag!==5)throw Error(o(476));var h=fb(e).queue;db(e,h,r,oe,i===null?h4:function(){return mb(e),i(u)})}function fb(e){var r=e.memoizedState;if(r!==null)return r;r={memoizedState:oe,baseState:oe,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:oe},next:null};var i={};return r.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:sa,lastRenderedState:i},next:null},e.memoizedState=r,e=e.alternate,e!==null&&(e.memoizedState=r),r}function mb(e){var r=fb(e);r.next===null&&(r=e.alternate.memoizedState),rl(e,r.next.queue,{},Hn())}function lm(){return on(yl)}function pb(){return zt().memoizedState}function hb(){return zt().memoizedState}function g4(e){for(var r=e.return;r!==null;){switch(r.tag){case 24:case 3:var i=Hn();e=Ha(i);var u=Ga(r,e,i);u!==null&&(Tn(u,r,i),Qi(u,r,i)),r={cache:Pf()},e.payload=r;return}r=r.return}}function x4(e,r,i){var u=Hn();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},qc(e)?xb(r,i):(i=Ef(e,r,i,u),i!==null&&(Tn(i,e,u),bb(i,r,u)))}function gb(e,r,i){var u=Hn();rl(e,r,i,u)}function rl(e,r,i,u){var h={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(qc(e))xb(r,h);else{var x=e.alternate;if(e.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var j=r.lastRenderedState,A=x(j,i);if(h.hasEagerState=!0,h.eagerState=A,zn(A,j))return kc(e,r,h,0),xt===null&&Ec(),!1}catch{}finally{}if(i=Ef(e,r,h,u),i!==null)return Tn(i,e,u),bb(i,r,u),!0}return!1}function cm(e,r,i,u){if(u={lane:2,revertLane:$m(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},qc(e)){if(r)throw Error(o(479))}else r=Ef(e,i,u,2),r!==null&&Tn(r,e,2)}function qc(e){var r=e.alternate;return e===Ie||r!==null&&r===Ie}function xb(e,r){zo=Bc=!0;var i=e.pending;i===null?r.next=r:(r.next=i.next,i.next=r),e.pending=r}function bb(e,r,i){if((i&4194048)!==0){var u=r.lanes;u&=e.pendingLanes,i|=u,r.lanes=i,bt(e,i)}}var al={readContext:on,use:Gc,useCallback:At,useContext:At,useEffect:At,useImperativeHandle:At,useLayoutEffect:At,useInsertionEffect:At,useMemo:At,useReducer:At,useRef:At,useState:At,useDebugValue:At,useDeferredValue:At,useTransition:At,useSyncExternalStore:At,useId:At,useHostTransitionStatus:At,useFormState:At,useActionState:At,useOptimistic:At,useMemoCache:At,useCacheRefresh:At};al.useEffectEvent=At;var vb={readContext:on,use:Gc,useCallback:function(e,r){return gn().memoizedState=[e,r===void 0?null:r],e},useContext:on,useEffect:nb,useImperativeHandle:function(e,r,i){i=i!=null?i.concat([e]):null,Fc(4194308,4,ob.bind(null,r,e),i)},useLayoutEffect:function(e,r){return Fc(4194308,4,e,r)},useInsertionEffect:function(e,r){Fc(4,2,e,r)},useMemo:function(e,r){var i=gn();r=r===void 0?null:r;var u=e();if(Bs){On(!0);try{e()}finally{On(!1)}}return i.memoizedState=[u,r],u},useReducer:function(e,r,i){var u=gn();if(i!==void 0){var h=i(r);if(Bs){On(!0);try{i(r)}finally{On(!1)}}}else h=r;return u.memoizedState=u.baseState=h,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:h},u.queue=e,e=e.dispatch=x4.bind(null,Ie,e),[u.memoizedState,e]},useRef:function(e){var r=gn();return e={current:e},r.memoizedState=e},useState:function(e){e=nm(e);var r=e.queue,i=gb.bind(null,Ie,r);return r.dispatch=i,[e.memoizedState,i]},useDebugValue:sm,useDeferredValue:function(e,r){var i=gn();return om(i,e,r)},useTransition:function(){var e=nm(!1);return e=db.bind(null,Ie,e.queue,!0,!1),gn().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,r,i){var u=Ie,h=gn();if(tt){if(i===void 0)throw Error(o(407));i=i()}else{if(i=r(),xt===null)throw Error(o(349));(Ze&127)!==0||B1(u,r,i)}h.memoizedState=i;var x={value:i,getSnapshot:r};return h.queue=x,nb(H1.bind(null,u,x,e),[e]),u.flags|=2048,Io(9,{destroy:void 0},$1.bind(null,u,x,i,r),null),i},useId:function(){var e=gn(),r=xt.identifierPrefix;if(tt){var i=Or,u=Dr;i=(u&~(1<<32-Rt(u)-1)).toString(32)+i,r="_"+r+"R_"+i,i=$c++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof u.is=="string"?j.createElement("select",{is:u.is}):j.createElement("select"),u.multiple?x.multiple=!0:u.size&&(x.size=u.size);break;default:x=typeof u.is=="string"?j.createElement(h,{is:u.is}):j.createElement(h)}}x[te]=r,x[je]=u;e:for(j=r.child;j!==null;){if(j.tag===5||j.tag===6)x.appendChild(j.stateNode);else if(j.tag!==4&&j.tag!==27&&j.child!==null){j.child.return=j,j=j.child;continue}if(j===r)break e;for(;j.sibling===null;){if(j.return===null||j.return===r)break e;j=j.return}j.sibling.return=j.return,j=j.sibling}r.stateNode=x;e:switch(cn(x,h,u),h){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ia(r)}}return jt(r),Cm(r,r.type,e===null?null:e.memoizedProps,r.pendingProps,i),null;case 6:if(e&&r.stateNode!=null)e.memoizedProps!==u&&ia(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(e=be.current,Mo(r)){if(e=r.stateNode,i=r.memoizedProps,u=null,h=sn,h!==null)switch(h.tag){case 27:case 5:u=h.memoizedProps}e[te]=r,e=!!(e.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||Iv(e.nodeValue,i)),e||Ua(r,!0)}else e=mu(e).createTextNode(u),e[te]=r,r.stateNode=e}return jt(r),null;case 31:if(i=r.memoizedState,e===null||e.memoizedState!==null){if(u=Mo(r),i!==null){if(e===null){if(!u)throw Error(o(318));if(e=r.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[te]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;jt(r),e=!1}else i=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),e=!0;if(!e)return r.flags&256?(Un(r),r):(Un(r),null);if((r.flags&128)!==0)throw Error(o(558))}return jt(r),null;case 13:if(u=r.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(h=Mo(r),u!==null&&u.dehydrated!==null){if(e===null){if(!h)throw Error(o(318));if(h=r.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(o(317));h[te]=r}else Ds(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;jt(r),h=!1}else h=Df(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=h),h=!0;if(!h)return r.flags&256?(Un(r),r):(Un(r),null)}return Un(r),(r.flags&128)!==0?(r.lanes=i,r):(i=u!==null,e=e!==null&&e.memoizedState!==null,i&&(u=r.child,h=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(h=u.alternate.memoizedState.cachePool.pool),x=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(x=u.memoizedState.cachePool.pool),x!==h&&(u.flags|=2048)),i!==e&&i&&(r.child.flags|=8192),Qc(r,r.updateQueue),jt(r),null);case 4:return me(),e===null&&Fm(r.stateNode.containerInfo),jt(r),null;case 10:return ra(r.type),jt(r),null;case 19:if(D(Lt),u=r.memoizedState,u===null)return jt(r),null;if(h=(r.flags&128)!==0,x=u.rendering,x===null)if(h)ol(u,!1);else{if(_t!==0||e!==null&&(e.flags&128)!==0)for(e=r.child;e!==null;){if(x=Uc(e),x!==null){for(r.flags|=128,ol(u,!1),e=x.updateQueue,r.updateQueue=e,Qc(r,e),r.subtreeFlags=0,e=i,i=r.child;i!==null;)g1(i,e),i=i.sibling;return B(Lt,Lt.current&1|2),tt&&ta(r,u.treeForkCount),r.child}e=e.sibling}u.tail!==null&&Kt()>ru&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304)}else{if(!h)if(e=Uc(x),e!==null){if(r.flags|=128,h=!0,e=e.updateQueue,r.updateQueue=e,Qc(r,e),ol(u,!0),u.tail===null&&u.tailMode==="hidden"&&!x.alternate&&!tt)return jt(r),null}else 2*Kt()-u.renderingStartTime>ru&&i!==536870912&&(r.flags|=128,h=!0,ol(u,!1),r.lanes=4194304);u.isBackwards?(x.sibling=r.child,r.child=x):(e=u.last,e!==null?e.sibling=x:r.child=x,u.last=x)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=Kt(),e.sibling=null,i=Lt.current,B(Lt,h?i&1|2:i&1),tt&&ta(r,u.treeForkCount),e):(jt(r),null);case 22:case 23:return Un(r),Yf(),u=r.memoizedState!==null,e!==null?e.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(i&536870912)!==0&&(r.flags&128)===0&&(jt(r),r.subtreeFlags&6&&(r.flags|=8192)):jt(r),i=r.updateQueue,i!==null&&Qc(r,i.retryQueue),i=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(i=e.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==i&&(r.flags|=2048),e!==null&&D(zs),null;case 24:return i=null,e!==null&&(i=e.memoizedState.cache),r.memoizedState.cache!==i&&(r.flags|=2048),ra(Ut),jt(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function j4(e,r){switch(Af(r),r.tag){case 1:return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return ra(Ut),me(),e=r.flags,(e&65536)!==0&&(e&128)===0?(r.flags=e&-65537|128,r):null;case 26:case 27:case 5:return ie(r),null;case 31:if(r.memoizedState!==null){if(Un(r),r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 13:if(Un(r),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(o(340));Ds()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return D(Lt),null;case 4:return me(),null;case 10:return ra(r.type),null;case 22:case 23:return Un(r),Yf(),e!==null&&D(zs),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 24:return ra(Ut),null;case 25:return null;default:return null}}function Gb(e,r){switch(Af(r),r.tag){case 3:ra(Ut),me();break;case 26:case 27:case 5:ie(r);break;case 4:me();break;case 31:r.memoizedState!==null&&Un(r);break;case 13:Un(r);break;case 19:D(Lt);break;case 10:ra(r.type);break;case 22:case 23:Un(r),Yf(),e!==null&&D(zs);break;case 24:ra(Ut)}}function il(e,r){try{var i=r.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var h=u.next;i=h;do{if((i.tag&e)===e){u=void 0;var x=i.create,j=i.inst;u=x(),j.destroy=u}i=i.next}while(i!==h)}}catch(A){ut(r,r.return,A)}}function Ya(e,r,i){try{var u=r.updateQueue,h=u!==null?u.lastEffect:null;if(h!==null){var x=h.next;u=x;do{if((u.tag&e)===e){var j=u.inst,A=j.destroy;if(A!==void 0){j.destroy=void 0,h=r;var z=i,J=A;try{J()}catch(le){ut(h,z,le)}}}u=u.next}while(u!==x)}}catch(le){ut(r,r.return,le)}}function Vb(e){var r=e.updateQueue;if(r!==null){var i=e.stateNode;try{O1(r,i)}catch(u){ut(e,e.return,u)}}}function Fb(e,r,i){i.props=$s(e.type,e.memoizedProps),i.state=e.memoizedState;try{i.componentWillUnmount()}catch(u){ut(e,r,u)}}function ll(e,r){try{var i=e.ref;if(i!==null){switch(e.tag){case 26:case 27:case 5:var u=e.stateNode;break;case 30:u=e.stateNode;break;default:u=e.stateNode}typeof i=="function"?e.refCleanup=i(u):i.current=u}}catch(h){ut(e,r,h)}}function Lr(e,r){var i=e.ref,u=e.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(h){ut(e,r,h)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(h){ut(e,r,h)}else i.current=null}function Yb(e){var r=e.type,i=e.memoizedProps,u=e.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break e;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(h){ut(e,e.return,h)}}function Sm(e,r,i){try{var u=e.stateNode;V4(u,e.type,i,r),u[je]=r}catch(h){ut(e,e.return,h)}}function qb(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Ja(e.type)||e.tag===4}function Nm(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||qb(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.tag===27&&Ja(e.type)||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 Em(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(e,r):(r=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,r.appendChild(e),i=i._reactRootContainer,i!=null||r.onclick!==null||(r.onclick=Qr));else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode,r=null),e=e.child,e!==null))for(Em(e,r,i),e=e.sibling;e!==null;)Em(e,r,i),e=e.sibling}function Jc(e,r,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,r?i.insertBefore(e,r):i.appendChild(e);else if(u!==4&&(u===27&&Ja(e.type)&&(i=e.stateNode),e=e.child,e!==null))for(Jc(e,r,i),e=e.sibling;e!==null;)Jc(e,r,i),e=e.sibling}function Kb(e){var r=e.stateNode,i=e.memoizedProps;try{for(var u=e.type,h=r.attributes;h.length;)r.removeAttributeNode(h[0]);cn(r,u,i),r[te]=e,r[je]=i}catch(x){ut(e,e.return,x)}}var la=!1,Ht=!1,km=!1,Wb=typeof WeakSet=="function"?WeakSet:Set,Zt=null;function C4(e,r){if(e=e.containerInfo,Km=yu,e=i1(e),yf(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else e:{i=(i=e.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var h=u.anchorOffset,x=u.focusNode;u=u.focusOffset;try{i.nodeType,x.nodeType}catch{i=null;break e}var j=0,A=-1,z=-1,J=0,le=0,he=e,ee=null;t:for(;;){for(var re;he!==i||h!==0&&he.nodeType!==3||(A=j+h),he!==x||u!==0&&he.nodeType!==3||(z=j+u),he.nodeType===3&&(j+=he.nodeValue.length),(re=he.firstChild)!==null;)ee=he,he=re;for(;;){if(he===e)break t;if(ee===i&&++J===h&&(A=j),ee===x&&++le===u&&(z=j),(re=he.nextSibling)!==null)break;he=ee,ee=he.parentNode}he=re}i=A===-1||z===-1?null:{start:A,end:z}}else i=null}i=i||{start:0,end:0}}else i=null;for(Wm={focusedElem:e,selectionRange:i},yu=!1,Zt=r;Zt!==null;)if(r=Zt,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,Zt=e;else for(;Zt!==null;){switch(r=Zt,x=r.alternate,e=r.flags,r.tag){case 0:if((e&4)!==0&&(e=r.updateQueue,e=e!==null?e.events:null,e!==null))for(i=0;i title"))),cn(x,u,i),x[te]=e,Xt(x),u=x;break e;case"link":var j=ty("link","href",h).get(u+(i.href||""));if(j){for(var A=0;Aht&&(j=ht,ht=Oe,Oe=j);var F=s1(A,Oe),U=s1(A,ht);if(F&&U&&(re.rangeCount!==1||re.anchorNode!==F.node||re.anchorOffset!==F.offset||re.focusNode!==U.node||re.focusOffset!==U.offset)){var Q=he.createRange();Q.setStart(F.node,F.offset),re.removeAllRanges(),Oe>ht?(re.addRange(Q),re.extend(U.node,U.offset)):(Q.setEnd(U.node,U.offset),re.addRange(Q))}}}}for(he=[],re=A;re=re.parentNode;)re.nodeType===1&&he.push({element:re,left:re.scrollLeft,top:re.scrollTop});for(typeof A.focus=="function"&&A.focus(),A=0;Ai?32:i,P.T=null,i=Om,Om=null;var x=Xa,j=ma;if(Ft=0,Go=Xa=null,ma=0,(it&6)!==0)throw Error(o(331));var A=it;if(it|=4,ov(x.current),rv(x,x.current,j,i),it=A,pl(0,!1),yt&&typeof yt.onPostCommitFiberRoot=="function")try{yt.onPostCommitFiberRoot(Dn,x)}catch{}return!0}finally{W.p=h,P.T=u,Sv(e,r)}}function Ev(e,r,i){r=sr(i,r),r=mm(e.stateNode,r,2),e=Ga(e,r,2),e!==null&&(It(e,2),zr(e))}function ut(e,r,i){if(e.tag===3)Ev(e,e,i);else for(;r!==null;){if(r.tag===3){Ev(r,e,i);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Wa===null||!Wa.has(u))){e=sr(i,e),i=kb(2),u=Ga(r,i,2),u!==null&&(Tb(i,u,r,e),It(u,2),zr(u));break}}r=r.return}}function Im(e,r,i){var u=e.pingCache;if(u===null){u=e.pingCache=new E4;var h=new Set;u.set(r,h)}else h=u.get(r),h===void 0&&(h=new Set,u.set(r,h));h.has(i)||(Rm=!0,h.add(i),e=A4.bind(null,e,r,i),r.then(e,e))}function A4(e,r,i){var u=e.pingCache;u!==null&&u.delete(r),e.pingedLanes|=e.suspendedLanes&i,e.warmLanes&=~i,xt===e&&(Ze&i)===i&&(_t===4||_t===3&&(Ze&62914560)===Ze&&300>Kt()-nu?(it&2)===0&&Vo(e,0):Am|=i,Ho===Ze&&(Ho=0)),zr(e)}function kv(e,r){r===0&&(r=lt()),e=As(e,r),e!==null&&(It(e,r),zr(e))}function _4(e){var r=e.memoizedState,i=0;r!==null&&(i=r.retryLane),kv(e,i)}function D4(e,r){var i=0;switch(e.tag){case 31:case 13:var u=e.stateNode,h=e.memoizedState;h!==null&&(i=h.retryLane);break;case 19:u=e.stateNode;break;case 22:u=e.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),kv(e,i)}function O4(e,r){return br(e,r)}var cu=null,Yo=null,Um=!1,uu=!1,Bm=!1,Qa=0;function zr(e){e!==Yo&&e.next===null&&(Yo===null?cu=Yo=e:Yo=Yo.next=e),uu=!0,Um||(Um=!0,z4())}function pl(e,r){if(!Bm&&uu){Bm=!0;do for(var i=!1,u=cu;u!==null;){if(e!==0){var h=u.pendingLanes;if(h===0)var x=0;else{var j=u.suspendedLanes,A=u.pingedLanes;x=(1<<31-Rt(42|e)+1)-1,x&=h&~(j&~A),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(i=!0,Av(u,x))}else x=Ze,x=La(u,u===xt?x:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(x&3)===0||De(u,x)||(i=!0,Av(u,x));u=u.next}while(i);Bm=!1}}function L4(){Tv()}function Tv(){uu=Um=!1;var e=0;Qa!==0&&Y4()&&(e=Qa);for(var r=Kt(),i=null,u=cu;u!==null;){var h=u.next,x=Mv(u,r);x===0?(u.next=null,i===null?cu=h:i.next=h,h===null&&(Yo=i)):(i=u,(e!==0||(x&3)!==0)&&(uu=!0)),u=h}Ft!==0&&Ft!==5||pl(e),Qa!==0&&(Qa=0)}function Mv(e,r){for(var i=e.suspendedLanes,u=e.pingedLanes,h=e.expirationTimes,x=e.pendingLanes&-62914561;0A)break;var le=z.transferSize,he=z.initiatorType;le&&Uv(he)&&(z=z.responseEnd,j+=le*(z"u"?null:document;function Zv(e,r,i){var u=qo;if(u&&typeof r=="string"&&r){var h=rr(r);h='link[rel="'+e+'"][href="'+h+'"]',typeof i=="string"&&(h+='[crossorigin="'+i+'"]'),Xv.has(h)||(Xv.add(h),e={rel:e,crossOrigin:i,href:r},u.querySelector(h)===null&&(r=u.createElement("link"),cn(r,"link",e),Xt(r),u.head.appendChild(r)))}}function t3(e){pa.D(e),Zv("dns-prefetch",e,null)}function n3(e,r){pa.C(e,r),Zv("preconnect",e,r)}function r3(e,r,i){pa.L(e,r,i);var u=qo;if(u&&e&&r){var h='link[rel="preload"][as="'+rr(r)+'"]';r==="image"&&i&&i.imageSrcSet?(h+='[imagesrcset="'+rr(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(h+='[imagesizes="'+rr(i.imageSizes)+'"]')):h+='[href="'+rr(e)+'"]';var x=h;switch(r){case"style":x=Ko(e);break;case"script":x=Wo(e)}dr.has(x)||(e=v({rel:"preload",href:r==="image"&&i&&i.imageSrcSet?void 0:e,as:r},i),dr.set(x,e),u.querySelector(h)!==null||r==="style"&&u.querySelector(bl(x))||r==="script"&&u.querySelector(vl(x))||(r=u.createElement("link"),cn(r,"link",e),Xt(r),u.head.appendChild(r)))}}function a3(e,r){pa.m(e,r);var i=qo;if(i&&e){var u=r&&typeof r.as=="string"?r.as:"script",h='link[rel="modulepreload"][as="'+rr(u)+'"][href="'+rr(e)+'"]',x=h;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=Wo(e)}if(!dr.has(x)&&(e=v({rel:"modulepreload",href:e},r),dr.set(x,e),i.querySelector(h)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(vl(x)))return}u=i.createElement("link"),cn(u,"link",e),Xt(u),i.head.appendChild(u)}}}function s3(e,r,i){pa.S(e,r,i);var u=qo;if(u&&e){var h=Xr(u).hoistableStyles,x=Ko(e);r=r||"default";var j=h.get(x);if(!j){var A={loading:0,preload:null};if(j=u.querySelector(bl(x)))A.loading=5;else{e=v({rel:"stylesheet",href:e,"data-precedence":r},i),(i=dr.get(x))&&np(e,i);var z=j=u.createElement("link");Xt(z),cn(z,"link",e),z._p=new Promise(function(J,le){z.onload=J,z.onerror=le}),z.addEventListener("load",function(){A.loading|=1}),z.addEventListener("error",function(){A.loading|=2}),A.loading|=4,hu(j,r,u)}j={type:"stylesheet",instance:j,count:1,state:A},h.set(x,j)}}}function o3(e,r){pa.X(e,r);var i=qo;if(i&&e){var u=Xr(i).hoistableScripts,h=Wo(e),x=u.get(h);x||(x=i.querySelector(vl(h)),x||(e=v({src:e,async:!0},r),(r=dr.get(h))&&rp(e,r),x=i.createElement("script"),Xt(x),cn(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function i3(e,r){pa.M(e,r);var i=qo;if(i&&e){var u=Xr(i).hoistableScripts,h=Wo(e),x=u.get(h);x||(x=i.querySelector(vl(h)),x||(e=v({src:e,async:!0,type:"module"},r),(r=dr.get(h))&&rp(e,r),x=i.createElement("script"),Xt(x),cn(x,"link",e),i.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(h,x))}}function Qv(e,r,i,u){var h=(h=be.current)?pu(h):null;if(!h)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(r=Ko(i.href),i=Xr(h).hoistableStyles,u=i.get(r),u||(u={type:"style",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){e=Ko(i.href);var x=Xr(h).hoistableStyles,j=x.get(e);if(j||(h=h.ownerDocument||h,j={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(e,j),(x=h.querySelector(bl(e)))&&!x._p&&(j.instance=x,j.state.loading=5),dr.has(e)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},dr.set(e,i),x||l3(h,e,i,j.state))),r&&u===null)throw Error(o(528,""));return j}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=i.async,i=i.src,typeof i=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Wo(i),i=Xr(h).hoistableScripts,u=i.get(r),u||(u={type:"script",instance:null,count:0,state:null},i.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Ko(e){return'href="'+rr(e)+'"'}function bl(e){return'link[rel="stylesheet"]['+e+"]"}function Jv(e){return v({},e,{"data-precedence":e.precedence,precedence:null})}function l3(e,r,i,u){e.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=e.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),cn(r,"link",i),Xt(r),e.head.appendChild(r))}function Wo(e){return'[src="'+rr(e)+'"]'}function vl(e){return"script[async]"+e}function ey(e,r,i){if(r.count++,r.instance===null)switch(r.type){case"style":var u=e.querySelector('style[data-href~="'+rr(i.href)+'"]');if(u)return r.instance=u,Xt(u),u;var h=v({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(e.ownerDocument||e).createElement("style"),Xt(u),cn(u,"style",h),hu(u,i.precedence,e),r.instance=u;case"stylesheet":h=Ko(i.href);var x=e.querySelector(bl(h));if(x)return r.state.loading|=4,r.instance=x,Xt(x),x;u=Jv(i),(h=dr.get(h))&&np(u,h),x=(e.ownerDocument||e).createElement("link"),Xt(x);var j=x;return j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),cn(x,"link",u),r.state.loading|=4,hu(x,i.precedence,e),r.instance=x;case"script":return x=Wo(i.src),(h=e.querySelector(vl(x)))?(r.instance=h,Xt(h),h):(u=i,(h=dr.get(x))&&(u=v({},i),rp(u,h)),e=e.ownerDocument||e,h=e.createElement("script"),Xt(h),cn(h,"link",u),e.head.appendChild(h),r.instance=h);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,hu(u,i.precedence,e));return r.instance}function hu(e,r,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),h=u.length?u[u.length-1]:null,x=h,j=0;j title"):null)}function c3(e,r,i){if(i===1||r.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return e=r.disabled,typeof r.precedence=="string"&&e==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function ry(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function u3(e,r,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var h=Ko(u.href),x=r.querySelector(bl(h));if(x){r=x._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(e.count++,e=xu.bind(e),r.then(e,e)),i.state.loading|=4,i.instance=x,Xt(x);return}x=r.ownerDocument||r,u=Jv(u),(h=dr.get(h))&&np(u,h),x=x.createElement("link"),Xt(x);var j=x;j._p=new Promise(function(A,z){j.onload=A,j.onerror=z}),cn(x,"link",u),i.instance=x}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(i,r),(r=i.state.preload)&&(i.state.loading&3)===0&&(e.count++,i=xu.bind(e),r.addEventListener("load",i),r.addEventListener("error",i))}}var ap=0;function d3(e,r){return e.stylesheets&&e.count===0&&vu(e,e.stylesheets),0ap?50:800)+r);return e.unsuspend=i,function(){e.unsuspend=null,clearTimeout(u),clearTimeout(h)}}:null}function xu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)vu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var bu=null;function vu(e,r){e.stylesheets=null,e.unsuspend!==null&&(e.count++,bu=new Map,r.forEach(f3,e),bu=null,xu.call(e))}function f3(e,r){if(!(r.state.loading&4)){var i=bu.get(e);if(i)var u=i.get(null);else{i=new Map,bu.set(e,i);for(var h=e.querySelectorAll("link[data-precedence],style[data-precedence]"),x=0;x"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(n){console.error(n)}}return t(),pp.exports=R3(),pp.exports}var _3=A3();/** * react-router v7.18.2 * * Copyright (c) Remix Software Inc. @@ -55,14 +55,14 @@ Error generating stack: `+u.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */var Zh=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,i2=/^[\\/]{2}/;function D3(t,n){return n+t.replace(/\\/g,"/")}var Ay="popstate";function _y(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function O3(t={}){function n(o,c){var g;let l=(g=c.state)==null?void 0:g.masked,{pathname:d,search:m,hash:p}=l||o.location;return Qp("",{pathname:d,search:m,hash:p},c.state&&c.state.usr||null,c.state&&c.state.key||"default",l?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,c){return typeof c=="string"?c:Il(c)}return z3(n,a,null,t)}function Nt(t,n){if(t===!1||t===null||typeof t>"u")throw new Error(n)}function fr(t,n){if(!t){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function L3(){return Math.random().toString(36).substring(2,10)}function Dy(t,n){return{usr:t.state,key:t.key,idx:n,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function Qp(t,n,a=null,o,c){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof n=="string"?vi(n):n,state:a,key:n&&n.key||o||L3(),mask:c}}function Il({pathname:t="/",search:n="",hash:a=""}){return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function vi(t){let n={};if(t){let a=t.indexOf("#");a>=0&&(n.hash=t.substring(a),t=t.substring(0,a));let o=t.indexOf("?");o>=0&&(n.search=t.substring(o),t=t.substring(0,o)),t&&(n.pathname=t)}return n}function z3(t,n,a,o={}){let{window:c=document.defaultView,v5Compat:l=!1}=o,d=c.history,m="POP",p=null,g=v();g==null&&(g=0,d.replaceState({...d.state,idx:g},""));function v(){return(d.state||{idx:null}).idx}function b(){m="POP";let E=v(),k=E==null?null:E-g;g=E,p&&p({action:m,location:S.location,delta:k})}function w(E,k){m="PUSH";let N=_y(E)?E:Qp(S.location,E,k);g=v()+1;let T=Dy(N,g),M=S.createHref(N.mask||N);try{d.pushState(T,"",M)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;c.location.assign(M)}l&&p&&p({action:m,location:S.location,delta:1})}function y(E,k){m="REPLACE";let N=_y(E)?E:Qp(S.location,E,k);g=v();let T=Dy(N,g),M=S.createHref(N.mask||N);d.replaceState(T,"",M),l&&p&&p({action:m,location:S.location,delta:0})}function C(E){return P3(c,E)}let S={get action(){return m},get location(){return t(c,d)},listen(E){if(p)throw new Error("A history only accepts one active listener");return c.addEventListener(Ay,b),p=E,()=>{c.removeEventListener(Ay,b),p=null}},createHref(E){return n(c,E)},createURL:C,encodeLocation(E){let k=C(E);return{pathname:k.pathname,search:k.search,hash:k.hash}},push:w,replace:y,go(E){return d.go(E)}};return S}function P3(t,n,a=!1){let o="http://localhost";t&&(o=t.location.origin!=="null"?t.location.origin:t.location.href),Nt(o,"No window.location.(origin|href) available to create URL");let c=typeof n=="string"?n:Il(n);return c=c.replace(/ $/,"%20"),!a&&i2.test(c)&&(c=o+c),new URL(c,o)}function l2(t,n,a="/"){return I3(t,n,a,!1)}function I3(t,n,a,o,c){let l=typeof n=="string"?vi(n):n,d=Na(l.pathname||"/",a);if(d==null)return null;let m=U3(t),p=null,g=X3(d);for(let v=0;p==null&&v{let v={relativePath:g===void 0?d.path||"":g,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(v.relativePath.startsWith("/")){if(!v.relativePath.startsWith(o)&&p)return;Nt(v.relativePath.startsWith(o),`Absolute route path "${v.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),v.relativePath=v.relativePath.slice(o.length)}let b=Cr([o,v.relativePath]),w=a.concat(v);d.children&&d.children.length>0&&(Nt(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),c2(d.children,n,w,b,p)),!(d.path==null&&!d.index)&&n.push({path:b,score:q3(b,d.index),routesMeta:w.map((y,C)=>{let[S,E]=f2(y.relativePath,y.caseSensitive,C===w.length-1);return{...y,matcher:S,compiledParams:E}})})};return t.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))l(d,m);else for(let g of u2(d.path))l(d,m,!0,g)}),n}function u2(t){let n=t.split("/");if(n.length===0)return[];let[a,...o]=n,c=a.endsWith("?"),l=a.replace(/\?$/,"");if(o.length===0)return c?[l,""]:[l];let d=u2(o.join("/")),m=[];return m.push(...d.map(p=>p===""?l:[l,p].join("/"))),c&&m.push(...d),m.map(p=>t.startsWith("/")&&p===""?"/":p)}function B3(t){t.sort((n,a)=>n.score!==a.score?a.score-n.score:K3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var $3=/^:[\w-]+$/,H3=3,G3=2,V3=1,F3=10,Y3=-2,Oy=t=>t==="*";function q3(t,n){let a=t.split("/"),o=a.length;return a.some(Oy)&&(o+=Y3),n&&(o+=G3),a.filter(c=>!Oy(c)).reduce((c,l)=>c+($3.test(l)?H3:l===""?V3:F3),o)}function K3(t,n){return t.length===n.length&&t.slice(0,-1).every((o,c)=>o===n[c])?t[t.length-1]-n[n.length-1]:0}function W3(t,n,a=!1){let{routesMeta:o}=t,c={},l="/",d=[];for(let m=0;m{if(v==="*"){let C=m[w]||"";d=l.slice(0,l.length-C.length).replace(/(.)\/+$/,"$1")}const y=m[w];return b&&!y?g[v]=void 0:g[v]=(y||"").replace(/%2F/g,"/"),g},{}),pathname:l,pathnameBase:d,pattern:t}}function f2(t,n=!1,a=!0){fr(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let o=[],c="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,g,v)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let b=v.charAt(g+d.length);return b&&b!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(o.push({paramName:"*"}),c+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?c+="\\/*$":t!==""&&t!=="/"&&(c+="(?:(?=\\/|$))"),[new RegExp(c,n?void 0:"i"),o]}function X3(t){try{return t.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return fr(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),t}}function Na(t,n){if(n==="/")return t;if(!t.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=t.charAt(a);return o&&o!=="/"?null:t.slice(a)||"/"}function Z3(t,n="/"){let{pathname:a,search:o="",hash:c=""}=typeof t=="string"?vi(t):t,l;return a?(a=m2(a),a.startsWith("/")?l=Ly(a.substring(1),"/"):l=Ly(a,n)):l=n,{pathname:l,search:eN(o),hash:tN(c)}}function Ly(t,n){let a=ad(n).split("/");return t.split("/").forEach(c=>{c===".."?a.length>1&&a.pop():c!=="."&&a.push(c)}),a.length>1?a.join("/"):"/"}function vp(t,n,a,o){return`Cannot include a '${t}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Q3(t){return t.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Qh(t){let n=Q3(t);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function xd(t,n,a,o=!1){let c;typeof t=="string"?c=vi(t):(c={...t},Nt(!c.pathname||!c.pathname.includes("?"),vp("?","pathname","search",c)),Nt(!c.pathname||!c.pathname.includes("#"),vp("#","pathname","hash",c)),Nt(!c.search||!c.search.includes("#"),vp("#","search","hash",c)));let l=t===""||c.pathname==="",d=l?"/":c.pathname,m;if(d==null)m=a;else{let b=n.length-1;if(!o&&d.startsWith("..")){let w=d.split("/");for(;w[0]==="..";)w.shift(),b-=1;c.pathname=w.join("/")}m=b>=0?n[b]:"/"}let p=Z3(c,m),g=d&&d!=="/"&&d.endsWith("/"),v=(l||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(g||v)&&(p.pathname+="/"),p}var m2=t=>t.replace(/[\\/]{2,}/g,"/"),Cr=t=>m2(t.join("/")),ad=t=>t.replace(/\/+$/,""),J3=t=>ad(t).replace(/^\/*/,"/"),eN=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,tN=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,nN=class{constructor(t,n,a,o=!1){this.status=t,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function rN(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function aN(t){let n=t.map(a=>a.route.path).filter(Boolean);return Cr(n)||"/"}var p2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function h2(t,n){let a=t;if(typeof a!="string"||!Zh.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,c=!1;if(p2)try{let l=new URL(window.location.href),d=i2.test(a)?new URL(D3(a,l.protocol)):new URL(a),m=Na(d.pathname,n);d.origin===l.origin&&m!=null?a=m+d.search+d.hash:c=!0}catch{fr(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:c,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var g2=["POST","PUT","PATCH","DELETE"];new Set(g2);var sN=["GET",...g2];new Set(sN);var oN=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function iN(t){try{return oN.includes(new URL(t).protocol)}catch{return!1}}var bi=f.createContext(null);bi.displayName="DataRouter";var vd=f.createContext(null);vd.displayName="DataRouterState";var x2=f.createContext(!1);function lN(){return f.useContext(x2)}var v2=f.createContext({isTransitioning:!1});v2.displayName="ViewTransition";var cN=f.createContext(new Map);cN.displayName="Fetchers";var uN=f.createContext(null);uN.displayName="Await";var qn=f.createContext(null);qn.displayName="Navigation";var Jl=f.createContext(null);Jl.displayName="Location";var Er=f.createContext({outlet:null,matches:[],isDataRoute:!1});Er.displayName="Route";var Jh=f.createContext(null);Jh.displayName="RouteError";var b2="REACT_ROUTER_ERROR",dN="REDIRECT",fN="ROUTE_ERROR_RESPONSE";function mN(t){if(t.startsWith(`${b2}:${dN}:{`))try{let n=JSON.parse(t.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function pN(t){if(t.startsWith(`${b2}:${fN}:{`))try{let n=JSON.parse(t.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new nN(n.status,n.statusText,n.data)}catch{}}function hN(t,{relative:n}={}){Nt(yi(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(qn),{hash:c,pathname:l,search:d}=ec(t,{relative:n}),m=l;return a!=="/"&&(m=l==="/"?a:Cr([a,l])),o.createHref({pathname:m,search:d,hash:c})}function yi(){return f.useContext(Jl)!=null}function Kn(){return Nt(yi(),"useLocation() may be used only in the context of a component."),f.useContext(Jl).location}var y2="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function w2(t){f.useContext(qn).static||f.useLayoutEffect(t)}function ao(){let{isDataRoute:t}=f.useContext(Er);return t?RN():gN()}function gN(){Nt(yi(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(bi),{basename:n,navigator:a}=f.useContext(qn),{matches:o}=f.useContext(Er),{pathname:c}=Kn(),l=JSON.stringify(Qh(o)),d=f.useRef(!1);return w2(()=>{d.current=!0}),f.useCallback((p,g={})=>{if(fr(d.current,y2),!d.current)return;if(typeof p=="number"){a.go(p);return}let v=xd(p,JSON.parse(l),c,g.relative==="path");t==null&&n!=="/"&&(v.pathname=v.pathname==="/"?n:Cr([n,v.pathname])),(g.replace?a.replace:a.push)(v,g.state,g)},[n,a,l,c,t])}var xN=f.createContext(null);function vN(t){let n=f.useContext(Er).outlet;return f.useMemo(()=>n&&f.createElement(xN.Provider,{value:t},n),[n,t])}function ec(t,{relative:n}={}){let{matches:a}=f.useContext(Er),{pathname:o}=Kn(),c=JSON.stringify(Qh(a));return f.useMemo(()=>xd(t,JSON.parse(c),o,n==="path"),[t,c,o,n])}function bN(t,n){return j2(t,n)}function j2(t,n,a){var E;Nt(yi(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(qn),{matches:c}=f.useContext(Er),l=c[c.length-1],d=l?l.params:{},m=l?l.pathname:"/",p=l?l.pathnameBase:"/",g=l&&l.route;{let k=g&&g.path||"";S2(m,!g||k.endsWith("*")||k.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + */var Zh=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,i2=/^[\\/]{2}/;function D3(t,n){return n+t.replace(/\\/g,"/")}var Ay="popstate";function _y(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function O3(t={}){function n(o,c){var g;let l=(g=c.state)==null?void 0:g.masked,{pathname:d,search:m,hash:p}=l||o.location;return Qp("",{pathname:d,search:m,hash:p},c.state&&c.state.usr||null,c.state&&c.state.key||"default",l?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,c){return typeof c=="string"?c:Il(c)}return z3(n,a,null,t)}function kt(t,n){if(t===!1||t===null||typeof t>"u")throw new Error(n)}function pr(t,n){if(!t){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function L3(){return Math.random().toString(36).substring(2,10)}function Dy(t,n){return{usr:t.state,key:t.key,idx:n,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function Qp(t,n,a=null,o,c){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof n=="string"?hi(n):n,state:a,key:n&&n.key||o||L3(),mask:c}}function Il({pathname:t="/",search:n="",hash:a=""}){return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function hi(t){let n={};if(t){let a=t.indexOf("#");a>=0&&(n.hash=t.substring(a),t=t.substring(0,a));let o=t.indexOf("?");o>=0&&(n.search=t.substring(o),t=t.substring(0,o)),t&&(n.pathname=t)}return n}function z3(t,n,a,o={}){let{window:c=document.defaultView,v5Compat:l=!1}=o,d=c.history,m="POP",p=null,g=b();g==null&&(g=0,d.replaceState({...d.state,idx:g},""));function b(){return(d.state||{idx:null}).idx}function v(){m="POP";let N=b(),E=N==null?null:N-g;g=N,p&&p({action:m,location:S.location,delta:E})}function w(N,E){m="PUSH";let T=_y(N)?N:Qp(S.location,N,E);g=b()+1;let M=Dy(T,g),k=S.createHref(T.mask||T);try{d.pushState(M,"",k)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;c.location.assign(k)}l&&p&&p({action:m,location:S.location,delta:1})}function y(N,E){m="REPLACE";let T=_y(N)?N:Qp(S.location,N,E);g=b();let M=Dy(T,g),k=S.createHref(T.mask||T);d.replaceState(M,"",k),l&&p&&p({action:m,location:S.location,delta:0})}function C(N){return P3(c,N)}let S={get action(){return m},get location(){return t(c,d)},listen(N){if(p)throw new Error("A history only accepts one active listener");return c.addEventListener(Ay,v),p=N,()=>{c.removeEventListener(Ay,v),p=null}},createHref(N){return n(c,N)},createURL:C,encodeLocation(N){let E=C(N);return{pathname:E.pathname,search:E.search,hash:E.hash}},push:w,replace:y,go(N){return d.go(N)}};return S}function P3(t,n,a=!1){let o="http://localhost";t&&(o=t.location.origin!=="null"?t.location.origin:t.location.href),kt(o,"No window.location.(origin|href) available to create URL");let c=typeof n=="string"?n:Il(n);return c=c.replace(/ $/,"%20"),!a&&i2.test(c)&&(c=o+c),new URL(c,o)}function l2(t,n,a="/"){return I3(t,n,a,!1)}function I3(t,n,a,o,c){let l=typeof n=="string"?hi(n):n,d=Na(l.pathname||"/",a);if(d==null)return null;let m=U3(t),p=null,g=X3(d);for(let b=0;p==null&&b{let b={relativePath:g===void 0?d.path||"":g,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&p)return;kt(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let v=Sr([o,b.relativePath]),w=a.concat(b);d.children&&d.children.length>0&&(kt(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),c2(d.children,n,w,v,p)),!(d.path==null&&!d.index)&&n.push({path:v,score:q3(v,d.index),routesMeta:w.map((y,C)=>{let[S,N]=f2(y.relativePath,y.caseSensitive,C===w.length-1);return{...y,matcher:S,compiledParams:N}})})};return t.forEach((d,m)=>{var p;if(d.path===""||!((p=d.path)!=null&&p.includes("?")))l(d,m);else for(let g of u2(d.path))l(d,m,!0,g)}),n}function u2(t){let n=t.split("/");if(n.length===0)return[];let[a,...o]=n,c=a.endsWith("?"),l=a.replace(/\?$/,"");if(o.length===0)return c?[l,""]:[l];let d=u2(o.join("/")),m=[];return m.push(...d.map(p=>p===""?l:[l,p].join("/"))),c&&m.push(...d),m.map(p=>t.startsWith("/")&&p===""?"/":p)}function B3(t){t.sort((n,a)=>n.score!==a.score?a.score-n.score:K3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var $3=/^:[\w-]+$/,H3=3,G3=2,V3=1,F3=10,Y3=-2,Oy=t=>t==="*";function q3(t,n){let a=t.split("/"),o=a.length;return a.some(Oy)&&(o+=Y3),n&&(o+=G3),a.filter(c=>!Oy(c)).reduce((c,l)=>c+($3.test(l)?H3:l===""?V3:F3),o)}function K3(t,n){return t.length===n.length&&t.slice(0,-1).every((o,c)=>o===n[c])?t[t.length-1]-n[n.length-1]:0}function W3(t,n,a=!1){let{routesMeta:o}=t,c={},l="/",d=[];for(let m=0;m{if(b==="*"){let C=m[w]||"";d=l.slice(0,l.length-C.length).replace(/(.)\/+$/,"$1")}const y=m[w];return v&&!y?g[b]=void 0:g[b]=(y||"").replace(/%2F/g,"/"),g},{}),pathname:l,pathnameBase:d,pattern:t}}function f2(t,n=!1,a=!0){pr(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let o=[],c="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p,g,b)=>{if(o.push({paramName:m,isOptional:p!=null}),p){let v=b.charAt(g+d.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(o.push({paramName:"*"}),c+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?c+="\\/*$":t!==""&&t!=="/"&&(c+="(?:(?=\\/|$))"),[new RegExp(c,n?void 0:"i"),o]}function X3(t){try{return t.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return pr(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),t}}function Na(t,n){if(n==="/")return t;if(!t.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=t.charAt(a);return o&&o!=="/"?null:t.slice(a)||"/"}function Z3(t,n="/"){let{pathname:a,search:o="",hash:c=""}=typeof t=="string"?hi(t):t,l;return a?(a=m2(a),a.startsWith("/")?l=Ly(a.substring(1),"/"):l=Ly(a,n)):l=n,{pathname:l,search:eN(o),hash:tN(c)}}function Ly(t,n){let a=ad(n).split("/");return t.split("/").forEach(c=>{c===".."?a.length>1&&a.pop():c!=="."&&a.push(c)}),a.length>1?a.join("/"):"/"}function bp(t,n,a,o){return`Cannot include a '${t}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Q3(t){return t.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function Qh(t){let n=Q3(t);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function xd(t,n,a,o=!1){let c;typeof t=="string"?c=hi(t):(c={...t},kt(!c.pathname||!c.pathname.includes("?"),bp("?","pathname","search",c)),kt(!c.pathname||!c.pathname.includes("#"),bp("#","pathname","hash",c)),kt(!c.search||!c.search.includes("#"),bp("#","search","hash",c)));let l=t===""||c.pathname==="",d=l?"/":c.pathname,m;if(d==null)m=a;else{let v=n.length-1;if(!o&&d.startsWith("..")){let w=d.split("/");for(;w[0]==="..";)w.shift(),v-=1;c.pathname=w.join("/")}m=v>=0?n[v]:"/"}let p=Z3(c,m),g=d&&d!=="/"&&d.endsWith("/"),b=(l||d===".")&&a.endsWith("/");return!p.pathname.endsWith("/")&&(g||b)&&(p.pathname+="/"),p}var m2=t=>t.replace(/[\\/]{2,}/g,"/"),Sr=t=>m2(t.join("/")),ad=t=>t.replace(/\/+$/,""),J3=t=>ad(t).replace(/^\/*/,"/"),eN=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,tN=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,nN=class{constructor(t,n,a,o=!1){this.status=t,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function rN(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function aN(t){let n=t.map(a=>a.route.path).filter(Boolean);return Sr(n)||"/"}var p2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function h2(t,n){let a=t;if(typeof a!="string"||!Zh.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,c=!1;if(p2)try{let l=new URL(window.location.href),d=i2.test(a)?new URL(D3(a,l.protocol)):new URL(a),m=Na(d.pathname,n);d.origin===l.origin&&m!=null?a=m+d.search+d.hash:c=!0}catch{pr(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:c,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var g2=["POST","PUT","PATCH","DELETE"];new Set(g2);var sN=["GET",...g2];new Set(sN);var oN=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function iN(t){try{return oN.includes(new URL(t).protocol)}catch{return!1}}var gi=f.createContext(null);gi.displayName="DataRouter";var bd=f.createContext(null);bd.displayName="DataRouterState";var x2=f.createContext(!1);function lN(){return f.useContext(x2)}var b2=f.createContext({isTransitioning:!1});b2.displayName="ViewTransition";var cN=f.createContext(new Map);cN.displayName="Fetchers";var uN=f.createContext(null);uN.displayName="Await";var qn=f.createContext(null);qn.displayName="Navigation";var Jl=f.createContext(null);Jl.displayName="Location";var Tr=f.createContext({outlet:null,matches:[],isDataRoute:!1});Tr.displayName="Route";var Jh=f.createContext(null);Jh.displayName="RouteError";var v2="REACT_ROUTER_ERROR",dN="REDIRECT",fN="ROUTE_ERROR_RESPONSE";function mN(t){if(t.startsWith(`${v2}:${dN}:{`))try{let n=JSON.parse(t.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function pN(t){if(t.startsWith(`${v2}:${fN}:{`))try{let n=JSON.parse(t.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new nN(n.status,n.statusText,n.data)}catch{}}function hN(t,{relative:n}={}){kt(xi(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(qn),{hash:c,pathname:l,search:d}=ec(t,{relative:n}),m=l;return a!=="/"&&(m=l==="/"?a:Sr([a,l])),o.createHref({pathname:m,search:d,hash:c})}function xi(){return f.useContext(Jl)!=null}function Kn(){return kt(xi(),"useLocation() may be used only in the context of a component."),f.useContext(Jl).location}var y2="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function w2(t){f.useContext(qn).static||f.useLayoutEffect(t)}function ao(){let{isDataRoute:t}=f.useContext(Tr);return t?RN():gN()}function gN(){kt(xi(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(gi),{basename:n,navigator:a}=f.useContext(qn),{matches:o}=f.useContext(Tr),{pathname:c}=Kn(),l=JSON.stringify(Qh(o)),d=f.useRef(!1);return w2(()=>{d.current=!0}),f.useCallback((p,g={})=>{if(pr(d.current,y2),!d.current)return;if(typeof p=="number"){a.go(p);return}let b=xd(p,JSON.parse(l),c,g.relative==="path");t==null&&n!=="/"&&(b.pathname=b.pathname==="/"?n:Sr([n,b.pathname])),(g.replace?a.replace:a.push)(b,g.state,g)},[n,a,l,c,t])}var xN=f.createContext(null);function bN(t){let n=f.useContext(Tr).outlet;return f.useMemo(()=>n&&f.createElement(xN.Provider,{value:t},n),[n,t])}function ec(t,{relative:n}={}){let{matches:a}=f.useContext(Tr),{pathname:o}=Kn(),c=JSON.stringify(Qh(a));return f.useMemo(()=>xd(t,JSON.parse(c),o,n==="path"),[t,c,o,n])}function vN(t,n){return j2(t,n)}function j2(t,n,a){var N;kt(xi(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(qn),{matches:c}=f.useContext(Tr),l=c[c.length-1],d=l?l.params:{},m=l?l.pathname:"/",p=l?l.pathnameBase:"/",g=l&&l.route;{let E=g&&g.path||"";S2(m,!g||E.endsWith("*")||E.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let v=Kn(),b;if(n){let k=typeof n=="string"?vi(n):n;Nt(p==="/"||((E=k.pathname)==null?void 0:E.startsWith(p)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${k.pathname}" was given in the \`location\` prop.`),b=k}else b=v;let w=b.pathname||"/",y=w;if(p!=="/"){let k=p.replace(/^\//,"").split("/");y="/"+w.replace(/^\//,"").split("/").slice(k.length).join("/")}let C=a&&a.state.matches.length?a.state.matches.map(k=>Object.assign(k,{route:a.manifest[k.route.id]||k.route})):l2(t,{pathname:y});fr(g||C!=null,`No routes matched location "${b.pathname}${b.search}${b.hash}" `),fr(C==null||C[C.length-1].route.element!==void 0||C[C.length-1].route.Component!==void 0||C[C.length-1].route.lazy!==void 0,`Matched leaf route at location "${b.pathname}${b.search}${b.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let S=SN(C&&C.map(k=>Object.assign({},k,{params:Object.assign({},d,k.params),pathname:Cr([p,o.encodeLocation?o.encodeLocation(k.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathname]),pathnameBase:k.pathnameBase==="/"?p:Cr([p,o.encodeLocation?o.encodeLocation(k.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathnameBase])})),c,a);return n&&S?f.createElement(Jl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...b},navigationType:"POP"}},S):S}function yN(){let t=MN(),n=rN(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",c={padding:"0.5rem",backgroundColor:o},l={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",t),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:l},"ErrorBoundary")," or"," ",f.createElement("code",{style:l},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:c},a):null,d)}var wN=f.createElement(yN,null),C2=class extends f.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,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){this.props.onError?this.props.onError(t,n):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=pN(t.digest);a&&(t=a)}let n=t!==void 0?f.createElement(Er.Provider,{value:this.props.routeContext},f.createElement(Jh.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?f.createElement(jN,{error:t},n):n}};C2.contextType=x2;var bp=new WeakMap;function jN({children:t,error:n}){let{basename:a}=f.useContext(qn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=mN(n.digest);if(o){let c=bp.get(n);if(c)throw c;let l=h2(o.location,a),d=l.absoluteURL||l.to;if(iN(d))throw new Error("Invalid redirect location");if(p2&&!bp.get(n))if(l.isExternal||o.reloadDocument)window.location.href=d;else{const m=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(l.to,{replace:o.replace}));throw bp.set(n,m),m}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${d}`})}}return t}function CN({routeContext:t,match:n,children:a}){let o=f.useContext(bi);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(Er.Provider,{value:t},a)}function SN(t,n=[],a){let o=a==null?void 0:a.state;if(t==null){if(!o)return null;if(o.errors)t=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)t=o.matches;else return null}let c=t,l=o==null?void 0:o.errors;if(l!=null){let v=c.findIndex(b=>b.route.id&&(l==null?void 0:l[b.route.id])!==void 0);Nt(v>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(l).join(",")}`),c=c.slice(0,Math.min(c.length,v+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let v=0;v=0?c=c.slice(0,m+1):c=[c[0]];break}}}}let p=a==null?void 0:a.onError,g=o&&p?(v,b)=>{var w,y;p(v,{location:o.location,params:((y=(w=o.matches)==null?void 0:w[0])==null?void 0:y.params)??{},pattern:aN(o.matches),errorInfo:b})}:void 0;return c.reduceRight((v,b,w)=>{let y,C=!1,S=null,E=null;o&&(y=l&&b.route.id?l[b.route.id]:void 0,S=b.route.errorElement||wN,d&&(m<0&&w===0?(S2("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),C=!0,E=null):m===w&&(C=!0,E=b.route.hydrateFallbackElement||null)));let k=n.concat(c.slice(0,w+1)),N=()=>{let T;return y?T=S:C?T=E:b.route.Component?T=f.createElement(b.route.Component,null):b.route.element?T=b.route.element:T=v,f.createElement(CN,{match:b,routeContext:{outlet:v,matches:k,isDataRoute:o!=null},children:T})};return o&&(b.route.ErrorBoundary||b.route.errorElement||w===0)?f.createElement(C2,{location:o.location,revalidation:o.revalidation,component:S,error:y,children:N(),routeContext:{outlet:null,matches:k,isDataRoute:!0},onError:g}):N()},null)}function eg(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function NN(t){let n=f.useContext(bi);return Nt(n,eg(t)),n}function EN(t){let n=f.useContext(vd);return Nt(n,eg(t)),n}function kN(t){let n=f.useContext(Er);return Nt(n,eg(t)),n}function tg(t){let n=kN(t),a=n.matches[n.matches.length-1];return Nt(a.route.id,`${t} can only be used on routes that contain a unique "id"`),a.route.id}function TN(){return tg("useRouteId")}function MN(){var o;let t=f.useContext(Jh),n=EN("useRouteError"),a=tg("useRouteError");return t!==void 0?t:(o=n.errors)==null?void 0:o[a]}function RN(){let{router:t}=NN("useNavigate"),n=tg("useNavigate"),a=f.useRef(!1);return w2(()=>{a.current=!0}),f.useCallback(async(c,l={})=>{fr(a.current,y2),a.current&&(typeof c=="number"?await t.navigate(c):await t.navigate(c,{fromRouteId:n,...l}))},[t,n])}var zy={};function S2(t,n,a){!n&&!zy[t]&&(zy[t]=!0,fr(!1,a))}f.memo(AN);function AN({routes:t,manifest:n,future:a,state:o,isStatic:c,onError:l}){return j2(t,void 0,{manifest:n,state:o,isStatic:c,onError:l})}function ya({to:t,replace:n,state:a,relative:o}){Nt(yi()," may be used only in the context of a component.");let{static:c}=f.useContext(qn);fr(!c," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:l}=f.useContext(Er),{pathname:d}=Kn(),m=ao(),p=xd(t,Qh(l),d,o==="path"),g=JSON.stringify(p);return f.useEffect(()=>{m(JSON.parse(g),{replace:n,state:a,relative:o})},[m,g,o,n,a]),null}function _N(t){return vN(t.context)}function cn(t){Nt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function DN({basename:t="/",children:n=null,location:a,navigationType:o="POP",navigator:c,static:l=!1,useTransitions:d}){Nt(!yi(),"You cannot render a inside another . You should never have more than one in your app.");let m=t.replace(/^\/*/,"/"),p=f.useMemo(()=>({basename:m,navigator:c,static:l,useTransitions:d,future:{}}),[m,c,l,d]);typeof a=="string"&&(a=vi(a));let{pathname:g="/",search:v="",hash:b="",state:w=null,key:y="default",mask:C}=a,S=f.useMemo(()=>{let E=Na(g,m);return E==null?null:{location:{pathname:E,search:v,hash:b,state:w,key:y,mask:C},navigationType:o}},[m,g,v,b,w,y,o,C]);return fr(S!=null,` is not able to match the URL "${g}${v}${b}" because it does not start with the basename, so the won't render anything.`),S==null?null:f.createElement(qn.Provider,{value:p},f.createElement(Jl.Provider,{children:n,value:S}))}function Py({children:t,location:n}){return bN(Jp(t),n)}function Jp(t,n=[]){let a=[];return f.Children.forEach(t,(o,c)=>{if(!f.isValidElement(o))return;let l=[...n,c];if(o.type===f.Fragment){a.push.apply(a,Jp(o.props.children,l));return}Nt(o.type===cn,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),Nt(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||l.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=Jp(o.props.children,l)),a.push(d)}),a}var Fu="get",Yu="application/x-www-form-urlencoded";function bd(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function ON(t){return bd(t)&&t.tagName.toLowerCase()==="button"}function LN(t){return bd(t)&&t.tagName.toLowerCase()==="form"}function zN(t){return bd(t)&&t.tagName.toLowerCase()==="input"}function PN(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function IN(t,n){return t.button===0&&(!n||n==="_self")&&!PN(t)}function eh(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((n,a)=>{let o=t[a];return n.concat(Array.isArray(o)?o.map(c=>[a,c]):[[a,o]])},[]))}function UN(t,n){let a=eh(t);return n&&n.forEach((o,c)=>{a.has(c)||n.getAll(c).forEach(l=>{a.append(c,l)})}),a}var ku=null;function BN(){if(ku===null)try{new FormData(document.createElement("form"),0),ku=!1}catch{ku=!0}return ku}var $N=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function yp(t){return t!=null&&!$N.has(t)?(fr(!1,`"${t}" is not a valid \`encType\` for \`\`/\`\` and will default to "${Yu}"`),null):t}function HN(t,n){let a,o,c,l,d;if(LN(t)){let m=t.getAttribute("action");o=m?Na(m,n):null,a=t.getAttribute("method")||Fu,c=yp(t.getAttribute("enctype"))||Yu,l=new FormData(t)}else if(ON(t)||zN(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a `,_=>`${M}-${_.id}`)}const E=w`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${y(n.skinTones,(N,T)=>w`
${N}
`,N=>N)}
${y(n.currentEmojisWithCategories,(N,T)=>w`
${C(N.emojis,n.searchMode,"emo")}
`,N=>N.category)}
`,k=(N,T)=>{for(const M of t.querySelectorAll(`[${N}]`))T(M,M.getAttribute(N))};if(p){t.appendChild(E);for(const N of["click","focusout","input","keydown","keyup"])k(`data-on-${N}`,(T,M)=>{T.addEventListener(N,o[M])});k("data-ref",(N,T)=>{l[T]=N}),d.addEventListener("abort",()=>{t.removeChild(E)})}k("data-action",(N,T)=>{let M=m.get(T);M||m.set(T,M=new WeakSet),M.has(N)||(M.add(N),c[T](N))})}const md=typeof queueMicrotask=="function"?queueMicrotask:t=>Promise.resolve().then(t);function oO(t){let n=!1,a;const o=new Map,c=new Set;let l;const d=()=>{if(n)return;const g=[...c];c.clear();try{for(const v of g)v()}finally{l=!1,c.size&&(l=!0,md(d))}},m=new Proxy({},{get(g,v){if(a){let b=o.get(v);b||(b=new Set,o.set(v,b)),b.add(a)}return g[v]},set(g,v,b){if(g[v]!==b){g[v]=b;const w=o.get(v);if(w){for(const y of w)c.add(y);l||(l=!0,md(d))}}return!0}}),p=g=>{const v=()=>{const b=a;a=v;try{return g()}finally{a=b}};return v()};return t.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function qp(t,n,a){if(t.length!==n.length)return!1;for(let o=0;o{c.disconnect()})),c.observe(t)}}const Kp=[],{assign:$u}=Object;function lO(t,n){const a={},o=new AbortController,c=o.signal,{state:l,createEffect:d}=oO(c),m=new Map;$u(l,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),$u(l,n),$u(l,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:kD,isRtl:!1,currentGroupIndex:0,groups:Hp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{l.currentGroup!==l.groups[l.currentGroupIndex]&&(l.currentGroup=l.groups[l.currentGroupIndex])});const p=B=>{t.getElementById(B).focus()},g=B=>t.getElementById(`emo-${B.id}`),v=(B,ie)=>{a.rootElement.dispatchEvent(new CustomEvent(B,{detail:ie,bubbles:!0,composed:!0}))},b=(B,ie)=>B.id===ie.id,w=(B,ie)=>{const{category:we,emojis:Ce}=B,{category:ze,emojis:Ke}=ie;return we!==ze?!1:qp(Ce,Ke,b)},y=B=>{qp(l.currentEmojis,B,b)||(l.currentEmojis=B)},C=B=>{l.searchMode!==B&&(l.searchMode=B)},S=B=>{qp(l.currentEmojisWithCategories,B,w)||(l.currentEmojisWithCategories=B)},E=(B,ie)=>ie&&B.skins&&B.skins[ie]||B.unicode,T={labelWithSkin:(B,ie)=>VD([B.name||E(B,ie),B.annotation,...B.shortcodes||Kp].filter(Boolean)).join(", "),titleForEmoji:B=>B.annotation||(B.shortcodes||Kp).join(", "),unicodeWithSkin:E},M={onClickSkinToneButton:X,onEmojiClick:D,onNavClick:ae,onNavKeydown:re,onSearchKeydown:Z,onSkinToneOptionsClick:H,onSkinToneOptionsFocusOut:ge,onSkinToneOptionsKeydown:xe,onSkinToneOptionsKeyup:q,onSearchInput:me},_={calculateEmojiGridStyle:te,updateOnIntersection:K};let R=!0;d(()=>{sO(t,l,T,M,_,a,c,m,R),R=!1}),l.emojiVersion||Vp().then(B=>{B||(l.message=l.i18n.emojiUnsupportedMessage)}),d(()=>{async function B(){let ie=!1;const we=setTimeout(()=>{ie=!0,l.message=l.i18n.loadingMessage},ND);try{await l.database.ready(),l.databaseLoaded=!0}catch(Ce){console.error(Ce),l.message=l.i18n.networkErrorMessage}finally{clearTimeout(we),ie&&(ie=!1,l.message="")}}l.database&&B()}),d(()=>{l.pickerStyle=` + */const FT=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],zj=Ra("X",FT),zg=ET,Pg=kT,YT=f.forwardRef(({className:t,inset:n,children:a,...o},c)=>s.jsxs(Aj,{ref:c,className:pe("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",n&&"pl-8",t),...o,children:[a,s.jsx(LT,{className:"ml-auto"})]}));YT.displayName=Aj.displayName;const qT=f.forwardRef(({className:t,...n},a)=>s.jsx(_j,{ref:a,className:pe("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",t),...n}));qT.displayName=_j.displayName;const Fd=f.forwardRef(({className:t,sideOffset:n=4,...a},o)=>s.jsx(TT,{children:s.jsx(Sj,{ref:o,sideOffset:n,className:pe("z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",t),...a})}));Fd.displayName=Sj.displayName;const Vl=f.forwardRef(({className:t,inset:n,...a},o)=>s.jsx(Ej,{ref:o,className:pe("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",n&&"pl-8",t),...a}));Vl.displayName=Ej.displayName;const KT=f.forwardRef(({className:t,children:n,checked:a,...o},c)=>s.jsxs(kj,{ref:c,className:pe("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),checked:a,...o,children:[s.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(Mj,{children:s.jsx(Oj,{className:"h-4 w-4"})})}),n]}));KT.displayName=kj.displayName;const WT=f.forwardRef(({className:t,children:n,...a},o)=>s.jsxs(Tj,{ref:o,className:pe("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...a,children:[s.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(Mj,{children:s.jsx(BT,{className:"h-2 w-2 fill-current"})})}),n]}));WT.displayName=Tj.displayName;const Ig=f.forwardRef(({className:t,inset:n,...a},o)=>s.jsx(Nj,{ref:o,className:pe("px-2 py-1.5 text-sm font-semibold",n&&"pl-8",t),...a}));Ig.displayName=Nj.displayName;const Fl=f.forwardRef(({className:t,...n},a)=>s.jsx(Rj,{ref:a,className:pe("-mx-1 my-1 h-px bg-muted",t),...n}));Fl.displayName=Rj.displayName;const zp=768;function XT(){const[t,n]=f.useState(void 0);return f.useEffect(()=>{const a=window.matchMedia(`(max-width: ${zp-1}px)`),o=()=>{n(window.innerWidtha.removeEventListener("change",o)},[]),!!t}const _e=f.forwardRef(({className:t,type:n,...a},o)=>s.jsx("input",{type:n,className:pe("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),ref:o,...a}));_e.displayName="Input";var ZT=Object.defineProperty,Pj=(t,n)=>ZT(t,"name",{value:n,configurable:!0}),b0="horizontal",QT=["horizontal","vertical"],JT=f.forwardRef(Pj(function(n,a){const{decorative:o,orientation:c=b0,...l}=n,d=Ij(c)?c:b0,p=o?{role:"none"}:{"aria-orientation":d==="vertical"?d:void 0,role:"separator"};return s.jsx(Me.div,{"data-orientation":d,...p,...l,ref:a})},"Separator"));function Ij(t){return QT.includes(t)}Pj(Ij,"isValidOrientation");var Uj=JT;const Bj=f.forwardRef(({className:t,orientation:n="horizontal",decorative:a=!0,...o},c)=>s.jsx(Uj,{ref:c,decorative:a,orientation:n,className:pe("shrink-0 bg-border",n==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",t),...o}));Bj.displayName=Uj.displayName;var e7=Object.defineProperty,Wn=(t,n)=>e7(t,"name",{value:n,configurable:!0}),Ug="Dialog",[$j,BP]=bn(Ug),[t7,Rr]=$j(Ug),Bg=Wn(t=>{const{__scopeDialog:n,children:a,open:o,defaultOpen:c,onOpenChange:l,modal:d=!0}=t,m=f.useRef(null),p=f.useRef(null),[g,b]=Vr({prop:o,defaultProp:c??!1,onChange:l,caller:Ug}),[v,w]=f.useState(0),[y,C]=f.useState(0);return s.jsx(t7,{scope:n,triggerRef:m,contentRef:p,contentId:nn(),titleId:nn(),descriptionId:nn(),titlePresent:v>0,descriptionPresent:y>0,setTitleCount:w,setDescriptionCount:C,open:g,onOpenChange:b,onOpenToggle:f.useCallback(()=>b(S=>!S),[b]),modal:d,children:a})},"Dialog"),n7="DialogTrigger",r7=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,...c}=n,l=Rr(n7,o),d=Pe(a,l.triggerRef);return s.jsx(Me.button,{type:"button","aria-haspopup":"dialog","aria-expanded":l.open,"aria-controls":l.open?l.contentId:void 0,"data-state":Kd(l.open),...c,ref:d,onClick:Ce(n.onClick,l.onOpenToggle)})},"DialogTrigger")),Hj="DialogPortal",[a7,Gj]=$j(Hj,{forceMount:void 0}),$g=Wn(t=>{const{__scopeDialog:n,forceMount:a,children:o,container:c}=t,l=Rr(Hj,n);return s.jsx(a7,{scope:n,forceMount:a,children:f.Children.map(o,d=>s.jsx(fn,{present:a||l.open,children:s.jsx(rc,{asChild:!0,container:c,children:d})}))})},"DialogPortal"),jh="DialogOverlay",oc=f.forwardRef(Wn(function(n,a){const o=Gj(jh,n.__scopeDialog),{forceMount:c=o.forceMount,...l}=n,d=Rr(jh,n.__scopeDialog);return d.modal?s.jsx(fn,{present:c||d.open,children:s.jsx(o7,{...l,ref:a})}):null},"DialogOverlay")),s7=Er("DialogOverlay.RemoveScroll"),o7=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,...c}=n,l=Rr(jh,o),d=hw(),m=Pe(a,d);return s.jsx(ac,{as:s7,allowPinchZoom:!0,shards:[l.contentRef],children:s.jsx(Me.div,{"data-state":Kd(l.open),...c,ref:m,style:{pointerEvents:"auto",...c.style}})})},"DialogOverlayImpl")),Yl="DialogContent",ic=f.forwardRef(Wn(function(n,a){const o=Gj(Yl,n.__scopeDialog),{forceMount:c=o.forceMount,...l}=n,d=Rr(Yl,n.__scopeDialog);return s.jsx(fn,{present:c||d.open,children:d.modal?s.jsx(i7,{...l,ref:a}):s.jsx(l7,{...l,ref:a})})},"DialogContent")),i7=f.forwardRef(Wn(function(n,a){const o=Rr(Yl,n.__scopeDialog),c=f.useRef(null),l=Pe(a,o.contentRef,c);return f.useEffect(()=>{const d=c.current;if(d)return $d(d)},[]),s.jsx(Vj,{...n,ref:l,trapFocus:o.open,disableOutsidePointerEvents:o.open,onCloseAutoFocus:Ce(n.onCloseAutoFocus,d=>{var m;d.preventDefault(),(m=o.triggerRef.current)==null||m.focus()}),onPointerDownOutside:Ce(n.onPointerDownOutside,d=>{const m=d.detail.originalEvent,p=m.button===0&&m.ctrlKey===!0;(m.button===2||p)&&d.preventDefault()}),onFocusOutside:Ce(n.onFocusOutside,d=>d.preventDefault())})},"DialogContentModal")),l7=f.forwardRef(Wn(function(n,a){const o=Rr(Yl,n.__scopeDialog),c=f.useRef(!1),l=f.useRef(!1);return s.jsx(Vj,{...n,ref:a,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:d=>{var m,p;(m=n.onCloseAutoFocus)==null||m.call(n,d),d.defaultPrevented||(c.current||(p=o.triggerRef.current)==null||p.focus(),d.preventDefault()),c.current=!1,l.current=!1},onInteractOutside:d=>{var g,b;(g=n.onInteractOutside)==null||g.call(n,d),d.defaultPrevented||(c.current=!0,d.detail.originalEvent.type==="pointerdown"&&(l.current=!0));const m=d.target;((b=o.triggerRef.current)==null?void 0:b.contains(m))&&d.preventDefault(),d.detail.originalEvent.type==="focusin"&&l.current&&d.preventDefault()}})},"DialogContentNonModal")),Vj=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,trapFocus:c,onOpenAutoFocus:l,onCloseAutoFocus:d,...m}=n,p=Rr(Yl,o);return Ni(),s.jsx(s.Fragment,{children:s.jsx(Md,{asChild:!0,loop:!0,trapped:c,onMountAutoFocus:l,onUnmountAutoFocus:d,children:s.jsx(nc,{role:"dialog",id:p.contentId,"aria-describedby":p.descriptionPresent?p.descriptionId:void 0,"aria-labelledby":p.titlePresent?p.titleId:void 0,"data-state":Kd(p.open),...m,ref:a,deferPointerDownOutside:!0,onDismiss:()=>p.onOpenChange(!1)})})})},"DialogContentImpl")),c7="DialogTitle",Yd=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,...c}=n,l=Rr(c7,o),{setTitleCount:d}=l;return St(()=>(d(m=>m+1),()=>d(m=>m-1)),[d]),s.jsx(Me.h2,{id:l.titleId,...c,ref:a})},"DialogTitle")),u7="DialogDescription",qd=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,...c}=n,l=Rr(u7,o),{setDescriptionCount:d}=l;return St(()=>(d(m=>m+1),()=>d(m=>m-1)),[d]),s.jsx(Me.p,{id:l.descriptionId,...c,ref:a})},"DialogDescription")),d7="DialogClose",Fj=f.forwardRef(Wn(function(n,a){const{__scopeDialog:o,...c}=n,l=Rr(d7,o);return s.jsx(Me.button,{type:"button",...c,ref:a,onClick:Ce(n.onClick,()=>l.onOpenChange(!1))})},"DialogClose"));function Kd(t){return t?"open":"closed"}Wn(Kd,"getState");const Yj=Bg,f7=$g,qj=f.forwardRef(({className:t,...n},a)=>s.jsx(oc,{className:pe("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...n,ref:a}));qj.displayName=oc.displayName;const m7=ji("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",{variants:{side:{top:"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",bottom:"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",left:"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",right:"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"}},defaultVariants:{side:"right"}}),Hg=f.forwardRef(({side:t="right",className:n,children:a,...o},c)=>s.jsxs(f7,{children:[s.jsx(qj,{}),s.jsxs(ic,{ref:c,className:pe(m7({side:t}),n),...o,children:[s.jsxs(Fj,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary",children:[s.jsx(zj,{className:"h-4 w-4"}),s.jsx("span",{className:"sr-only",children:"Close"})]}),a]})]}));Hg.displayName=ic.displayName;const Gg=({className:t,...n})=>s.jsx("div",{className:pe("flex flex-col space-y-2 text-center sm:text-left",t),...n});Gg.displayName="SheetHeader";const Vg=f.forwardRef(({className:t,...n},a)=>s.jsx(Yd,{ref:a,className:pe("text-lg font-semibold text-foreground",t),...n}));Vg.displayName=Yd.displayName;const Fg=f.forwardRef(({className:t,...n},a)=>s.jsx(qd,{ref:a,className:pe("text-sm text-muted-foreground",t),...n}));Fg.displayName=qd.displayName;function Ue({className:t,...n}){return s.jsx("div",{className:pe("animate-pulse rounded-md bg-primary/10",t),...n})}var p7=Object.defineProperty,h7=(t,n)=>p7(t,"name",{value:n,configurable:!0}),Kj=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),g7=f.forwardRef(h7(function(n,a){return s.jsx(Me.span,{...n,ref:a,style:{...Kj,...n.style}})},"VisuallyHidden")),x7=g7,b7=Object.defineProperty,tn=(t,n)=>b7(t,"name",{value:n,configurable:!0}),[Yg,$P]=bn("Tooltip",[Cs]),qg=Cs(),v7="TooltipProvider",y7=700,Ch="tooltip.open",[w7,Kg]=Yg(v7),j7=tn(t=>{const{__scopeTooltip:n,delayDuration:a=y7,skipDelayDuration:o=300,disableHoverableContent:c=!1,children:l}=t,d=f.useRef(!0),m=f.useRef(!1),p=f.useRef(0);return f.useEffect(()=>{const g=p.current;return()=>window.clearTimeout(g)},[]),s.jsx(w7,{scope:n,isOpenDelayedRef:d,delayDuration:a,onOpen:f.useCallback(()=>{o<=0||(window.clearTimeout(p.current),d.current=!1)},[o]),onClose:f.useCallback(()=>{o<=0||(window.clearTimeout(p.current),p.current=window.setTimeout(()=>d.current=!0,o))},[o]),isPointerInTransitRef:m,onPointerInTransitChange:f.useCallback(g=>{m.current=g},[]),disableHoverableContent:c,children:l})},"TooltipProvider"),Sh="Tooltip",[C7,lc]=Yg(Sh),S7=tn(t=>{const{__scopeTooltip:n,children:a,open:o,defaultOpen:c,onOpenChange:l,disableHoverableContent:d,delayDuration:m}=t,p=Kg(Sh,t.__scopeTooltip),g=qg(n),[b,v]=f.useState(null),[w,y]=f.useState(void 0),C=nn(),S=f.useRef(0),N=d??p.disableHoverableContent,E=m??p.delayDuration,T=f.useRef(!1),[M,k]=Vr({prop:o,defaultProp:c??!1,onChange:tn(I=>{I?(p.onOpen(),document.dispatchEvent(new CustomEvent(Ch))):p.onClose(),l==null||l(I)},"onChange"),caller:Sh}),_=f.useMemo(()=>M?T.current?"delayed-open":"instant-open":"closed",[M]),R=f.useCallback(()=>{window.clearTimeout(S.current),S.current=0,T.current=!1,k(!0)},[k]),L=f.useCallback(()=>{window.clearTimeout(S.current),S.current=0,k(!1)},[k]),ne=f.useCallback(()=>{window.clearTimeout(S.current),S.current=window.setTimeout(()=>{T.current=!0,k(!0),S.current=0},E)},[E,k]);f.useEffect(()=>()=>{S.current&&(window.clearTimeout(S.current),S.current=0)},[]);const X=w??C;return s.jsx(zd,{...g,children:s.jsx(C7,{scope:n,contentId:X,setContentId:y,open:M,stateAttribute:_,trigger:b,onTriggerChange:v,onTriggerEnter:f.useCallback(()=>{p.isOpenDelayedRef.current?ne():R()},[p.isOpenDelayedRef,ne,R]),onTriggerLeave:f.useCallback(()=>{N?L():(window.clearTimeout(S.current),S.current=0)},[L,N]),onOpen:R,onClose:L,disableHoverableContent:N,children:a})})},"Tooltip"),v0="TooltipTrigger",N7=f.forwardRef(tn(function(n,a){const{__scopeTooltip:o,...c}=n,l=lc(v0,o),d=Kg(v0,o),m=qg(o),p=f.useRef(null),g=Pe(a,p,l.onTriggerChange),b=f.useRef(!1),v=f.useRef(!1),w=f.useCallback(()=>b.current=!1,[]);return f.useEffect(()=>()=>document.removeEventListener("pointerup",w),[w]),s.jsx(Pd,{asChild:!0,...m,children:s.jsx(Me.button,{"aria-describedby":l.open?l.contentId:void 0,"data-state":l.stateAttribute,...c,ref:g,onPointerMove:Ce(n.onPointerMove,y=>{y.pointerType!=="touch"&&!v.current&&!d.isPointerInTransitRef.current&&(l.onTriggerEnter(),v.current=!0)}),onPointerLeave:Ce(n.onPointerLeave,()=>{l.onTriggerLeave(),v.current=!1}),onPointerDown:Ce(n.onPointerDown,()=>{l.open&&l.onClose(),b.current=!0,document.addEventListener("pointerup",w,{once:!0})}),onFocus:Ce(n.onFocus,()=>{b.current||l.onOpen()}),onBlur:Ce(n.onBlur,l.onClose),onClick:Ce(n.onClick,l.onClose)})})},"TooltipTrigger")),Wj="TooltipPortal",[E7,k7]=Yg(Wj,{forceMount:void 0}),T7=tn(t=>{const{__scopeTooltip:n,forceMount:a,children:o,container:c}=t,l=lc(Wj,n);return s.jsx(E7,{scope:n,forceMount:a,children:s.jsx(fn,{present:a||l.open,children:s.jsx(rc,{asChild:!0,container:c,children:o})})})},"TooltipPortal"),ql="TooltipContent",M7=f.forwardRef(tn(function(n,a){const o=k7(ql,n.__scopeTooltip),{forceMount:c=o.forceMount,side:l="top",...d}=n,m=lc(ql,n.__scopeTooltip);return s.jsx(fn,{present:c||m.open,children:m.disableHoverableContent?s.jsx(Xj,{side:l,...d,ref:a}):s.jsx(R7,{side:l,...d,ref:a})})},"TooltipContent")),R7=f.forwardRef(tn(function(n,a){const o=lc(ql,n.__scopeTooltip),c=Kg(ql,n.__scopeTooltip),l=f.useRef(null),d=Pe(a,l),[m,p]=f.useState(null),{trigger:g,onClose:b}=o,v=l.current,{onPointerInTransitChange:w}=c,y=f.useCallback(()=>{p(null),w(!1)},[w]),C=f.useCallback((S,N)=>{const E=S.currentTarget,T={x:S.clientX,y:S.clientY},M=Zj(T,E.getBoundingClientRect()),k=Qj(T,M),_=Jj(N.getBoundingClientRect()),R=tC([...k,..._]);p(R),w(!0)},[w]);return f.useEffect(()=>()=>y(),[y]),f.useEffect(()=>{if(g&&v){const S=tn(E=>C(E,v),"handleTriggerLeave"),N=tn(E=>C(E,g),"handleContentLeave");return g.addEventListener("pointerleave",S),v.addEventListener("pointerleave",N),()=>{g.removeEventListener("pointerleave",S),v.removeEventListener("pointerleave",N)}}},[g,v,C,y]),f.useEffect(()=>{if(m){const S=tn(N=>{const E=N.target,T={x:N.clientX,y:N.clientY},M=(g==null?void 0:g.contains(E))||(v==null?void 0:v.contains(E)),k=!eC(T,m);M?y():k&&(y(),b())},"handleTrackPointerGrace");return document.addEventListener("pointermove",S),()=>document.removeEventListener("pointermove",S)}},[g,v,m,b,y]),s.jsx(Xj,{...n,ref:d})},"TooltipContentHoverable")),A7=Q2("TooltipContent"),Xj=f.forwardRef(tn(function(n,a){const{__scopeTooltip:o,children:c,"aria-label":l,id:d,onEscapeKeyDown:m,onPointerDownOutside:p,...g}=n,b=lc(ql,o),v=qg(o),{onClose:w}=b;f.useEffect(()=>(document.addEventListener(Ch,w),()=>document.removeEventListener(Ch,w)),[w]),f.useEffect(()=>{if(b.trigger){const C=tn(S=>{S.target instanceof Node&&S.target.contains(b.trigger)&&w()},"handleScroll");return window.addEventListener("scroll",C,{capture:!0}),()=>window.removeEventListener("scroll",C,{capture:!0})}},[b.trigger,w]);const{setContentId:y}=b;return St(()=>(y(d),()=>{y(void 0)}),[d,y]),s.jsx(nc,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:m,onPointerDownOutside:p,onFocusOutside:C=>C.preventDefault(),onDismiss:w,children:s.jsxs(Id,{"data-state":b.stateAttribute,role:l?void 0:"tooltip",id:l?void 0:b.contentId,...v,...g,ref:a,style:{...g.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[s.jsx(A7,{children:c}),l?s.jsx(x7,{id:b.contentId,role:"tooltip",children:l}):null]})})},"TooltipContentImpl"));function Zj(t,n){const a=Math.abs(n.top-t.y),o=Math.abs(n.bottom-t.y),c=Math.abs(n.right-t.x),l=Math.abs(n.left-t.x);switch(Math.min(a,o,c,l)){case l:return"left";case c:return"right";case a:return"top";case o:return"bottom";default:throw new Error("unreachable")}}tn(Zj,"getExitSideFromRect");function Qj(t,n,a=5){const o=[];switch(n){case"top":o.push({x:t.x-a,y:t.y+a},{x:t.x+a,y:t.y+a});break;case"bottom":o.push({x:t.x-a,y:t.y-a},{x:t.x+a,y:t.y-a});break;case"left":o.push({x:t.x+a,y:t.y-a},{x:t.x+a,y:t.y+a});break;case"right":o.push({x:t.x-a,y:t.y-a},{x:t.x-a,y:t.y+a});break}return o}tn(Qj,"getPaddedExitPoints");function Jj(t){const{top:n,right:a,bottom:o,left:c}=t;return[{x:c,y:n},{x:a,y:n},{x:a,y:o},{x:c,y:o}]}tn(Jj,"getPointsFromRect");function eC(t,n){const{x:a,y:o}=t;let c=!1;for(let l=0,d=n.length-1;lo!=w>o&&a<(v-g)*(o-b)/(w-b)+g&&(c=!c)}return c}tn(eC,"isPointInPolygon");function tC(t){const n=t.slice();return n.sort((a,o)=>a.xo.x?1:a.yo.y?1:0),nC(n)}tn(tC,"getHull");function nC(t){if(t.length<=1)return t.slice();const n=[];for(let o=0;o=2;){const l=n[n.length-1],d=n[n.length-2];if((l.x-d.x)*(c.y-d.y)>=(l.y-d.y)*(c.x-d.x))n.pop();else break}n.push(c)}n.pop();const a=[];for(let o=t.length-1;o>=0;o--){const c=t[o];for(;a.length>=2;){const l=a[a.length-1],d=a[a.length-2];if((l.x-d.x)*(c.y-d.y)>=(l.y-d.y)*(c.x-d.x))a.pop();else break}a.push(c)}return a.pop(),n.length===1&&a.length===1&&n[0].x===a[0].x&&n[0].y===a[0].y?n:n.concat(a)}tn(nC,"getHullPresorted");var _7=j7,D7=S7,O7=N7,L7=T7,rC=M7;const aC=_7,z7=D7,P7=O7,sC=f.forwardRef(({className:t,sideOffset:n=4,...a},o)=>s.jsx(L7,{children:s.jsx(rC,{ref:o,sideOffset:n,className:pe("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",t),...a})}));sC.displayName=rC.displayName;const I7="sidebar_state",U7=3600*24*7,B7="16rem",$7="18rem",H7="3rem",G7="b",oC=f.createContext(null);function Wd(){const t=f.useContext(oC);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}const iC=f.forwardRef(({defaultOpen:t=!0,open:n,onOpenChange:a,className:o,style:c,children:l,...d},m)=>{const p=XT(),[g,b]=f.useState(!1),[v,w]=f.useState(t),y=n??v,C=f.useCallback(T=>{const M=typeof T=="function"?T(y):T;a?a(M):w(M),document.cookie=`${I7}=${M}; path=/; max-age=${U7}`},[a,y]),S=f.useCallback(()=>p?b(T=>!T):C(T=>!T),[p,C,b]);f.useEffect(()=>{const T=M=>{M.key===G7&&(M.metaKey||M.ctrlKey)&&(M.preventDefault(),S())};return window.addEventListener("keydown",T),()=>window.removeEventListener("keydown",T)},[S]);const N=y?"expanded":"collapsed",E=f.useMemo(()=>({state:N,open:y,setOpen:C,isMobile:p,openMobile:g,setOpenMobile:b,toggleSidebar:S}),[N,y,C,p,g,b,S]);return s.jsx(oC.Provider,{value:E,children:s.jsx(aC,{delayDuration:0,children:s.jsx("div",{style:{"--sidebar-width":B7,"--sidebar-width-icon":H7,...c},className:pe("group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",o),ref:m,...d,children:l})})})});iC.displayName="SidebarProvider";const lC=f.forwardRef(({side:t="left",variant:n="sidebar",collapsible:a="offcanvas",className:o,children:c,...l},d)=>{const{isMobile:m,state:p,openMobile:g,setOpenMobile:b}=Wd();return a==="none"?s.jsx("div",{className:pe("flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",o),ref:d,...l,children:c}):m?s.jsx(Yj,{open:g,onOpenChange:b,...l,children:s.jsxs(Hg,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":$7},side:t,children:[s.jsxs(Gg,{className:"sr-only",children:[s.jsx(Vg,{children:"Sidebar"}),s.jsx(Fg,{children:"Displays the mobile sidebar."})]}),s.jsx("div",{className:"flex h-full w-full flex-col",children:c})]})}):s.jsxs("div",{ref:d,className:"group peer hidden text-sidebar-foreground md:block","data-state":p,"data-collapsible":p==="collapsed"?a:"","data-variant":n,"data-side":t,children:[s.jsx("div",{className:pe("relative w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",n==="floating"||n==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]":"group-data-[collapsible=icon]:w-[--sidebar-width-icon]")}),s.jsx("div",{className:pe("fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex",t==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",n==="floating"||n==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]":"group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l",o),...l,children:s.jsx("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow",children:c})})]})});lC.displayName="Sidebar";const cC=f.forwardRef(({className:t,onClick:n,...a},o)=>{const{toggleSidebar:c}=Wd();return s.jsxs(ue,{ref:o,"data-sidebar":"trigger",variant:"ghost",size:"icon",className:pe("h-7 w-7",t),onClick:l=>{n==null||n(l),c()},...a,children:[s.jsx(HT,{}),s.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})});cC.displayName="SidebarTrigger";const uC=f.forwardRef(({className:t,...n},a)=>{const{toggleSidebar:o}=Wd();return s.jsx("button",{ref:a,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:o,title:"Toggle Sidebar",className:pe("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex","[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",t),...n})});uC.displayName="SidebarRail";const dC=f.forwardRef(({className:t,...n},a)=>s.jsx("main",{ref:a,className:pe("relative flex w-full flex-1 flex-col bg-background","md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",t),...n}));dC.displayName="SidebarInset";const V7=f.forwardRef(({className:t,...n},a)=>s.jsx(_e,{ref:a,"data-sidebar":"input",className:pe("h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",t),...n}));V7.displayName="SidebarInput";const fC=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"header",className:pe("flex flex-col gap-2 p-2",t),...n}));fC.displayName="SidebarHeader";const F7=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"footer",className:pe("flex flex-col gap-2 p-2",t),...n}));F7.displayName="SidebarFooter";const Y7=f.forwardRef(({className:t,...n},a)=>s.jsx(Bj,{ref:a,"data-sidebar":"separator",className:pe("mx-2 w-auto bg-sidebar-border",t),...n}));Y7.displayName="SidebarSeparator";const mC=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"content",className:pe("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...n}));mC.displayName="SidebarContent";const Nh=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"group",className:pe("relative flex w-full min-w-0 flex-col p-2",t),...n}));Nh.displayName="SidebarGroup";const pC=f.forwardRef(({className:t,asChild:n=!1,...a},o)=>{const c=n?wi:"div";return s.jsx(c,{ref:o,"data-sidebar":"group-label",className:pe("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",t),...a})});pC.displayName="SidebarGroupLabel";const q7=f.forwardRef(({className:t,asChild:n=!1,...a},o)=>{const c=n?wi:"button";return s.jsx(c,{ref:o,"data-sidebar":"group-action",className:pe("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","group-data-[collapsible=icon]:hidden",t),...a})});q7.displayName="SidebarGroupAction";const Eh=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"group-content",className:pe("w-full text-sm",t),...n}));Eh.displayName="SidebarGroupContent";const kh=f.forwardRef(({className:t,...n},a)=>s.jsx("ul",{ref:a,"data-sidebar":"menu",className:pe("flex w-full min-w-0 flex-col gap-1",t),...n}));kh.displayName="SidebarMenu";const Th=f.forwardRef(({className:t,...n},a)=>s.jsx("li",{ref:a,"data-sidebar":"menu-item",className:pe("group/menu-item relative",t),...n}));Th.displayName="SidebarMenuItem";const K7=ji("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:!p-0"}},defaultVariants:{variant:"default",size:"default"}}),Mh=f.forwardRef(({asChild:t=!1,isActive:n=!1,variant:a="default",size:o="default",tooltip:c,className:l,...d},m)=>{const p=t?wi:"button",{isMobile:g,state:b}=Wd(),v=s.jsx(p,{ref:m,"data-sidebar":"menu-button","data-size":o,"data-active":n,className:pe(K7({variant:a,size:o}),l),...d});return c?(typeof c=="string"&&(c={children:c}),s.jsxs(z7,{children:[s.jsx(P7,{asChild:!0,children:v}),s.jsx(sC,{side:"right",align:"center",hidden:b!=="collapsed"||g,...c})]})):v});Mh.displayName="SidebarMenuButton";const W7=f.forwardRef(({className:t,asChild:n=!1,showOnHover:a=!1,...o},c)=>{const l=n?wi:"button";return s.jsx(l,{ref:c,"data-sidebar":"menu-action",className:pe("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",a&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",t),...o})});W7.displayName="SidebarMenuAction";const X7=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,"data-sidebar":"menu-badge",className:pe("pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",t),...n}));X7.displayName="SidebarMenuBadge";const Z7=f.forwardRef(({className:t,showIcon:n=!1,...a},o)=>{const c=f.useMemo(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return s.jsxs("div",{ref:o,"data-sidebar":"menu-skeleton",className:pe("flex h-8 items-center gap-2 rounded-md px-2",t),...a,children:[n&&s.jsx(Ue,{className:"size-4 rounded-md","data-sidebar":"menu-skeleton-icon"}),s.jsx(Ue,{className:"h-4 max-w-[--skeleton-width] flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":c}})]})});Z7.displayName="SidebarMenuSkeleton";const Q7=f.forwardRef(({className:t,...n},a)=>s.jsx("ul",{ref:a,"data-sidebar":"menu-sub",className:pe("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5","group-data-[collapsible=icon]:hidden",t),...n}));Q7.displayName="SidebarMenuSub";const J7=f.forwardRef(({...t},n)=>s.jsx("li",{ref:n,...t}));J7.displayName="SidebarMenuSubItem";const eM=f.forwardRef(({asChild:t=!1,size:n="md",isActive:a,className:o,...c},l)=>{const d=t?wi:"a";return s.jsx(d,{ref:l,"data-sidebar":"menu-sub-button","data-size":n,"data-active":a,className:pe("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",n==="sm"&&"text-xs",n==="md"&&"text-sm","group-data-[collapsible=icon]:hidden",o),...c})});eM.displayName="SidebarMenuSubButton";const tM=[],nM=[{label:"Overview",items:[{title:"Dashboard",url:"/",icon:A2,end:!0,permission:"overview"},{title:"Console",url:"/logs",icon:M2,permission:"logs"}]},{label:"Access & Logs",items:[{title:"Users",url:"/users",icon:rh,permission:"users.view"},{title:"Groups",url:"/groups",icon:qu,permission:"users.view"},{title:"Tickets",url:"/tickets",icon:is,permission:"overview"},{title:"Transcripts",url:"/transcripts",icon:Ul,permission:"transcripts"}]},{label:"Configuration",items:[{title:"Bot Settings",url:"/configs?file=supportbot",icon:cg},{title:"Ticket Panel",url:"/configs?file=ticket-panel",icon:is},{title:"AI Assistant",url:"/configs?file=supportbot-ai",icon:og},{title:"Messages",url:"/configs?file=messages",icon:ug},{title:"Staff Roles",url:"/configs?file=supportbot&tab=Roles",icon:rh},{title:"Commands",url:"/configs?file=commands",icon:ds}]},{label:"System",items:[{title:"Addons",url:"/addons",icon:dg,permission:"settings.view"},{title:"Addon Builder",url:"/addons/builder",icon:ds,permission:"settings.update"},{title:"Dashboard Settings",url:"/settings",icon:qs,permission:"settings.view"}]}];function y0(t){return new URL(t,"http://x").searchParams.get("file")}function rM(){const{branding:t}=Ed(),{permissions:n}=Yt(),{stats:a}=kd(),{files:o}=$2(),[c]=wd(),l=c.get("file"),d=sd(n,"supportbot")&&o.length>0?{label:"Addons",items:o.map(C=>({title:H2(C),url:`/configs?file=${_l(C)}`,icon:dg,end:!1}))}:null,m=tM.filter(C=>!C.permission||Rn(n,C.permission)),p=nM.map(C=>({...C,items:C.items.filter(S=>{if(S.permission)return Rn(n,S.permission);const N=y0(S.url);return N&&S.url.includes("/configs")?sd(n,N):!0})})).filter(C=>C.items.length>0),g=d?[...p,d]:p,[b,v]=f.useState(null);f.useEffect(()=>{let C=!1;return Ne.getGuildResources().then(S=>{!C&&S.data&&v(S.data)}).catch(()=>{}),()=>{C=!0}},[]);const w=(b==null?void 0:b.guildName)||(a?`${a.servers} Server${a.servers===1?"":"s"}`:"Connected Guild"),y=b==null?void 0:b.guildIcon;return s.jsxs(lC,{collapsible:"icon",className:"border-r border-sidebar-border",children:[s.jsxs(fC,{className:"gap-3 p-4",children:[s.jsxs("div",{className:"flex items-center gap-2 px-1",children:[t.hasFavicon&&t.faviconUrl?s.jsx("img",{src:`${t.faviconUrl}${t.updatedAt?`?v=${t.updatedAt}`:""}`,alt:"",className:"size-7 shrink-0 rounded-md object-contain"}):null,s.jsx("span",{className:"truncate text-lg font-bold tracking-tight",children:t.title})]}),s.jsxs(zg,{children:[s.jsx(Pg,{asChild:!0,children:s.jsxs(ue,{variant:"outline",className:"h-10 w-full justify-between border-border bg-secondary/40 px-3 font-normal hover:bg-secondary/60",children:[s.jsxs("span",{className:"flex items-center gap-2 truncate min-w-0",children:[y?s.jsx("img",{src:y,alt:"",className:"size-5 rounded-full object-cover shrink-0"}):s.jsx("div",{className:"size-5 rounded-full bg-primary/20 text-primary flex items-center justify-center text-[10px] font-bold shrink-0",children:w.charAt(0).toUpperCase()}),s.jsx("span",{className:"truncate text-xs font-semibold text-foreground",children:w})]}),s.jsx(xe,{icon:k2,size:14,className:"text-muted-foreground shrink-0 ml-1"})]})}),s.jsxs(Fd,{className:"w-[--radix-dropdown-menu-trigger-width]",children:[s.jsxs(Vl,{disabled:!0,className:"text-xs font-medium",children:["Connected Guild: ",w]}),a?s.jsxs(Vl,{disabled:!0,className:"text-xs text-muted-foreground",children:[a.users.toLocaleString()," members tracked"]}):null]})]})]}),s.jsxs(mC,{className:"px-2",children:[s.jsx(Nh,{children:s.jsx(Eh,{children:s.jsx(kh,{children:m.map(C=>s.jsx(Th,{children:s.jsx(Mh,{asChild:!0,tooltip:C.title,children:s.jsxs(th,{to:C.url,end:C.end,className:({isActive:S})=>pe(S&&"bg-sidebar-accent font-medium"),children:[s.jsx(xe,{icon:C.icon,size:18}),s.jsx("span",{children:C.title})]})})},C.title))})})}),g.map(C=>s.jsxs(Nh,{children:[s.jsx(pC,{className:"text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:C.label}),s.jsx(Eh,{children:s.jsx(kh,{children:C.items.map(S=>{const N=y0(S.url),E=!!N&&l===N&&S.url.includes("/configs");return s.jsx(Th,{children:s.jsx(Mh,{asChild:!0,tooltip:S.title,children:s.jsxs(th,{to:S.url,end:S.end,className:({isActive:T})=>pe((T||E)&&"bg-sidebar-accent font-medium"),children:[s.jsx(xe,{icon:S.icon,size:18}),s.jsx("span",{children:S.title})]})})},`${C.label}-${S.title}`)})})})]},C.label))]}),s.jsx(uC,{})]})}var w0=1,aM=.9,sM=.8,oM=.17,Pp=.1,Ip=.999,iM=.9999,lM=.99,cM=/[\\\/_+.#"@\[\(\{&]/,uM=/[\\\/_+.#"@\[\(\{&]/g,dM=/[\s-]/,hC=/[\s-]/g;function Rh(t,n,a,o,c,l,d){if(l===n.length)return c===t.length?w0:lM;var m=`${c},${l}`;if(d[m]!==void 0)return d[m];for(var p=o.charAt(l),g=a.indexOf(p,c),b=0,v,w,y,C;g>=0;)v=Rh(t,n,a,o,g+1,l+1,d),v>b&&(g===c?v*=w0:cM.test(t.charAt(g-1))?(v*=sM,y=t.slice(c,g-1).match(uM),y&&c>0&&(v*=Math.pow(Ip,y.length))):dM.test(t.charAt(g-1))?(v*=aM,C=t.slice(c,g-1).match(hC),C&&c>0&&(v*=Math.pow(Ip,C.length))):(v*=oM,c>0&&(v*=Math.pow(Ip,g-c))),t.charAt(g)!==n.charAt(l)&&(v*=iM)),(vv&&(v=w*Pp)),v>b&&(b=v),g=a.indexOf(p,g+1);return d[m]=b,b}function j0(t){return t.toLowerCase().replace(hC," ")}function fM(t,n,a){return t=a&&a.length>0?`${t+" "+a.join(" ")}`:t,Rh(t,n,j0(t),j0(n),0,0,{})}var Ml='[cmdk-group=""]',Up='[cmdk-group-items=""]',mM='[cmdk-group-heading=""]',gC='[cmdk-item=""]',C0=`${gC}:not([aria-disabled="true"])`,Ah="cmdk-item-select",ni="data-value",pM=(t,n,a)=>fM(t,n,a),xC=f.createContext(void 0),cc=()=>f.useContext(xC),bC=f.createContext(void 0),Wg=()=>f.useContext(bC),vC=f.createContext(void 0),yC=f.forwardRef((t,n)=>{let a=ri(()=>{var D,B;return{search:"",value:(B=(D=t.value)!=null?D:t.defaultValue)!=null?B:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),o=ri(()=>new Set),c=ri(()=>new Map),l=ri(()=>new Map),d=ri(()=>new Set),m=wC(t),{label:p,children:g,value:b,onValueChange:v,filter:w,shouldFilter:y,loop:C,disablePointerSelection:S=!1,vimBindings:N=!0,...E}=t,T=nn(),M=nn(),k=nn(),_=f.useRef(null),R=NM();Zs(()=>{if(b!==void 0){let D=b.trim();a.current.value=D,L.emit()}},[b]),Zs(()=>{R(6,ce)},[]);let L=f.useMemo(()=>({subscribe:D=>(d.current.add(D),()=>d.current.delete(D)),snapshot:()=>a.current,setState:(D,B,V)=>{var Z,be,K,ge;if(!Object.is(a.current[D],B)){if(a.current[D]=B,D==="search")q(),I(),R(1,H);else if(D==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let me=document.getElementById(k);me?me.focus():(Z=document.getElementById(T))==null||Z.focus()}if(R(7,()=>{var me;a.current.selectedItemId=(me=de())==null?void 0:me.id,L.emit()}),V||R(5,ce),((be=m.current)==null?void 0:be.value)!==void 0){let me=B??"";(ge=(K=m.current).onValueChange)==null||ge.call(K,me);return}}L.emit()}},emit:()=>{d.current.forEach(D=>D())}}),[]),ne=f.useMemo(()=>({value:(D,B,V)=>{var Z;B!==((Z=l.current.get(D))==null?void 0:Z.value)&&(l.current.set(D,{value:B,keywords:V}),a.current.filtered.items.set(D,X(B,V)),R(2,()=>{I(),L.emit()}))},item:(D,B)=>(o.current.add(D),B&&(c.current.has(B)?c.current.get(B).add(D):c.current.set(B,new Set([D]))),R(3,()=>{q(),I(),a.current.value||H(),L.emit()}),()=>{l.current.delete(D),o.current.delete(D),a.current.filtered.items.delete(D);let V=de();R(4,()=>{q(),(V==null?void 0:V.getAttribute("id"))===D&&H(),L.emit()})}),group:D=>(c.current.has(D)||c.current.set(D,new Set),()=>{l.current.delete(D),c.current.delete(D)}),filter:()=>m.current.shouldFilter,label:p||t["aria-label"],getDisablePointerSelection:()=>m.current.disablePointerSelection,listId:T,inputId:k,labelId:M,listInnerRef:_}),[]);function X(D,B){var V,Z;let be=(Z=(V=m.current)==null?void 0:V.filter)!=null?Z:pM;return D?be(D,a.current.search,B):0}function I(){if(!a.current.search||m.current.shouldFilter===!1)return;let D=a.current.filtered.items,B=[];a.current.filtered.groups.forEach(Z=>{let be=c.current.get(Z),K=0;be.forEach(ge=>{let me=D.get(ge);K=Math.max(me,K)}),B.push([Z,K])});let V=_.current;se().sort((Z,be)=>{var K,ge;let me=Z.getAttribute("id"),$=be.getAttribute("id");return((K=D.get($))!=null?K:0)-((ge=D.get(me))!=null?ge:0)}).forEach(Z=>{let be=Z.closest(Up);be?be.appendChild(Z.parentElement===be?Z:Z.closest(`${Up} > *`)):V.appendChild(Z.parentElement===V?Z:Z.closest(`${Up} > *`))}),B.sort((Z,be)=>be[1]-Z[1]).forEach(Z=>{var be;let K=(be=_.current)==null?void 0:be.querySelector(`${Ml}[${ni}="${encodeURIComponent(Z[0])}"]`);K==null||K.parentElement.appendChild(K)})}function H(){let D=se().find(V=>V.getAttribute("aria-disabled")!=="true"),B=D==null?void 0:D.getAttribute(ni);L.setState("value",B||void 0)}function q(){var D,B,V,Z;if(!a.current.search||m.current.shouldFilter===!1){a.current.filtered.count=o.current.size;return}a.current.filtered.groups=new Set;let be=0;for(let K of o.current){let ge=(B=(D=l.current.get(K))==null?void 0:D.value)!=null?B:"",me=(Z=(V=l.current.get(K))==null?void 0:V.keywords)!=null?Z:[],$=X(ge,me);a.current.filtered.items.set(K,$),$>0&&be++}for(let[K,ge]of c.current)for(let me of ge)if(a.current.filtered.items.get(me)>0){a.current.filtered.groups.add(K);break}a.current.filtered.count=be}function ce(){var D,B,V;let Z=de();Z&&(((D=Z.parentElement)==null?void 0:D.firstChild)===Z&&((V=(B=Z.closest(Ml))==null?void 0:B.querySelector(mM))==null||V.scrollIntoView({block:"nearest"})),Z.scrollIntoView({block:"nearest"}))}function de(){var D;return(D=_.current)==null?void 0:D.querySelector(`${gC}[aria-selected="true"]`)}function se(){var D;return Array.from(((D=_.current)==null?void 0:D.querySelectorAll(C0))||[])}function P(D){let B=se()[D];B&&L.setState("value",B.getAttribute(ni))}function W(D){var B;let V=de(),Z=se(),be=Z.findIndex(ge=>ge===V),K=Z[be+D];(B=m.current)!=null&&B.loop&&(K=be+D<0?Z[Z.length-1]:be+D===Z.length?Z[0]:Z[be+D]),K&&L.setState("value",K.getAttribute(ni))}function oe(D){let B=de(),V=B==null?void 0:B.closest(Ml),Z;for(;V&&!Z;)V=D>0?CM(V,Ml):SM(V,Ml),Z=V==null?void 0:V.querySelector(C0);Z?L.setState("value",Z.getAttribute(ni)):W(D)}let ae=()=>P(se().length-1),G=D=>{D.preventDefault(),D.metaKey?ae():D.altKey?oe(1):W(1)},O=D=>{D.preventDefault(),D.metaKey?P(0):D.altKey?oe(-1):W(-1)};return f.createElement(Me.div,{ref:n,tabIndex:-1,...E,"cmdk-root":"",onKeyDown:D=>{var B;(B=E.onKeyDown)==null||B.call(E,D);let V=D.nativeEvent.isComposing||D.keyCode===229;if(!(D.defaultPrevented||V))switch(D.key){case"n":case"j":{N&&D.ctrlKey&&G(D);break}case"ArrowDown":{G(D);break}case"p":case"k":{N&&D.ctrlKey&&O(D);break}case"ArrowUp":{O(D);break}case"Home":{D.preventDefault(),P(0);break}case"End":{D.preventDefault(),ae();break}case"Enter":{D.preventDefault();let Z=de();if(Z){let be=new Event(Ah);Z.dispatchEvent(be)}}}}},f.createElement("label",{"cmdk-label":"",htmlFor:ne.inputId,id:ne.labelId,style:kM},p),Xd(t,D=>f.createElement(bC.Provider,{value:L},f.createElement(xC.Provider,{value:ne},D))))}),hM=f.forwardRef((t,n)=>{var a,o;let c=nn(),l=f.useRef(null),d=f.useContext(vC),m=cc(),p=wC(t),g=(o=(a=p.current)==null?void 0:a.forceMount)!=null?o:d==null?void 0:d.forceMount;Zs(()=>{if(!g)return m.item(c,d==null?void 0:d.id)},[g]);let b=jC(c,l,[t.value,t.children,l],t.keywords),v=Wg(),w=ps(R=>R.value&&R.value===b.current),y=ps(R=>g||m.filter()===!1?!0:R.search?R.filtered.items.get(c)>0:!0);f.useEffect(()=>{let R=l.current;if(!(!R||t.disabled))return R.addEventListener(Ah,C),()=>R.removeEventListener(Ah,C)},[y,t.onSelect,t.disabled]);function C(){var R,L;S(),(L=(R=p.current).onSelect)==null||L.call(R,b.current)}function S(){v.setState("value",b.current,!0)}if(!y)return null;let{disabled:N,value:E,onSelect:T,forceMount:M,keywords:k,..._}=t;return f.createElement(Me.div,{ref:Ks(l,n),..._,id:c,"cmdk-item":"",role:"option","aria-disabled":!!N,"aria-selected":!!w,"data-disabled":!!N,"data-selected":!!w,onPointerMove:N||m.getDisablePointerSelection()?void 0:S,onClick:N?void 0:C},t.children)}),gM=f.forwardRef((t,n)=>{let{heading:a,children:o,forceMount:c,...l}=t,d=nn(),m=f.useRef(null),p=f.useRef(null),g=nn(),b=cc(),v=ps(y=>c||b.filter()===!1?!0:y.search?y.filtered.groups.has(d):!0);Zs(()=>b.group(d),[]),jC(d,m,[t.value,t.heading,p]);let w=f.useMemo(()=>({id:d,forceMount:c}),[c]);return f.createElement(Me.div,{ref:Ks(m,n),...l,"cmdk-group":"",role:"presentation",hidden:v?void 0:!0},a&&f.createElement("div",{ref:p,"cmdk-group-heading":"","aria-hidden":!0,id:g},a),Xd(t,y=>f.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":a?g:void 0},f.createElement(vC.Provider,{value:w},y))))}),xM=f.forwardRef((t,n)=>{let{alwaysRender:a,...o}=t,c=f.useRef(null),l=ps(d=>!d.search);return!a&&!l?null:f.createElement(Me.div,{ref:Ks(c,n),...o,"cmdk-separator":"",role:"separator"})}),bM=f.forwardRef((t,n)=>{let{onValueChange:a,...o}=t,c=t.value!=null,l=Wg(),d=ps(g=>g.search),m=ps(g=>g.selectedItemId),p=cc();return f.useEffect(()=>{t.value!=null&&l.setState("search",t.value)},[t.value]),f.createElement(Me.input,{ref:n,...o,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":p.listId,"aria-labelledby":p.labelId,"aria-activedescendant":m,id:p.inputId,type:"text",value:c?t.value:d,onChange:g=>{c||l.setState("search",g.target.value),a==null||a(g.target.value)}})}),vM=f.forwardRef((t,n)=>{let{children:a,label:o="Suggestions",...c}=t,l=f.useRef(null),d=f.useRef(null),m=ps(g=>g.selectedItemId),p=cc();return f.useEffect(()=>{if(d.current&&l.current){let g=d.current,b=l.current,v,w=new ResizeObserver(()=>{v=requestAnimationFrame(()=>{let y=g.offsetHeight;b.style.setProperty("--cmdk-list-height",y.toFixed(1)+"px")})});return w.observe(g),()=>{cancelAnimationFrame(v),w.unobserve(g)}}},[]),f.createElement(Me.div,{ref:Ks(l,n),...c,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":m,"aria-label":o,id:p.listId},Xd(t,g=>f.createElement("div",{ref:Ks(d,p.listInnerRef),"cmdk-list-sizer":""},g)))}),yM=f.forwardRef((t,n)=>{let{open:a,onOpenChange:o,overlayClassName:c,contentClassName:l,container:d,...m}=t;return f.createElement(Bg,{open:a,onOpenChange:o},f.createElement($g,{container:d},f.createElement(oc,{"cmdk-overlay":"",className:c}),f.createElement(ic,{"aria-label":t.label,"cmdk-dialog":"",className:l},f.createElement(yC,{ref:n,...m}))))}),wM=f.forwardRef((t,n)=>ps(a=>a.filtered.count===0)?f.createElement(Me.div,{ref:n,...t,"cmdk-empty":"",role:"presentation"}):null),jM=f.forwardRef((t,n)=>{let{progress:a,children:o,label:c="Loading...",...l}=t;return f.createElement(Me.div,{ref:n,...l,"cmdk-loading":"",role:"progressbar","aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c},Xd(t,d=>f.createElement("div",{"aria-hidden":!0},d)))}),_n=Object.assign(yC,{List:vM,Item:hM,Input:bM,Group:gM,Separator:xM,Dialog:yM,Empty:wM,Loading:jM});function CM(t,n){let a=t.nextElementSibling;for(;a;){if(a.matches(n))return a;a=a.nextElementSibling}}function SM(t,n){let a=t.previousElementSibling;for(;a;){if(a.matches(n))return a;a=a.previousElementSibling}}function wC(t){let n=f.useRef(t);return Zs(()=>{n.current=t}),n}var Zs=typeof window>"u"?f.useEffect:f.useLayoutEffect;function ri(t){let n=f.useRef();return n.current===void 0&&(n.current=t()),n}function ps(t){let n=Wg(),a=()=>t(n.snapshot());return f.useSyncExternalStore(n.subscribe,a,a)}function jC(t,n,a,o=[]){let c=f.useRef(),l=cc();return Zs(()=>{var d;let m=(()=>{var g;for(let b of a){if(typeof b=="string")return b.trim();if(typeof b=="object"&&"current"in b)return b.current?(g=b.current.textContent)==null?void 0:g.trim():c.current}})(),p=o.map(g=>g.trim());l.value(t,m,p),(d=n.current)==null||d.setAttribute(ni,m),c.current=m}),c}var NM=()=>{let[t,n]=f.useState(),a=ri(()=>new Map);return Zs(()=>{a.current.forEach(o=>o()),a.current=new Map},[t]),(o,c)=>{a.current.set(o,c),n({})}};function EM(t){let n=t.type;return typeof n=="function"?n(t.props):"render"in n?n.render(t.props):t}function Xd({asChild:t,children:n},a){return t&&f.isValidElement(n)?f.cloneElement(EM(n),{ref:n.ref},a(n.props.children)):a(n)}var kM={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};const Qs=Bg,TM=r7,MM=$g,CC=f.forwardRef(({className:t,...n},a)=>s.jsx(oc,{ref:a,className:pe("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...n}));CC.displayName=oc.displayName;const hs=f.forwardRef(({className:t,children:n,...a},o)=>s.jsxs(MM,{children:[s.jsx(CC,{}),s.jsxs(ic,{ref:o,className:pe("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...a,children:[n,s.jsxs(Fj,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[s.jsx(zj,{className:"h-4 w-4"}),s.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));hs.displayName=ic.displayName;const gs=({className:t,...n})=>s.jsx("div",{className:pe("flex flex-col space-y-1.5 text-center sm:text-left",t),...n});gs.displayName="DialogHeader";const Js=({className:t,...n})=>s.jsx("div",{className:pe("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...n});Js.displayName="DialogFooter";const xs=f.forwardRef(({className:t,...n},a)=>s.jsx(Yd,{ref:a,className:pe("text-lg font-semibold leading-none tracking-tight",t),...n}));xs.displayName=Yd.displayName;const bs=f.forwardRef(({className:t,...n},a)=>s.jsx(qd,{ref:a,className:pe("text-sm text-muted-foreground",t),...n}));bs.displayName=qd.displayName;const SC=f.forwardRef(({className:t,...n},a)=>s.jsx(_n,{ref:a,className:pe("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",t),...n}));SC.displayName=_n.displayName;const RM=f.forwardRef(({className:t,...n},a)=>s.jsxs("div",{className:"flex items-center border-b px-3","cmdk-input-wrapper":"",children:[s.jsx(VT,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),s.jsx(_n.Input,{ref:a,className:pe("flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...n})]}));RM.displayName=_n.Input.displayName;const NC=f.forwardRef(({className:t,...n},a)=>s.jsx(_n.List,{ref:a,className:pe("max-h-[300px] overflow-y-auto overflow-x-hidden",t),...n}));NC.displayName=_n.List.displayName;const EC=f.forwardRef((t,n)=>s.jsx(_n.Empty,{ref:n,className:"py-6 text-center text-sm",...t}));EC.displayName=_n.Empty.displayName;const kC=f.forwardRef(({className:t,...n},a)=>s.jsx(_n.Group,{ref:a,className:pe("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",t),...n}));kC.displayName=_n.Group.displayName;const AM=f.forwardRef(({className:t,...n},a)=>s.jsx(_n.Separator,{ref:a,className:pe("-mx-1 h-px bg-border",t),...n}));AM.displayName=_n.Separator.displayName;const TC=f.forwardRef(({className:t,...n},a)=>s.jsx(_n.Item,{ref:a,className:pe("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",t),...n}));TC.displayName=_n.Item.displayName;const _M=[{title:"Info command",fields:[{path:"Info.Title",label:"Title",type:"text"},{path:"Info.Description",label:"Description",type:"textarea"},{path:"Info.Button",label:"Button label",type:"text"},{path:"Info.URL",label:"Button URL",type:"text"},{path:"Info.Colour",label:"Colour",type:"color"}]},{title:"Welcome message",fields:[{path:"Welcome.Enabled",label:"Enabled",type:"boolean"},{path:"Welcome.LayoutStyle",label:"Layout style",type:"select",options:[{value:"modern",label:"Modern (components)"},{value:"classic",label:"Classic embed"}]},{path:"Welcome.Embed.Colour",label:"Embed colour",type:"color"},{path:"Welcome.Embed.Title",label:"Embed title",type:"text"},{path:"Welcome.Embed.Message",label:"Embed message",type:"textarea"}]},{title:"Leave message",fields:[{path:"Leave.Enabled",label:"Enabled",type:"boolean"},{path:"Leave.Embed.Colour",label:"Embed colour",type:"color"},{path:"Leave.Embed.Title",label:"Embed title",type:"text"},{path:"Leave.Embed.Message",label:"Embed message",type:"textarea"}]}],DM=[{value:"Playing",label:"Playing"},{value:"Watching",label:"Watching"},{value:"Listening",label:"Listening"},{value:"Competing",label:"Competing"},{value:"Streaming",label:"Streaming"}],OM=[{value:"Channel",label:"Channel"},{value:"Forum",label:"Forum"}],LM=[{value:"channels",label:"Channels"},{value:"threads",label:"Threads"}],zM=[{value:"description",label:"Channel description"},{value:"embed",label:"Embed"}],ei=[{value:"1",label:"Blurple"},{value:"2",label:"Grey"},{value:"3",label:"Green"},{value:"4",label:"Red"}],PM=[{title:"General",fields:[{path:"General.Name",label:"Bot name",type:"text"},{path:"General.Token",label:"Bot token",type:"secret",description:"Masked in the dashboard. Your real token is preserved on save."},{path:"General.GuildId",label:"Server (guild) ID",type:"discordId",description:"Right-click your Discord server icon → Copy Server ID. The bot should only stay in this server.",placeholder:"Discord server snowflake ID"},{path:"General.Addons.Enabled",label:"Addons enabled",type:"boolean"}]},{title:"Database",fields:[{path:"Database.Driver",label:"Database Engine",type:"select",options:[{value:"sqlite",label:"SQLite (Local File)"},{value:"mysql",label:"MySQL / MariaDB"}],description:"Select SQLite for zero-config file storage, or MySQL for external host servers."},{path:"Database.MySQL.Host",label:"MySQL Host",type:"text",placeholder:"127.0.0.1 or localhost",description:"Hostname or IP address of your MySQL database server."},{path:"Database.MySQL.Port",label:"MySQL Port",type:"number",placeholder:"3306"},{path:"Database.MySQL.Database",label:"Database Name",type:"text",placeholder:"supportbot"},{path:"Database.MySQL.User",label:"Database User",type:"text",placeholder:"root"},{path:"Database.MySQL.Password",label:"Database Password",type:"secret",placeholder:"••••••••••••"},{path:"Database.MySQL.ConnectionLimit",label:"Connection Pool Limit",type:"number",placeholder:"10",description:"Maximum simultaneous connections in the MySQL pool (default 10)."},{path:"Database.SQLite.File",label:"SQLite Database File Path",type:"text",placeholder:"./Data/supportbot.db"}]},{title:"Activity",fields:[{path:"Activity.Status",label:"Status text",type:"text"},{path:"Activity.Type",label:"Activity type",type:"select",options:DM},{path:"Activity.StreamingURL",label:"Streaming URL",type:"text",description:"Required when type is Streaming."}]},{title:"Embeds",fields:[{path:"Embed.Colours.General",label:"General colour",type:"color"},{path:"Embed.Colours.Success",label:"Success colour",type:"color"},{path:"Embed.Colours.Error",label:"Error colour",type:"color"},{path:"Embed.Colours.Warn",label:"Warn colour",type:"color"},{path:"Embed.Footer",label:"Footer text",type:"text"}]},{title:"Roles",fields:[{path:"Roles.AutoRole.Enabled",label:"Auto role enabled",type:"boolean"},{path:"Roles.AutoRole.Role",label:"Auto role",type:"discordRole"},{path:"Roles.StaffMember.Staff",label:"Staff role",type:"discordRole"},{path:"Roles.StaffMember.Admin",label:"Admin role",type:"discordRole"},{path:"Roles.StaffMember.Moderator",label:"Moderator role",type:"discordRole"},{path:"Roles.Mod.AllowSupportStaff",label:"Allow support staff /mod",type:"boolean"}]},{title:"Welcome & leave",fields:[{path:"Welcome.Enabled",label:"Welcome enabled",type:"boolean"},{path:"Welcome.Channel",label:"Welcome channel",type:"discordChannel"},{path:"Leave.Enabled",label:"Leave enabled",type:"boolean"},{path:"Leave.Channel",label:"Leave channel",type:"discordChannel"}]},{title:"Suggestions",fields:[{path:"Suggestions.Mode",label:"Mode",type:"select",options:OM},{path:"Suggestions.Channel",label:"Suggestions channel",type:"discordChannel"},{path:"Suggestions.ForumChannel",label:"Forum channel",type:"discordChannel"},{path:"Suggestions.UpvoteEmoji",label:"Upvote emoji",type:"emoji"},{path:"Suggestions.DownvoteEmoji",label:"Downvote emoji",type:"emoji"},{path:"Suggestions.OwnSuggestion",label:"Own suggestion votes",type:"boolean"},{path:"Suggestions.ShowUsers",label:"Show users",type:"boolean"},{path:"Suggestions.UpvoteTitle",label:"Upvote button title",type:"text"},{path:"Suggestions.DownvoteTitle",label:"Downvote button title",type:"text"},{path:"Suggestions.Threads.Enabled",label:"Suggestion threads",type:"boolean"},{path:"Suggestions.Threads.Title",label:"Thread title",type:"text"},{path:"Suggestions.Threads.Reason",label:"Thread reason",type:"text"},{path:"Suggestions.Buttons.Upvote",label:"Upvote button style",type:"select",options:ei},{path:"Suggestions.Buttons.Downvote",label:"Downvote button style",type:"select",options:ei},{path:"Suggestions.Buttons.RemoveVote",label:"Remove vote button style",type:"select",options:ei},{path:"Suggestions.Buttons.RemoveVote_Title",label:"Remove vote title",type:"text"},{path:"Suggestions.Tags.Created",label:"Tag: created",type:"text"},{path:"Suggestions.Tags.Considering",label:"Tag: considering",type:"text"},{path:"Suggestions.Tags.Solved",label:"Tag: solved",type:"text"},{path:"Suggestions.Tags.Denied",label:"Tag: denied",type:"text"}]},{title:"Tickets",fields:[{path:"Ticket.TicketType",label:"Ticket type",type:"select",options:LM},{path:"Ticket.UserManagement.DMOnAdd",label:"DM when added to ticket",type:"boolean"},{path:"Ticket.UserManagement.DMOnRemove",label:"DM when removed from ticket",type:"boolean"},{path:"Ticket.UserManagement.DMTranscript",label:"DM transcript on close",type:"boolean"},{path:"Ticket.TicketHome",label:"Ticket home channel",type:"discordChannel"},{path:"Ticket.TicketChannelsCategory",label:"Ticket category",type:"discordCategory"},{path:"Ticket.TicketChannelsCategory2",label:"Overflow ticket category",type:"discordCategory",description:"Used when the first category is full."},{path:"Ticket.TicketArchiveCategory",label:"Archive category",type:"discordCategory"},{path:"Ticket.Channel",label:"Channel prefix",type:"text"},{path:"Ticket.TicketSubject",label:"Ticket subject display",type:"select",options:zM},{path:"Ticket.Timeout",label:"Close timeout (minutes)",type:"number"},{path:"Ticket.TicketsPerUser",label:"Tickets per user",type:"number"},{path:"Ticket.TicketReason",label:"Require reason",type:"boolean"},{path:"Ticket.Close.StaffOnly",label:"Close staff only",type:"boolean"},{path:"Ticket.Invites.StaffOnly",label:"Ticket invites staff only",type:"boolean"},{path:"Ticket.ClaimTickets.Enabled",label:"Claim tickets",type:"boolean"},{path:"Ticket.ClaimTickets.Channel",label:"Claim log channel",type:"discordChannel"},{path:"Ticket.ClaimTickets.ClaimAcceptTime",label:"Claim accept time (ms)",type:"number"},{path:"Ticket.ClaimTickets.ButtonTitle",label:"Claim button title",type:"text"},{path:"Ticket.ClaimTickets.ButtonEmoji",label:"Claim button emoji",type:"emoji"},{path:"Ticket.ClaimTickets.Button",label:"Claim button style",type:"select",options:ei},{path:"Ticket.ReviewSystem.Enabled",label:"Review system",type:"boolean"},{path:"Ticket.ReviewSystem.Channel",label:"Review channel",type:"discordChannel"},{path:"Ticket.ReviewSystem.UseModal",label:"Review uses modal",type:"boolean"},{path:"Ticket.Log.TicketDataLog",label:"Ticket data log channel",type:"discordChannel"},{path:"Ticket.Log.TickeDataTitle",label:"Ticket data log title",type:"text"},{path:"Ticket.Log.TicketBlacklistLog",label:"Blacklist log channel",type:"discordChannel"},{path:"Ticket.AIMode.Enabled",label:"AI mode in tickets",type:"boolean"},{path:"Ticket.AIMode.ThreadName",label:"AI thread name",type:"text"},{path:"Ticket.AIMode.WelcomeMessage",label:"AI welcome message",type:"textarea"},{path:"Ticket.Questions.Enabled",label:"Ticket questions",type:"boolean"},{path:"Ticket.Questions.List",label:"Default questions",type:"stringList"}]},{title:"Ticket Departments",description:"Configure ticket department channels, emojis, staff roles, and custom department questions.",fields:[{path:"Ticket.DepartmentSystem.Enabled",label:"Departments enabled",type:"boolean"},{path:"Ticket.DepartmentSystem.Placeholder",label:"Department placeholder",type:"text"},{path:"Ticket.DepartmentSystem.DefaultDepartment",label:"Default department key",type:"text"}]},{title:"Ticket Priorities",description:"Configure ticket priority levels and emojis.",fields:[{path:"Ticket.PrioritySystem.Enabled",label:"Priority system",type:"boolean"},{path:"Ticket.PrioritySystem.DefaultPriority",label:"Default priority",type:"text"},{path:"Ticket.PrioritySystem.AllowUsersToChooseOnOpen",label:"User picks priority on open",type:"boolean"}]},{title:"Voice tickets",fields:[{path:"VoiceTickets.Name",label:"VC name format",type:"text"},{path:"VoiceTickets.Category",label:"VC category",type:"discordCategory"}]},{title:"Logging",fields:[{path:"MessageDelete.Channel",label:"Message delete log channel",type:"discordChannel"},{path:"MessageDelete.Colour",label:"Message delete embed colour",type:"color"},{path:"MessageUpdate.Channel",label:"Message update log channel",type:"discordChannel"},{path:"MessageUpdate.Colour",label:"Message update embed colour",type:"color"},{path:"Translate.TranslateLog",label:"Translate log channel",type:"discordChannel"}]},{title:"Buttons & menus",description:"Ticket panel and control button labels and styles.",fields:[{path:"Buttons.General.Delete",label:"Delete emoji",type:"emoji"},{path:"Buttons.General.DeleteStyle",label:"Delete button style",type:"select",options:ei},{path:"Buttons.Voice.TicketDeleteText",label:"Voice delete label",type:"text"},{path:"Buttons.Tickets.ClaimEmoji",label:"Ticket claim emoji",type:"emoji"},{path:"Buttons.Tickets.ClaimStyle",label:"Ticket claim style",type:"select",options:ei},{path:"SelectMenus.Tickets.PanelEmoji",label:"Panel menu emoji",type:"emoji"},{path:"SelectMenus.Tickets.CloseEmoji",label:"Close menu emoji",type:"emoji"}]}],IM=[{value:"openai",label:"OpenAI"},{value:"groq",label:"Groq"},{value:"claude",label:"Claude"}],UM=[{value:"text",label:"Plain text"},{value:"embed",label:"Embed"},{value:"components_v2",label:"Components v2"}],BM=[{value:"channel",label:"Per channel"},{value:"guild",label:"Per server"}],$M=[{title:"General",fields:[{path:"Enabled",label:"AI enabled",type:"boolean"},{path:"General.Provider",label:"Provider",type:"select",options:IM},{path:"General.Model",label:"Model",type:"text"},{path:"General.Model_API_Key",label:"API key",type:"secret",placeholder:"MODEL_API_KEY"},{path:"General.Tokens",label:"Max tokens",type:"number"},{path:"General.Temperature",label:"Temperature",type:"number"},{path:"General.Name",label:"Display name",type:"text"},{path:"General.PastebinAPI_Key",label:"Pastebin API key",type:"secret",placeholder:"PASTEBIN_API_KEY"},{path:"General.PastebinAPI_URL",label:"Pastebin API URL",type:"text"}]},{title:"Style & channel",fields:[{path:"Style.MessageType",label:"Message type",type:"select",options:UM},{path:"Features.SuggestTickets",label:"Suggest tickets",type:"boolean"},{path:"Channels.AIChannel",label:"AI channel ID",type:"discordId"},{path:"Embed.Color",label:"Embed colour",type:"color"},{path:"Embed.Footer",label:"Embed footer",type:"text"}]},{title:"Memory",fields:[{path:"Memory.Enabled",label:"Memory enabled",type:"boolean"},{path:"Memory.StoreFacts",label:"Store facts",type:"boolean"},{path:"Memory.StoreSummaries",label:"Store summaries",type:"boolean"},{path:"Memory.MaxRecentMessages",label:"Max recent messages",type:"number"},{path:"Memory.Scope",label:"Memory scope",type:"select",options:BM}]},{title:"Custom instructions",fields:[{path:"CustomInstructions",label:"Instruction lines",type:"stringList",description:"One instruction per line sent to the AI."}]},{title:"Messages",fields:[{path:"Messages.ErrorResponse",label:"Error response",type:"text"},{path:"Messages.AIError",label:"AI error",type:"text"},{path:"Messages.AIDisabled",label:"AI disabled",type:"text"},{path:"Messages.MessageTooLong",label:"Message too long",type:"text"},{path:"Messages.SuggestTicketText",label:"Suggest ticket text",type:"text"},{path:"Messages.SuggestTicketReaction",label:"Suggest ticket emoji",type:"emoji"}]}],HM=[{value:"1",label:"Blurple"},{value:"2",label:"Grey"},{value:"3",label:"Green"},{value:"4",label:"Red"}],GM=[{value:"1",label:"Style 1"},{value:"2",label:"Style 2"},{value:"3",label:"Style 3"},{value:"4",label:"Style 4 (classic embed)"}],VM=[{title:"Panel",fields:[{path:"Panel",label:"Panel enabled",type:"boolean"}]},{title:"Embed style",fields:[{path:"Style.Title",label:"Title",type:"text"},{path:"Style.Description",label:"Description",type:"textarea"},{path:"Style.Image",label:"Image URL",type:"text"},{path:"Style.Color",label:"Embed colour",type:"color"},{path:"Style.Layout",label:"Layout",type:"select",options:GM}]},{title:"Create button",fields:[{path:"Button.Text",label:"Button text",type:"text"},{path:"Button.Emoji",label:"Button emoji",type:"emoji"},{path:"Button.Color",label:"Button style",type:"select",options:HM},{path:"Button.CustomId",label:"Custom ID",type:"text"}]},{title:"Department menu",fields:[{path:"DepartmentMenu.CustomId",label:"Custom ID",type:"text"},{path:"DepartmentMenu.Placeholder",label:"Placeholder",type:"text"},{path:"DepartmentMenu.DefaultDescription",label:"Default description",type:"text"},{path:"DepartmentMenu.DefaultEmoji",label:"Default emoji",type:"emoji"}]},{title:"Panel settings",fields:[{path:"Settings.Image",label:"Show image",type:"boolean"},{path:"Settings.TopTitle",label:"Top title",type:"boolean"},{path:"Settings.TopDivider",label:"Top divider",type:"boolean"},{path:"Settings.BottomTitle",label:"Bottom title",type:"boolean"},{path:"Settings.BottomDivider",label:"Bottom divider",type:"boolean"}]},{title:"Messages",description:"Bot messages when using the ticket panel command.",fields:[{path:"Messages.NotConfigured",label:"Not configured",type:"textarea"},{path:"Messages.InvalidChannel",label:"Invalid channel",type:"textarea"},{path:"Messages.PanelSent",label:"Panel sent",type:"text"},{path:"Messages.PanelSentWithDepartments",label:"Panel sent (departments)",type:"text"},{path:"Messages.SendError",label:"Send error",type:"text"}]}],_h={supportbot:PM,"ticket-panel":VM,commands:"commands",messages:_M,"supportbot-ai":$M};function FM(t){return t in _h?_h[t]:null}const ai=[{id:"tickets",title:"Ticket panel",description:"Create and manage support tickets with departments, priorities, and AI assistance.",icon:is,href:"/configs?file=ticket-panel",category:"tickets"},{id:"supportbot",title:"Core bot settings",description:"General bot options, activity status, embed colours, roles, and welcome messages.",icon:qs,href:"/configs?file=supportbot",category:"server"},{id:"transcripts",title:"Ticket transcripts",description:"Browse and preview HTML transcripts saved when tickets are closed.",icon:Ul,href:"/transcripts",category:"tickets"},{id:"suggestions",title:"Suggestions",description:"Configure suggestion channels, voting emojis, and forum thread behaviour.",icon:ug,href:"/configs?file=messages",category:"community"},{id:"ai",title:"AI assistant",description:"SupportBot AI mode settings for in-ticket conversational help.",icon:og,href:"/configs?file=supportbot-ai",category:"community"},{id:"commands",title:"Commands",description:"Enable or disable slash commands and customise command permissions.",icon:ds,href:"/configs?file=commands",category:"server"}],YM=[{id:"all",label:"All modules"},{id:"tickets",label:"Tickets"},{id:"community",label:"Community"},{id:"server",label:"Server"}],qM={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"},KM=[{key:"Help",label:"Help",description:"List all slash commands"},{key:"Info",label:"Info",description:"Server information"},{key:"TicketPanel",label:"Ticket panel",description:"Create ticket panel"},{key:"OpenTicket",label:"Open ticket",description:"Open a support ticket"},{key:"CloseTicket",label:"Close ticket",description:"Close a ticket"},{key:"TicketManage",label:"Manage ticket",description:"Manage an existing ticket"},{key:"Suggestion",label:"Suggestion",description:"Submit a suggestion"},{key:"Embed",label:"Embed",description:"Send an embed message"},{key:"Translate",label:"Translate",description:"Translate text"},{key:"Ping",label:"Ping",description:"Check bot latency"},{key:"AI",label:"AI",description:"AI assistant command"},{key:"Settings",label:"Settings command",description:"Bot settings via Discord"},{key:"Mod",label:"Moderation",description:"Moderation tools"}];function WM(t,n,a){const o=qM[t];for(const c of n)for(const l of c.fields)a.push({id:`setting:${t}:${l.path}`,title:l.label,subtitle:`${o} · ${c.title}`,href:`/configs?file=${t}`,category:"setting",icon:XM(t),keywords:[l.path,l.label,c.title,o,t,l.description??"",l.type].map(d=>d.toLowerCase())})}function XM(t){switch(t){case"supportbot":return qs;case"ticket-panel":return is;case"messages":return ug;case"supportbot-ai":return og;case"commands":return ds;default:return qs}}function ZM(){const t=[{id:"page:dashboard",title:"Dashboard",subtitle:"Overview and module status",href:"/",category:"page",icon:A2,keywords:["home","overview","stats"]},{id:"page:logs",title:"Logs",subtitle:"Live bot console output",href:"/logs",category:"page",icon:M2,keywords:["console","output","errors","warn"]},{id:"page:settings",title:"Settings",subtitle:"Updates and maintenance",href:"/settings",category:"page",icon:qs,keywords:["update","version","software"]},{id:"page:transcripts",title:"Transcripts",subtitle:"Closed ticket transcripts",href:"/transcripts",category:"page",icon:Ul,keywords:["tickets","archive","html"]}];for(const n of ai)t.push({id:`module:${n.id}`,title:n.title,subtitle:n.description,href:n.href,category:"module",icon:n.icon,keywords:[n.id,n.title,n.description,n.category].map(a=>a.toLowerCase())});for(const[n,a]of Object.entries(_h))a!=="commands"&&WM(n,a,t);for(const n of KM)t.push({id:`command:${n.key}`,title:n.label,subtitle:`Command · ${n.description}`,href:"/configs?file=commands",category:"command",icon:ds,keywords:[n.key,n.label,n.description,"slash","commands"].map(a=>a.toLowerCase())});return t.push({id:"setting:commands:all",title:"Slash commands",subtitle:"Commands · Enable and configure all commands",href:"/configs?file=commands",category:"setting",icon:ds,keywords:["commands","slash","enable","permissions"]}),t}const QM=ZM(),JM={page:"Pages",module:"Modules",setting:"Settings",command:"Commands"};function eR(t,n=12){const a=t.trim().toLowerCase();return a?QM.map(c=>{let l=0;const d=c.title.toLowerCase(),m=(c.subtitle??"").toLowerCase();d===a?l+=100:d.startsWith(a)?l+=40:d.includes(a)&&(l+=20),m.includes(a)&&(l+=10);for(const p of c.keywords)p===a?l+=15:p.startsWith(a)?l+=8:p.includes(a)&&(l+=4);return{item:c,score:l}}).filter(c=>c.score>0).sort((c,l)=>l.score-c.score).slice(0,n).map(c=>c.item):[]}function tR(t){const n=[],a=["page","module","setting","command"];for(const o of a){const c=t.filter(l=>l.category===o);c.length&&n.push({category:o,label:JM[o],items:c})}return n}function nR({className:t}){const n=ao(),[a,o]=f.useState(""),[c,l]=f.useState(!1),d=f.useRef(null),m=f.useRef(null),p=f.useRef(null),[g,b]=f.useState(null),v=f.useMemo(()=>eR(a,14),[a]),w=f.useMemo(()=>tR(v),[v]),y=c&&a.trim().length>0,C=()=>{const N=p.current;if(!N)return;const E=N.getBoundingClientRect();b({top:E.bottom+6,left:E.left,width:E.width})};f.useLayoutEffect(()=>{if(!y){b(null);return}return C(),window.addEventListener("resize",C),window.addEventListener("scroll",C,!0),()=>{window.removeEventListener("resize",C),window.removeEventListener("scroll",C,!0)}},[y,a]),f.useEffect(()=>{function N(E){var M,k;const T=E.target;(M=d.current)!=null&&M.contains(T)||(k=m.current)!=null&&k.contains(T)||l(!1)}return document.addEventListener("mousedown",N),()=>document.removeEventListener("mousedown",N)},[]),f.useEffect(()=>{function N(E){var T;E.key==="k"&&(E.metaKey||E.ctrlKey)&&(E.preventDefault(),(T=p.current)==null||T.focus(),l(!0))}return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[]);function S(N){var E;n(N.href),o(""),l(!1),(E=p.current)==null||E.blur()}return s.jsxs("div",{ref:d,className:pe("relative w-full max-w-sm",t),children:[s.jsx(xe,{icon:vi,size:16,className:"pointer-events-none absolute left-3 top-1/2 z-10 -translate-y-1/2 text-muted-foreground"}),s.jsx(_e,{ref:p,value:a,onChange:N=>{o(N.target.value),l(!0)},onFocus:()=>l(!0),onKeyDown:N=>{var E;N.key==="Escape"&&(l(!1),o(""),(E=p.current)==null||E.blur())},placeholder:"Search modules, configs…",className:"h-9 border-border bg-secondary/50 pl-9",role:"combobox","aria-expanded":y,"aria-controls":"dashboard-search-results","aria-autocomplete":"list"}),s.jsxs("kbd",{className:"pointer-events-none absolute right-2 top-2 hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100 sm:flex",children:[s.jsx("span",{className:"text-xs",children:"⌘"}),"K"]}),y&&g?so.createPortal(s.jsx("div",{ref:m,id:"dashboard-search-results",className:"overflow-hidden rounded-xl border border-border bg-popover shadow-lg shadow-black/20",style:{position:"fixed",top:g.top,left:g.left,width:g.width,zIndex:9999},role:"listbox",children:s.jsx(SC,{shouldFilter:!1,className:"bg-transparent",children:s.jsx(NC,{className:"max-h-[min(360px,50vh)]",children:v.length===0?s.jsxs(EC,{className:"py-8 text-muted-foreground",children:["No results for “",a.trim(),"”"]}):w.map(N=>s.jsx(kC,{heading:N.label,children:N.items.map(E=>s.jsxs(TC,{value:E.id,onSelect:()=>S(E),className:"cursor-pointer gap-3 rounded-lg py-2.5 aria-selected:bg-accent",children:[E.icon?s.jsx("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(xe,{icon:E.icon,size:16})}):null,s.jsxs("span",{className:"min-w-0 flex-1",children:[s.jsx("span",{className:"block truncate font-medium",children:E.title}),E.subtitle?s.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:E.subtitle}):null]})]},E.id))},N.category))})})}),document.body):null]})}var rR=Object.defineProperty,Ta=(t,n)=>rR(t,"name",{value:n,configurable:!0}),MC="Avatar",[aR,HP]=bn(MC),sR=[0,()=>{}],[oR,RC]=aR(MC),AC=f.forwardRef(Ta(function(n,a){const{__scopeAvatar:o,...c}=n,[l,d]=f.useState("idle"),[m,p]=LC();return s.jsx(oR,{scope:o,imageLoadingStatus:l,setImageLoadingStatus:d,imageCount:m,setImageCount:p,children:s.jsx(Me.span,{...c,ref:a})})},"Avatar")),iR="AvatarImage",_C=f.forwardRef(Ta(function(n,a){const{__scopeAvatar:o,src:c,onLoadingStatusChange:l,...d}=n,m=RC(iR,o);m.setImageCount;const p=OC(c,{referrerPolicy:d.referrerPolicy,crossOrigin:d.crossOrigin,loadingStatus:m.imageLoadingStatus,setLoadingStatus:m.setImageLoadingStatus}),g=Vt(v=>{l==null||l(v)}),b=f.useRef(p);return St(()=>{const v=b.current;b.current=p,p!==v&&g(p)},[p,g]),p==="loaded"?s.jsx(Me.img,{...d,ref:a,src:c}):null},"AvatarImage")),lR="AvatarFallback",DC=f.forwardRef(Ta(function(n,a){const{__scopeAvatar:o,delayMs:c,...l}=n,d=RC(lR,o),[m,p]=f.useState(c===void 0);return f.useEffect(()=>{if(c!==void 0){const g=window.setTimeout(()=>p(!0),c);return()=>window.clearTimeout(g)}},[c]),m&&d.imageLoadingStatus!=="loaded"?s.jsx(Me.span,{...l,ref:a}):null},"AvatarFallback"));function OC(t,{loadingStatus:n,setLoadingStatus:a,referrerPolicy:o,crossOrigin:c}){return St(()=>{if(!t){a("error");return}const l=new window.Image,d=Ta(p=>{const g=p.currentTarget;a(Dh(g))},"handleLoad"),m=Ta(()=>a("error"),"handleError");return l.addEventListener("load",d),l.addEventListener("error",m),o&&(l.referrerPolicy=o),l.crossOrigin=c??null,l.src=t,a(Dh(l)),()=>{l.removeEventListener("load",d),l.removeEventListener("error",m),a("idle")}},[t,c,o,a]),n}Ta(OC,"useImageLoadingStatus");function Dh(t){return t.complete?t.naturalWidth>0?"loaded":"error":"loading"}Ta(Dh,"getImageLoadingStatus");function LC(){return sR}Ta(LC,"useImageCount");function cR(t){}Ta(cR,"useUpdateImageCount");const vs=f.forwardRef(({className:t,...n},a)=>s.jsx(AC,{ref:a,className:pe("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",t),...n}));vs.displayName=AC.displayName;const eo=f.forwardRef(({className:t,...n},a)=>s.jsx(_C,{ref:a,className:pe("aspect-square h-full w-full",t),...n}));eo.displayName=_C.displayName;const ys=f.forwardRef(({className:t,...n},a)=>s.jsx(DC,{ref:a,className:pe("flex h-full w-full items-center justify-center rounded-full bg-muted",t),...n}));ys.displayName=DC.displayName;const zC=f.createContext(null);function uR({children:t}){const[n,a]=f.useState([]),[o,c]=f.useState(0),[l,d]=f.useState(!0),m=f.useCallback(async()=>{try{const v=await Ne.getNotifications();v.data&&(a(v.data.items),c(v.data.unreadCount))}catch{}finally{d(!1)}},[]),p=f.useCallback(async()=>{var v;try{const w=await Ne.markNotificationsRead("all");a(y=>y.map(C=>({...C,read:!0}))),c(((v=w.data)==null?void 0:v.unreadCount)??0)}catch{}},[]),g=f.useCallback(async v=>{var w;try{const y=await Ne.dismissNotification(v);a(C=>C.filter(S=>S.id!==v)),c(((w=y.data)==null?void 0:w.unreadCount)??0)}catch{}},[]);f.useEffect(()=>{m();const v=setInterval(m,3e4);return()=>clearInterval(v)},[m]);const b=f.useMemo(()=>({items:n,unreadCount:o,loading:l,refresh:m,markAllRead:p,dismiss:g}),[n,o,l,m,p,g]);return s.jsx(zC.Provider,{value:b,children:t})}function dR(){const t=f.useContext(zC);if(!t)throw new Error("useNotifications must be used within NotificationsProvider");return t}const fR=ji("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Fn({className:t,variant:n,...a}){return s.jsx("div",{className:pe(fR({variant:n}),t),...a})}var mR=Object.defineProperty,pR=(t,n)=>mR(t,"name",{value:n,configurable:!0});function ud(t,[n,a]){return Math.min(a,Math.max(n,t))}pR(ud,"clamp");var hR=Object.defineProperty,Fe=(t,n)=>hR(t,"name",{value:n,configurable:!0});function PC(t,n){return f.useReducer((a,o)=>n[a][o]??a,t)}Fe(PC,"useStateMachine");var IC="ScrollArea",[UC,GP]=bn(IC),[gR,xr]=UC(IC),xR=f.forwardRef(Fe(function(n,a){const{__scopeScrollArea:o,type:c="hover",dir:l,scrollHideDelay:d=600,...m}=n,[p,g]=f.useState(null),[b,v]=f.useState(null),[w,y]=f.useState(null),[C,S]=f.useState(null),[N,E]=f.useState(null),[T,M]=f.useState(0),[k,_]=f.useState(0),[R,L]=f.useState(!1),[ne,X]=f.useState(!1),I=Pe(a,g),H=Si(l);return s.jsx(gR,{scope:o,type:c,dir:H,scrollHideDelay:d,scrollArea:p,viewport:b,onViewportChange:v,content:w,onContentChange:y,scrollbarX:C,onScrollbarXChange:S,scrollbarXEnabled:R,onScrollbarXEnabledChange:L,scrollbarY:N,onScrollbarYChange:E,scrollbarYEnabled:ne,onScrollbarYEnabledChange:X,onCornerWidthChange:M,onCornerHeightChange:_,children:s.jsx(Me.div,{dir:H,...m,ref:I,style:{position:"relative","--radix-scroll-area-corner-width":T+"px","--radix-scroll-area-corner-height":k+"px",...n.style}})})},"ScrollArea")),bR="ScrollAreaViewport",vR=f.forwardRef(Fe(function(n,a){const{__scopeScrollArea:o,children:c,nonce:l,...d}=n,m=xr(bR,o),p=f.useRef(null),g=Pe(a,p,m.onViewportChange);return s.jsxs(s.Fragment,{children:[s.jsx(yR,{nonce:l}),s.jsx(Me.div,{"data-radix-scroll-area-viewport":"",...d,ref:g,style:{overflowX:m.scrollbarXEnabled?"scroll":"hidden",overflowY:m.scrollbarYEnabled?"scroll":"hidden",...n.style},children:s.jsx("div",{ref:m.onContentChange,style:{minWidth:"100%",display:"table"},children:c})})]})},"ScrollAreaViewport")),yR=f.memo(Fe(function({nonce:n}){return s.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:n})},"ScrollAreaViewportStyle"),(t,n)=>t.nonce===n.nonce),Aa="ScrollAreaScrollbar",BC=f.forwardRef(Fe(function(n,a){const{forceMount:o,...c}=n,l=xr(Aa,n.__scopeScrollArea),{onScrollbarXEnabledChange:d,onScrollbarYEnabledChange:m}=l,p=n.orientation==="horizontal";return f.useEffect(()=>(p?d(!0):m(!0),()=>{p?d(!1):m(!1)}),[p,d,m]),l.type==="hover"?s.jsx(wR,{...c,ref:a,forceMount:o}):l.type==="scroll"?s.jsx(jR,{...c,ref:a,forceMount:o}):l.type==="auto"?s.jsx($C,{...c,ref:a,forceMount:o}):l.type==="always"?s.jsx(Xg,{...c,ref:a,"data-state":"visible"}):null},"ScrollAreaScrollbar")),wR=f.forwardRef(Fe(function(n,a){const{forceMount:o,...c}=n,l=xr(Aa,n.__scopeScrollArea),[d,m]=f.useState(!1);return f.useEffect(()=>{const p=l.scrollArea;let g=0;if(p){const b=Fe(()=>{window.clearTimeout(g),m(!0)},"handlePointerEnter"),v=Fe(()=>{g=window.setTimeout(()=>m(!1),l.scrollHideDelay)},"handlePointerLeave");return p.addEventListener("pointerenter",b),p.addEventListener("pointerleave",v),()=>{window.clearTimeout(g),p.removeEventListener("pointerenter",b),p.removeEventListener("pointerleave",v)}}},[l.scrollArea,l.scrollHideDelay]),s.jsx(fn,{present:o||d,children:s.jsx($C,{"data-state":d?"visible":"hidden",...c,ref:a})})},"ScrollAreaScrollbarHover")),jR=f.forwardRef(Fe(function(n,a){const{forceMount:o,...c}=n,l=xr(Aa,n.__scopeScrollArea),d=n.orientation==="horizontal",m=dc(()=>g("SCROLL_END"),100),[p,g]=PC("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return f.useEffect(()=>{if(p==="idle"){const b=window.setTimeout(()=>g("HIDE"),l.scrollHideDelay);return()=>window.clearTimeout(b)}},[p,l.scrollHideDelay,g]),f.useEffect(()=>{const b=l.viewport,v=d?"scrollLeft":"scrollTop";if(b){let w=b[v];const y=Fe(()=>{const C=b[v];w!==C&&(g("SCROLL"),m()),w=C},"handleScroll");return b.addEventListener("scroll",y),()=>b.removeEventListener("scroll",y)}},[l.viewport,d,g,m]),s.jsx(fn,{present:o||p!=="hidden",children:s.jsx(Xg,{"data-state":p==="hidden"?"hidden":"visible",...c,ref:a,onPointerEnter:Ce(n.onPointerEnter,()=>g("POINTER_ENTER")),onPointerLeave:Ce(n.onPointerLeave,()=>g("POINTER_LEAVE"))})})},"ScrollAreaScrollbarScroll")),$C=f.forwardRef(Fe(function(n,a){const o=xr(Aa,n.__scopeScrollArea),{forceMount:c,...l}=n,[d,m]=f.useState(!1),p=n.orientation==="horizontal",g=dc(()=>{if(o.viewport){const b=o.viewport.offsetWidth0&&b<1,onThumbChange:Fe(y=>d.current=y,"onThumbChange"),onThumbPointerUp:Fe(()=>m.current=0,"onThumbPointerUp"),onThumbPointerDown:Fe(y=>m.current=y,"onThumbPointerDown")};function w(y,C){return FC(y,m.current,p,C)}return Fe(w,"getScrollPosition"),o==="horizontal"?s.jsx(CR,{...v,ref:a,onThumbPositionChange:()=>{if(l.viewport&&d.current){const y=l.viewport.scrollLeft,C=Lh(y,p,l.dir);d.current.style.transform=`translate3d(${C}px, 0, 0)`}},onWheelScroll:y=>{l.viewport&&(l.viewport.scrollLeft=y)},onDragScroll:y=>{l.viewport&&(l.viewport.scrollLeft=w(y,l.dir))}}):o==="vertical"?s.jsx(SR,{...v,ref:a,onThumbPositionChange:()=>{if(l.viewport&&d.current){const y=l.viewport.scrollTop,C=Lh(y,p);d.current.style.transform=`translate3d(0, ${C}px, 0)`}},onWheelScroll:y=>{l.viewport&&(l.viewport.scrollTop=y)},onDragScroll:y=>{l.viewport&&(l.viewport.scrollTop=w(y))}}):null},"ScrollAreaScrollbarVisible")),CR=f.forwardRef(Fe(function(n,a){const{sizes:o,onSizesChange:c,...l}=n,d=xr(Aa,n.__scopeScrollArea),[m,p]=f.useState(),g=f.useRef(null),b=Pe(a,g,d.onScrollbarXChange);return f.useEffect(()=>{g.current&&p(getComputedStyle(g.current))},[g]),s.jsx(GC,{"data-orientation":"horizontal",...l,ref:b,sizes:o,style:{bottom:0,left:d.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:d.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":uc(o)+"px",...n.style},onThumbPointerDown:v=>n.onThumbPointerDown(v.x),onDragScroll:v=>n.onDragScroll(v.x),onWheelScroll:(v,w)=>{if(d.viewport){const y=d.viewport.scrollLeft+v.deltaX;n.onWheelScroll(y),Jg(y,w)&&v.preventDefault()}},onResize:()=>{g.current&&d.viewport&&m&&c({content:d.viewport.scrollWidth,viewport:d.viewport.offsetWidth,scrollbar:{size:g.current.clientWidth,paddingStart:Kl(m.paddingLeft),paddingEnd:Kl(m.paddingRight)}})}})},"ScrollAreaScrollbarX")),SR=f.forwardRef(Fe(function(n,a){const{sizes:o,onSizesChange:c,...l}=n,d=xr(Aa,n.__scopeScrollArea),[m,p]=f.useState(),g=f.useRef(null),b=Pe(a,g,d.onScrollbarYChange);return f.useEffect(()=>{g.current&&p(getComputedStyle(g.current))},[g]),s.jsx(GC,{"data-orientation":"vertical",...l,ref:b,sizes:o,style:{top:0,right:d.dir==="ltr"?0:void 0,left:d.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":uc(o)+"px",...n.style},onThumbPointerDown:v=>n.onThumbPointerDown(v.y),onDragScroll:v=>n.onDragScroll(v.y),onWheelScroll:(v,w)=>{if(d.viewport){const y=d.viewport.scrollTop+v.deltaY;n.onWheelScroll(y),Jg(y,w)&&v.preventDefault()}},onResize:()=>{g.current&&d.viewport&&m&&c({content:d.viewport.scrollHeight,viewport:d.viewport.offsetHeight,scrollbar:{size:g.current.clientHeight,paddingStart:Kl(m.paddingTop),paddingEnd:Kl(m.paddingBottom)}})}})},"ScrollAreaScrollbarY")),[NR,HC]=UC(Aa),GC=f.forwardRef(Fe(function(n,a){const{__scopeScrollArea:o,sizes:c,hasThumb:l,onThumbChange:d,onThumbPointerUp:m,onThumbPointerDown:p,onThumbPositionChange:g,onDragScroll:b,onWheelScroll:v,onResize:w,...y}=n,C=xr(Aa,o),[S,N]=f.useState(null),E=Pe(a,N),T=f.useRef(null),M=f.useRef(""),k=C.viewport,_=c.content-c.viewport,R=Vt(v),L=Vt(g),ne=dc(w,10);function X(I){if(T.current){const H=I.clientX-T.current.left,q=I.clientY-T.current.top;b({x:H,y:q})}}return Fe(X,"handleDragScroll"),f.useEffect(()=>{const I=Fe(H=>{const q=H.target;(S==null?void 0:S.contains(q))&&R(H,_)},"handleWheel");return document.addEventListener("wheel",I,{passive:!1}),()=>document.removeEventListener("wheel",I,{passive:!1})},[k,S,_,R]),f.useEffect(L,[c,L]),to(S,ne),to(C.content,ne),s.jsx(NR,{scope:o,scrollbar:S,hasThumb:l,onThumbChange:Vt(d),onThumbPointerUp:Vt(m),onThumbPositionChange:L,onThumbPointerDown:Vt(p),children:s.jsx(Me.div,{...y,ref:E,style:{position:"absolute",...y.style},onPointerDown:Ce(n.onPointerDown,I=>{I.button===0&&(I.target.setPointerCapture(I.pointerId),T.current=S.getBoundingClientRect(),M.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",C.viewport&&(C.viewport.style.scrollBehavior="auto"),X(I))}),onPointerMove:Ce(n.onPointerMove,X),onPointerUp:Ce(n.onPointerUp,I=>{const H=I.target;H.hasPointerCapture(I.pointerId)&&H.releasePointerCapture(I.pointerId),document.body.style.webkitUserSelect=M.current,C.viewport&&(C.viewport.style.scrollBehavior=""),T.current=null})})})},"ScrollAreaScrollbarImpl")),Oh="ScrollAreaThumb",ER=f.forwardRef(Fe(function(n,a){const{forceMount:o,...c}=n,l=HC(Oh,n.__scopeScrollArea);return s.jsx(fn,{present:o||l.hasThumb,children:s.jsx(kR,{ref:a,...c})})},"ScrollAreaThumb")),kR=f.forwardRef(Fe(function(n,a){const{__scopeScrollArea:o,style:c,...l}=n,d=xr(Oh,o),m=HC(Oh,o),{onThumbPositionChange:p}=m,g=Pe(a,m.onThumbChange),b=f.useRef(void 0),v=dc(()=>{b.current&&(b.current(),b.current=void 0)},100);return f.useEffect(()=>{const w=d.viewport;if(w){const y=Fe(()=>{if(v(),!b.current){const C=RR(w,p);b.current=C,p()}},"handleScroll");return p(),w.addEventListener("scroll",y),()=>w.removeEventListener("scroll",y)}},[d.viewport,v,p]),s.jsx(Me.div,{"data-state":m.hasThumb?"visible":"hidden",...l,ref:g,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...c},onPointerDownCapture:Ce(n.onPointerDownCapture,w=>{const C=w.target.getBoundingClientRect(),S=w.clientX-C.left,N=w.clientY-C.top;m.onThumbPointerDown({x:S,y:N})}),onPointerUp:Ce(n.onPointerUp,m.onThumbPointerUp)})},"ScrollAreaThumbImpl")),VC="ScrollAreaCorner",TR=f.forwardRef(Fe(function(n,a){const o=xr(VC,n.__scopeScrollArea),c=!!(o.scrollbarX&&o.scrollbarY);return o.type!=="scroll"&&c?s.jsx(MR,{...n,ref:a}):null},"ScrollAreaCorner")),MR=f.forwardRef(Fe(function(n,a){const{__scopeScrollArea:o,...c}=n,l=xr(VC,o),[d,m]=f.useState(0),[p,g]=f.useState(0),b=!!(d&&p),{onCornerWidthChange:v,onCornerHeightChange:w}=l;return to(l.scrollbarX,()=>{var C;const y=((C=l.scrollbarX)==null?void 0:C.offsetHeight)||0;l.onCornerHeightChange(y),g(y)}),to(l.scrollbarY,()=>{var C;const y=((C=l.scrollbarY)==null?void 0:C.offsetWidth)||0;l.onCornerWidthChange(y),m(y)}),f.useEffect(()=>()=>{v(0),w(0)},[v,w]),b?s.jsx(Me.div,{...c,ref:a,style:{width:d,height:p,position:"absolute",right:l.dir==="ltr"?0:void 0,left:l.dir==="rtl"?0:void 0,bottom:0,...n.style}}):null},"ScrollAreaCornerImpl"));function Kl(t){return t?parseInt(t,10):0}Fe(Kl,"toInt");function Zg(t,n){const a=t/n;return isNaN(a)?0:a}Fe(Zg,"getThumbRatio");function uc(t){const n=Zg(t.viewport,t.content),a=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,o=(t.scrollbar.size-a)*n;return Math.max(o,18)}Fe(uc,"getThumbSize");function FC(t,n,a,o="ltr"){const c=uc(a),l=c/2,d=n||l,m=c-d,p=a.scrollbar.paddingStart+d,g=a.scrollbar.size-a.scrollbar.paddingEnd-m,b=a.content-a.viewport,v=o==="ltr"?[0,b]:[b*-1,0];return Qg([p,g],v)(t)}Fe(FC,"getScrollPositionFromPointer");function Lh(t,n,a="ltr"){const o=uc(n),c=n.scrollbar.paddingStart+n.scrollbar.paddingEnd,l=n.scrollbar.size-c,d=n.content-n.viewport,m=l-o,p=a==="ltr"?[0,d]:[d*-1,0],g=ud(t,p);return Qg([0,d],[0,m])(g)}Fe(Lh,"getThumbOffsetFromScroll");function Qg(t,n){return a=>{if(t[0]===t[1]||n[0]===n[1])return n[0];const o=(n[1]-n[0])/(t[1]-t[0]);return n[0]+o*(a-t[0])}}Fe(Qg,"linearScale");function Jg(t,n){return t>0&&t{})=>{let a={left:t.scrollLeft,top:t.scrollTop},o=0;return Fe((function c(){const l={left:t.scrollLeft,top:t.scrollTop},d=a.left!==l.left,m=a.top!==l.top;(d||m)&&n(),a=l,o=window.requestAnimationFrame(c)}),"loop")(),()=>window.cancelAnimationFrame(o)},"addUnlinkedScrollListener");function dc(t,n){const a=Vt(t),o=f.useRef(0);return f.useEffect(()=>()=>window.clearTimeout(o.current),[]),f.useCallback(()=>{window.clearTimeout(o.current),o.current=window.setTimeout(a,n)},[a,n])}Fe(dc,"useDebounceCallback");function to(t,n){const a=Vt(n);St(()=>{let o=0;if(t){const c=new ResizeObserver(()=>{cancelAnimationFrame(o),o=window.requestAnimationFrame(a)});return c.observe(t),()=>{window.cancelAnimationFrame(o),c.unobserve(t)}}},[t,a])}Fe(to,"useResizeObserver");var YC=xR,AR=vR,_R=TR;const fc=f.forwardRef(({className:t,children:n,...a},o)=>s.jsxs(YC,{ref:o,className:pe("relative overflow-hidden",t),...a,children:[s.jsx(AR,{className:"h-full w-full rounded-[inherit]",children:n}),s.jsx(qC,{}),s.jsx(_R,{})]}));fc.displayName=YC.displayName;const qC=f.forwardRef(({className:t,orientation:n="vertical",...a},o)=>s.jsx(BC,{ref:o,orientation:n,className:pe("flex touch-none select-none transition-colors",n==="vertical"&&"h-full w-2 border-l border-l-transparent p-px",n==="horizontal"&&"h-2 flex-col border-t border-t-transparent p-px",t),...a,children:s.jsx(ER,{className:"relative flex-1 rounded-full bg-[hsl(240_4%_32%)] transition-colors hover:bg-[hsl(240_4%_44%)]"})}));qC.displayName=BC.displayName;function DR(t){const n=Math.floor((Date.now()-t)/1e3);if(n<60)return"Just now";const a=Math.floor(n/60);if(a<60)return`${a}m ago`;const o=Math.floor(a/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function OR(t){switch(t){case"error":return"bg-destructive";case"update":return"bg-amber-500";case"bot":return"bg-emerald-500";default:return"bg-primary"}}function LR(){const t=ao(),{items:n,unreadCount:a,loading:o,markAllRead:c,dismiss:l,refresh:d}=dR(),[m,p]=f.useState(!1),g=v=>{p(v),v&&(d(),a>0&&c())},b=v=>{p(!1),v.href&&t(v.href)};return s.jsxs(zg,{open:m,onOpenChange:g,children:[s.jsx(Pg,{asChild:!0,children:s.jsxs(ue,{variant:"ghost",size:"icon",className:"relative size-9 text-muted-foreground","aria-label":"Notifications",children:[s.jsx(xe,{icon:N8,size:18}),a>0&&s.jsx(Fn,{className:"absolute -right-0.5 -top-0.5 flex size-4 min-w-4 items-center justify-center rounded-full bg-destructive p-0 text-[10px] text-destructive-foreground",children:a>9?"9+":a})]})}),s.jsxs(Fd,{align:"end",className:"w-80 p-0",children:[s.jsxs("div",{className:"flex items-center justify-between px-3 py-2",children:[s.jsx(Ig,{className:"p-0 text-sm font-semibold",children:"Notifications"}),n.length>0&&s.jsx(ue,{variant:"ghost",size:"sm",className:"h-7 text-xs text-muted-foreground",onClick:()=>void c(),children:"Mark all read"})]}),s.jsx(Fl,{className:"m-0"}),s.jsx(fc,{className:"max-h-[min(360px,50vh)]",children:o&&n.length===0?s.jsx("p",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"Loading…"}):n.length===0?s.jsx("p",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"No notifications yet. Bot restarts and update checks will appear here."}):s.jsx("ul",{className:"py-1",children:n.map(v=>s.jsxs("li",{className:pe("group flex gap-2 border-b border-border/40 px-3 py-2.5 last:border-0",!v.read&&"bg-primary/5"),children:[s.jsx("span",{className:pe("mt-1.5 size-2 shrink-0 rounded-full",OR(v.type))}),s.jsxs("button",{type:"button",className:"min-w-0 flex-1 text-left",onClick:()=>b(v),children:[s.jsx("p",{className:"text-sm font-medium leading-tight",children:v.title}),s.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground line-clamp-2",children:v.message}),s.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground/80",children:DR(v.createdAt)})]}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 shrink-0 opacity-0 group-hover:opacity-100","aria-label":"Dismiss",onClick:w=>{w.stopPropagation(),l(v.id)},children:s.jsx(xe,{icon:ba,size:14})})]},v.id))})}),s.jsx(Fl,{className:"m-0"}),s.jsx("div",{className:"p-2",children:s.jsx(ue,{variant:"ghost",size:"sm",className:"w-full text-xs",asChild:!0,children:s.jsx(en,{to:"/settings",onClick:()=>p(!1),children:"Open settings (updates)"})})})]})]})}var zR=Object.defineProperty,PR=(t,n)=>zR(t,"name",{value:n,configurable:!0});function KC(t){const n=f.useRef({value:t,previous:t});return f.useMemo(()=>(n.current.value!==t&&(n.current.previous=n.current.value,n.current.value=t),n.current.previous),[t])}PR(KC,"usePrevious");var IR=Object.defineProperty,nt=(t,n)=>IR(t,"name",{value:n,configurable:!0}),UR=[" ","Enter","ArrowUp","ArrowDown"],BR=[" ","Enter"],fi="Select",[Zd,Qd,$R]=Td(fi),[co,VP]=bn(fi,[$R,Cs]),ex=Cs(),[HR,Ss]=co(fi),[GR,VR]=co(fi);function WC(t){const{__scopeSelect:n,children:a,open:o,defaultOpen:c,onOpenChange:l,value:d,defaultValue:m,onValueChange:p,dir:g,name:b,autoComplete:v,disabled:w,required:y,form:C,internal_do_not_use_render:S}=t,N=ex(n),[E,T]=f.useState(null),[M,k]=f.useState(null),[_,R]=f.useState(!1),L=Si(g),[ne,X]=Vr({prop:o,defaultProp:c??!1,onChange:l,caller:fi}),[I,H]=Vr({prop:d,defaultProp:m,onChange:p,caller:fi}),q=f.useRef(null),ce=f.useRef(I);f.useEffect(()=>{const D=C?E==null?void 0:E.ownerDocument.getElementById(C):E==null?void 0:E.form;if(D instanceof HTMLFormElement){const B=nt(()=>H(ce.current),"reset");return D.addEventListener("reset",B),()=>D.removeEventListener("reset",B)}},[C,E,H]);const de=E?!!C||!!E.closest("form"):!0,[se,P]=f.useState(new Set),W=nn(),oe=Array.from(se).map(D=>D.props.value).join(";"),ae=f.useCallback(D=>{P(B=>new Set(B).add(D))},[]),G=f.useCallback(D=>{P(B=>{const V=new Set(B);return V.delete(D),V})},[]),O={required:y,trigger:E,onTriggerChange:T,valueNode:M,onValueNodeChange:k,valueNodeHasChildren:_,onValueNodeHasChildrenChange:R,contentId:W,value:I,onValueChange:H,open:ne,onOpenChange:X,dir:L,triggerPointerDownPosRef:q,disabled:w,name:b,autoComplete:v,form:C,nativeOptions:se,nativeSelectKey:oe,isFormControl:de};return s.jsx(zd,{...N,children:s.jsx(HR,{scope:n,...O,children:s.jsx(Zd.Provider,{scope:n,children:s.jsx(GR,{scope:n,onNativeOptionAdd:ae,onNativeOptionRemove:G,children:oS(S)?S(O):a})})})})}nt(WC,"SelectProvider");var FR=nt(t=>{const{__scopeSelect:n,children:a,...o}=t;return s.jsx(WC,{__scopeSelect:n,...o,internal_do_not_use_render:({isFormControl:c})=>s.jsxs(s.Fragment,{children:[a,c?s.jsx(pA,{__scopeSelect:n}):null]})})},"Select"),YR="SelectTrigger",XC=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,disabled:c=!1,...l}=n,d=ex(o),m=Ss(YR,o),p=m.disabled||c,g=Pe(a,m.onTriggerChange),b=Qd(o),v=f.useRef("touch"),[w,y,C]=nx(N=>{const E=b().filter(k=>!k.disabled),T=E.find(k=>k.value===m.value),M=rx(E,N,T);M!==void 0&&m.onValueChange(M.value)}),S=nt(N=>{p||(m.onOpenChange(!0),C()),N&&(m.triggerPointerDownPosRef.current={x:Math.round(N.pageX),y:Math.round(N.pageY)})},"handleOpen");return s.jsx(Pd,{asChild:!0,...d,children:s.jsx(Me.button,{type:"button",role:"combobox","aria-controls":m.open?m.contentId:void 0,"aria-expanded":m.open,"aria-required":m.required,"aria-autocomplete":"none",dir:m.dir,"data-state":m.open?"open":"closed",disabled:p,"data-disabled":p?"":void 0,"data-placeholder":mc(m.value)?"":void 0,...l,ref:g,onClick:Ce(l.onClick,N=>{N.currentTarget.focus(),v.current!=="mouse"&&S(N)}),onPointerDown:Ce(l.onPointerDown,N=>{v.current=N.pointerType;const E=N.target;E.hasPointerCapture(N.pointerId)&&E.releasePointerCapture(N.pointerId),N.button===0&&N.ctrlKey===!1&&N.pointerType==="mouse"&&(S(N),N.preventDefault())}),onKeyDown:Ce(l.onKeyDown,N=>{const E=w.current!=="";!(N.ctrlKey||N.altKey||N.metaKey)&&N.key.length===1&&y(N.key),!(E&&N.key===" ")&&UR.includes(N.key)&&(S(),N.preventDefault())})})})},"SelectTrigger")),qR="SelectValue",KR=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,className:c,style:l,children:d,placeholder:m="",...p}=n,g=Ss(qR,o),{onValueNodeHasChildrenChange:b}=g,v=d!==void 0,w=Pe(a,g.onValueNodeChange);St(()=>{b(v)},[b,v]);const y=mc(g.value);return s.jsx(Me.span,{...p,asChild:y?!1:p.asChild,ref:w,style:{pointerEvents:"none"},children:s.jsx(f.Fragment,{children:y?m:d},y?"placeholder":"value")})},"SelectValue")),WR=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,children:c,...l}=n;return s.jsx(Me.span,{"aria-hidden":!0,...l,ref:a,children:c||"▼"})},"SelectIcon")),XR="SelectPortal",[ZR,QR]=co(XR,{forceMount:void 0}),JR=nt(t=>{const{__scopeSelect:n,forceMount:a,...o}=t;return s.jsx(ZR,{scope:t.__scopeSelect,forceMount:a,children:s.jsx(rc,{asChild:!0,...o})})},"SelectPortal"),no="SelectContent",ZC=f.forwardRef(nt(function(n,a){const o=QR(no,n.__scopeSelect),{forceMount:c=o.forceMount,...l}=n,d=Ss(no,n.__scopeSelect),[m,p]=f.useState();return St(()=>{p(new DocumentFragment)},[]),s.jsx(fn,{present:c||d.open,children:({present:g})=>g?s.jsx(nA,{...l,ref:a}):s.jsx(eA,{...l,fragment:m})})},"SelectContent")),eA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,children:c,fragment:l}=n;return l?so.createPortal(s.jsx(QC,{scope:o,children:s.jsx(Zd.Slot,{scope:o,children:s.jsx("div",{ref:a,children:c})})}),l):null},"SelectContentFragment")),Cr=10,[QC,uo]=co(no),tA=Er("SelectContent.RemoveScroll"),nA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o}=n,{position:c="item-aligned",onCloseAutoFocus:l,onEscapeKeyDown:d,onPointerDownOutside:m,side:p,sideOffset:g,align:b,alignOffset:v,arrowPadding:w,collisionBoundary:y,collisionPadding:C,sticky:S,hideWhenDetached:N,avoidCollisions:E,...T}=n,M=Ss(no,o),[k,_]=f.useState(null),[R,L]=f.useState(null),ne=Pe(a,_),[X,I]=f.useState(null),[H,q]=f.useState(null),ce=Qd(o),[de,se]=f.useState(!1),P=f.useRef(!1);f.useEffect(()=>{if(k)return $d(k)},[k]),Ni();const W=f.useCallback(ge=>{const[me,...$]=ce().map(Se=>Se.ref.current),[ie]=$.slice(-1),ye=document.activeElement;for(const Se of ge)if(Se===ye||(Se==null||Se.scrollIntoView({block:"nearest"}),Se===me&&R&&(R.scrollTop=0),Se===ie&&R&&(R.scrollTop=R.scrollHeight),Se==null||Se.focus(),document.activeElement!==ye))return},[ce,R]),oe=f.useCallback(()=>W([X,k]),[W,X,k]);f.useEffect(()=>{de&&oe()},[de,oe]);const{onOpenChange:ae,triggerPointerDownPosRef:G}=M;f.useEffect(()=>{if(k){let ge={x:0,y:0};const me=nt(ie=>{var ye,Se;ge={x:Math.abs(Math.round(ie.pageX)-(((ye=G.current)==null?void 0:ye.x)??0)),y:Math.abs(Math.round(ie.pageY)-(((Se=G.current)==null?void 0:Se.y)??0))}},"handlePointerMove"),$=nt(ie=>{ge.x<=10&&ge.y<=10?ie.preventDefault():ie.composedPath().includes(k)||ae(!1),document.removeEventListener("pointermove",me),G.current=null},"handlePointerUp");return G.current!==null&&(document.addEventListener("pointermove",me),document.addEventListener("pointerup",$,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",me),document.removeEventListener("pointerup",$,{capture:!0})}}},[k,ae,G]),f.useEffect(()=>{const ge=nt(()=>ae(!1),"close");return window.addEventListener("blur",ge),window.addEventListener("resize",ge),()=>{window.removeEventListener("blur",ge),window.removeEventListener("resize",ge)}},[ae]);const[O,D]=nx(ge=>{const me=ce().filter(ye=>!ye.disabled),$=me.find(ye=>ye.ref.current===document.activeElement),ie=rx(me,ge,$);ie&&setTimeout(()=>{var ye;return(ye=ie.ref.current)==null?void 0:ye.focus()})}),B=f.useCallback((ge,me,$)=>{const ie=!P.current&&!$;(M.value!==void 0&&M.value===me||ie)&&(I(ge),ie&&(P.current=!0))},[M.value]),V=f.useCallback(()=>k==null?void 0:k.focus(),[k]),Z=f.useCallback((ge,me,$)=>{const ie=!P.current&&!$;(M.value!==void 0&&M.value===me||ie)&&q(ge)},[M.value]),be=c==="popper"?S0:rA,K=be===S0?{side:p,sideOffset:g,align:b,alignOffset:v,arrowPadding:w,collisionBoundary:y,collisionPadding:C,sticky:S,hideWhenDetached:N,avoidCollisions:E}:{};return s.jsx(QC,{scope:o,content:k,viewport:R,onViewportChange:L,itemRefCallback:B,selectedItem:X,onItemLeave:V,itemTextRefCallback:Z,focusSelectedItem:oe,selectedItemText:H,position:c,isPositioned:de,searchRef:O,children:s.jsx(ac,{as:tA,allowPinchZoom:!0,children:s.jsx(Md,{asChild:!0,trapped:M.open,onMountAutoFocus:ge=>{ge.preventDefault()},onUnmountAutoFocus:Ce(l,ge=>{var me;(me=M.trigger)==null||me.focus({preventScroll:!0}),ge.preventDefault()}),children:s.jsx(nc,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:d,onPointerDownOutside:m,onFocusOutside:ge=>ge.preventDefault(),onDismiss:()=>M.onOpenChange(!1),children:s.jsx(be,{role:"listbox",id:M.contentId,"data-state":M.open?"open":"closed",dir:M.dir,onContextMenu:ge=>ge.preventDefault(),...T,...K,onPlaced:()=>se(!0),ref:ne,style:{display:"flex",flexDirection:"column",outline:"none",...T.style},onKeyDown:Ce(T.onKeyDown,ge=>{const me=ge.ctrlKey||ge.altKey||ge.metaKey;if(ge.key==="Tab"&&ge.preventDefault(),!me&&ge.key.length===1&&D(ge.key),["ArrowUp","ArrowDown","Home","End"].includes(ge.key)){let ie=ce().filter(ye=>!ye.disabled).map(ye=>ye.ref.current);if(["ArrowUp","End"].includes(ge.key)&&(ie=ie.slice().reverse()),["ArrowUp","ArrowDown"].includes(ge.key)){const ye=ge.target,Se=ie.indexOf(ye);ie=ie.slice(Se+1)}setTimeout(()=>W(ie)),ge.preventDefault()}})})})})})})},"SelectContentImpl")),rA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,onPlaced:c,...l}=n,d=Ss(no,o),m=uo(no,o),[p,g]=f.useState(null),[b,v]=f.useState(null),w=Pe(a,v),y=Qd(o),C=f.useRef(!1),S=f.useRef(!0),{viewport:N,selectedItem:E,selectedItemText:T,focusSelectedItem:M}=m,k=f.useCallback(()=>{if(d.trigger&&d.valueNode&&p&&b&&N&&E&&T){const ne=d.trigger.getBoundingClientRect(),X=b.getBoundingClientRect(),I=d.valueNode.getBoundingClientRect(),H=T.getBoundingClientRect();if(d.dir!=="rtl"){const ye=H.left-X.left,Se=I.left-ye,Be=ne.left-Se,Ke=ne.width+Be,We=Math.max(Ke,X.width),qt=window.innerWidth-Cr,vn=ud(Se,[Cr,Math.max(Cr,qt-We)]);p.style.minWidth=Ke+"px",p.style.left=vn+"px"}else{const ye=X.right-H.right,Se=window.innerWidth-I.right-ye,Be=window.innerWidth-ne.right-Se,Ke=ne.width+Be,We=Math.max(Ke,X.width),qt=window.innerWidth-Cr,vn=ud(Se,[Cr,Math.max(Cr,qt-We)]);p.style.minWidth=Ke+"px",p.style.right=vn+"px"}const q=y(),ce=window.innerHeight-Cr*2,de=N.scrollHeight,se=window.getComputedStyle(b),P=parseInt(se.borderTopWidth,10),W=parseInt(se.paddingTop,10),oe=parseInt(se.borderBottomWidth,10),ae=parseInt(se.paddingBottom,10),G=P+W+de+ae+oe,O=Math.min(E.offsetHeight*5,G),D=window.getComputedStyle(N),B=parseInt(D.paddingTop,10),V=parseInt(D.paddingBottom,10),Z=ne.top+ne.height/2-Cr,be=ce-Z,K=E.offsetHeight/2,ge=E.offsetTop+K,me=P+W+ge,$=G-me;if(me<=Z){const ye=q.length>0&&E===q[q.length-1].ref.current;p.style.bottom="0px";const Se=b.clientHeight-N.offsetTop-N.offsetHeight,Be=Math.max(be,K+(ye?V:0)+Se+oe),Ke=me+Be;p.style.height=Ke+"px"}else{const ye=q.length>0&&E===q[0].ref.current;p.style.top="0px";const Be=Math.max(Z,P+N.offsetTop+(ye?B:0)+K)+$;p.style.height=Be+"px",N.scrollTop=me-Z+N.offsetTop}p.style.margin=`${Cr}px 0`,p.style.minHeight=O+"px",p.style.maxHeight=ce+"px",c==null||c(),requestAnimationFrame(()=>C.current=!0)}},[y,d.trigger,d.valueNode,p,b,N,E,T,d.dir,c]);St(()=>k(),[k]);const[_,R]=f.useState();St(()=>{b&&R(window.getComputedStyle(b).zIndex)},[b]);const L=f.useCallback(ne=>{ne&&S.current===!0&&(k(),M==null||M(),S.current=!1)},[k,M]);return s.jsx(aA,{scope:o,contentWrapper:p,shouldExpandOnScrollRef:C,onScrollButtonChange:L,children:s.jsx("div",{ref:g,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:_},children:s.jsx(Me.div,{...l,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...l.style}})})})},"SelectItemAlignedPosition")),S0=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,align:c="start",collisionPadding:l=Cr,...d}=n,m=ex(o);return s.jsx(Id,{...m,...d,ref:a,align:c,collisionPadding:l,style:{boxSizing:"border-box",...d.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})},"SelectPopperPosition")),[aA,tx]=co(no,{}),N0="SelectViewport",sA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,nonce:c,...l}=n,d=uo(N0,o),m=tx(N0,o),p=Pe(a,d.onViewportChange),g=f.useRef(0);return s.jsxs(s.Fragment,{children:[s.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:c}),s.jsx(Zd.Slot,{scope:o,children:s.jsx(Me.div,{"data-radix-select-viewport":"",role:"presentation",...l,ref:p,style:{position:"relative",flex:1,overflow:"hidden auto",...l.style},onScroll:Ce(l.onScroll,b=>{const v=b.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:y}=m;if(y!=null&&y.current&&w){const C=Math.abs(g.current-v.scrollTop);if(C>0){const S=window.innerHeight-Cr*2,N=parseFloat(w.style.minHeight),E=parseFloat(w.style.height),T=Math.max(N,E);if(T0?_:0,w.style.justifyContent="flex-end")}}}g.current=v.scrollTop})})})]})},"SelectViewport")),oA="SelectGroup",[FP,iA]=co(oA),lA="SelectLabel",JC=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,...c}=n,l=iA(lA,o);return s.jsx(Me.div,{id:l.id,...c,ref:a})},"SelectLabel")),zh="SelectItem",[cA,eS]=co(zh),tS=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,value:c,disabled:l=!1,textValue:d,...m}=n,p=Ss(zh,o),g=uo(zh,o),b=p.value===c,[v,w]=f.useState(d??""),[y,C]=f.useState(!1),S=Vt(k=>{var _;return(_=g.itemRefCallback)==null?void 0:_.call(g,k,c,l)}),N=Pe(a,S),E=nn(),T=f.useRef("touch"),M=nt(()=>{l||(p.onValueChange(c),p.onOpenChange(!1))},"handleSelect");return s.jsx(cA,{scope:o,value:c,disabled:l,textId:E,isSelected:b,onItemTextChange:f.useCallback(k=>{w(_=>_||((k==null?void 0:k.textContent)??"").trim())},[]),children:s.jsx(Zd.ItemSlot,{scope:o,value:c,disabled:l,textValue:v,children:s.jsx(Me.div,{role:"option","aria-labelledby":E,"data-highlighted":y?"":void 0,"aria-selected":b&&y,"data-state":b?"checked":"unchecked","aria-disabled":l||void 0,"data-disabled":l?"":void 0,tabIndex:l?void 0:-1,...m,ref:N,onFocus:Ce(m.onFocus,()=>C(!0)),onBlur:Ce(m.onBlur,()=>C(!1)),onClick:Ce(m.onClick,()=>{T.current!=="mouse"&&M()}),onPointerUp:Ce(m.onPointerUp,()=>{T.current==="mouse"&&M()}),onPointerDown:Ce(m.onPointerDown,k=>{T.current=k.pointerType}),onPointerMove:Ce(m.onPointerMove,k=>{var _;T.current=k.pointerType,l?(_=g.onItemLeave)==null||_.call(g):T.current==="mouse"&&k.currentTarget.focus({preventScroll:!0})}),onPointerLeave:Ce(m.onPointerLeave,k=>{var _;k.currentTarget===document.activeElement&&((_=g.onItemLeave)==null||_.call(g))}),onKeyDown:Ce(m.onKeyDown,k=>{var R;l||k.target!==k.currentTarget||((R=g.searchRef)==null?void 0:R.current)!==""&&k.key===" "||(BR.includes(k.key)&&M(),k.key===" "&&k.preventDefault())})})})})},"SelectItem")),Pu="SelectItemText",uA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,className:c,style:l,...d}=n,m=Ss(Pu,o),p=uo(Pu,o),g=eS(Pu,o),b=VR(Pu,o),[v,w]=f.useState(null),y=Vt(M=>{var k;return(k=p.itemTextRefCallback)==null?void 0:k.call(p,M,g.value,g.disabled)}),C=Pe(a,w,g.onItemTextChange,y),S=v==null?void 0:v.textContent,N=f.useMemo(()=>s.jsx("option",{value:g.value,disabled:g.disabled,children:S},g.value),[g.disabled,g.value,S]),{onNativeOptionAdd:E,onNativeOptionRemove:T}=b;return St(()=>(E(N),()=>T(N)),[E,T,N]),s.jsxs(s.Fragment,{children:[s.jsx(Me.span,{id:g.textId,...d,ref:C}),g.isSelected&&m.valueNode&&!m.valueNodeHasChildren&&!mc(m.value)?so.createPortal(d.children,m.valueNode):null]})},"SelectItemText")),dA="SelectItemIndicator",fA=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,...c}=n;return eS(dA,o).isSelected?s.jsx(Me.span,{"aria-hidden":!0,...c,ref:a}):null},"SelectItemIndicator")),E0="SelectScrollUpButton",nS=f.forwardRef(nt(function(n,a){const o=uo(E0,n.__scopeSelect),c=tx(E0,n.__scopeSelect),[l,d]=f.useState(!1),m=Pe(a,c.onScrollButtonChange);return St(()=>{if(o.viewport&&o.isPositioned){let p=function(){const b=g.scrollTop>0;d(b)};nt(p,"handleScroll");const g=o.viewport;return p(),g.addEventListener("scroll",p),()=>g.removeEventListener("scroll",p)}},[o.viewport,o.isPositioned]),l?s.jsx(aS,{...n,ref:m,onAutoScroll:()=>{const{viewport:p,selectedItem:g}=o;p&&g&&(p.scrollTop=p.scrollTop-g.offsetHeight)}}):null},"SelectScrollUpButton")),k0="SelectScrollDownButton",rS=f.forwardRef(nt(function(n,a){const o=uo(k0,n.__scopeSelect),c=tx(k0,n.__scopeSelect),[l,d]=f.useState(!1),m=Pe(a,c.onScrollButtonChange);return St(()=>{if(o.viewport&&o.isPositioned){let p=function(){const b=g.scrollHeight-g.clientHeight,v=Math.ceil(g.scrollTop)g.removeEventListener("scroll",p)}},[o.viewport,o.isPositioned]),l?s.jsx(aS,{...n,ref:m,onAutoScroll:()=>{const{viewport:p,selectedItem:g}=o;p&&g&&(p.scrollTop=p.scrollTop+g.offsetHeight)}}):null},"SelectScrollDownButton")),aS=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,onAutoScroll:c,...l}=n,d=uo("SelectScrollButton",o),m=f.useRef(null),p=Qd(o),g=f.useCallback(()=>{m.current!==null&&(window.clearInterval(m.current),m.current=null)},[]);return f.useEffect(()=>()=>g(),[g]),St(()=>{var v;const b=p().find(w=>w.ref.current===document.activeElement);(v=b==null?void 0:b.ref.current)==null||v.scrollIntoView({block:"nearest"})},[p]),s.jsx(Me.div,{"aria-hidden":!0,...l,ref:a,style:{flexShrink:0,...l.style},onPointerDown:Ce(l.onPointerDown,()=>{m.current===null&&(m.current=window.setInterval(c,50))}),onPointerMove:Ce(l.onPointerMove,()=>{var b;(b=d.onItemLeave)==null||b.call(d),m.current===null&&(m.current=window.setInterval(c,50))}),onPointerLeave:Ce(l.onPointerLeave,()=>{g()})})},"SelectScrollButtonImpl")),sS=f.forwardRef(nt(function(n,a){const{__scopeSelect:o,...c}=n;return s.jsx(Me.div,{"aria-hidden":!0,...c,ref:a})},"SelectSeparator")),mA="SelectBubbleInput",pA=f.forwardRef(nt(function({__scopeSelect:n,...a},o){const c=Ss(mA,n),{value:l,onValueChange:d,required:m,disabled:p,name:g,autoComplete:b,form:v}=c,{nativeOptions:w,nativeSelectKey:y}=c,C=f.useRef(null),S=Pe(o,C),N=l??"",E=KC(N),T=Array.from(w).some(M=>(M.props.value??"")==="");return f.useEffect(()=>{const M=C.current;if(!M)return;const k=window.HTMLSelectElement.prototype,R=Object.getOwnPropertyDescriptor(k,"value").set;if(E!==N&&R){const L=new Event("change",{bubbles:!0});R.call(M,N),M.dispatchEvent(L)}},[E,N]),s.jsxs(Me.select,{"aria-hidden":!0,required:m,tabIndex:-1,name:g,autoComplete:b,disabled:p,form:v,onChange:M=>d(M.target.value),...a,style:{...Kj,...a.style},ref:S,defaultValue:N,children:[mc(l)&&!T?s.jsx("option",{value:""}):null,Array.from(w)]},y)},"SelectBubbleInput"));function oS(t){return typeof t=="function"}nt(oS,"isFunction");function mc(t){return t===""||t===void 0}nt(mc,"shouldShowPlaceholder");function nx(t){const n=Vt(t),a=f.useRef(""),o=f.useRef(0),c=f.useCallback(d=>{const m=a.current+d;n(m),nt((function p(g){a.current=g,window.clearTimeout(o.current),g!==""&&(o.current=window.setTimeout(()=>p(""),1e3))}),"updateSearch")(m)},[n]),l=f.useCallback(()=>{a.current="",window.clearTimeout(o.current)},[]);return f.useEffect(()=>()=>window.clearTimeout(o.current),[]),[a,c,l]}nt(nx,"useTypeaheadSearch");function rx(t,n,a){const c=n.length>1&&Array.from(n).every(g=>g===n[0])?n[0]:n,l=a?t.indexOf(a):-1;let d=iS(t,Math.max(l,0));c.length===1&&(d=d.filter(g=>g!==a));const p=d.find(g=>g.textValue.toLowerCase().startsWith(c.toLowerCase()));return p!==a?p:void 0}nt(rx,"findNextItem");function iS(t,n){return t.map((a,o)=>t[(n+o)%t.length])}nt(iS,"wrapArray");const Ca=FR,Sa=KR,Hr=f.forwardRef(({className:t,children:n,...a},o)=>s.jsxs(XC,{ref:o,className:pe("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...a,children:[n,s.jsx(WR,{asChild:!0,children:s.jsx(Lj,{className:"h-4 w-4 opacity-50"})})]}));Hr.displayName=XC.displayName;const lS=f.forwardRef(({className:t,...n},a)=>s.jsx(nS,{ref:a,className:pe("flex cursor-default items-center justify-center py-1",t),...n,children:s.jsx(PT,{className:"h-4 w-4"})}));lS.displayName=nS.displayName;const cS=f.forwardRef(({className:t,...n},a)=>s.jsx(rS,{ref:a,className:pe("flex cursor-default items-center justify-center py-1",t),...n,children:s.jsx(Lj,{className:"h-4 w-4"})}));cS.displayName=rS.displayName;const Gr=f.forwardRef(({className:t,children:n,position:a="popper",...o},c)=>s.jsx(JR,{children:s.jsxs(ZC,{ref:c,className:pe("relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",a==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:a,...o,children:[s.jsx(lS,{}),s.jsx(sA,{className:pe("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:n}),s.jsx(cS,{})]})}));Gr.displayName=ZC.displayName;const hA=f.forwardRef(({className:t,...n},a)=>s.jsx(JC,{ref:a,className:pe("px-2 py-1.5 text-sm font-semibold",t),...n}));hA.displayName=JC.displayName;const Et=f.forwardRef(({className:t,children:n,...a},o)=>s.jsxs(tS,{ref:o,className:pe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...a,children:[s.jsx("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(fA,{children:s.jsx(Oj,{className:"h-4 w-4"})})}),s.jsx(uA,{children:n})]}));Et.displayName=tS.displayName;const gA=f.forwardRef(({className:t,...n},a)=>s.jsx(sS,{ref:a,className:pe("-mx-1 my-1 h-px bg-muted",t),...n}));gA.displayName=sS.displayName;function xA(){const{stats:t}=kd(),{user:n,logout:a,availableGroups:o,isImpersonating:c,impersonatedGroup:l,impersonateGroup:d,stopImpersonation:m,hasPermission:p}=Yt();n!=null&&n.isOwner||p("users.manage");const g=(t==null?void 0:t.bot.username)??"SupportBot",b=n?P2(n):g,v=(n==null?void 0:n.avatar)??(t==null?void 0:t.bot.avatar),w=t==null?void 0:t.bot.inviteUrl,y=new Intl.DateTimeFormat("en-US",{weekday:"short",month:"short",day:"numeric",year:"numeric"}).format(new Date);return s.jsxs(s.Fragment,{children:[c&&l&&s.jsxs("div",{className:"relative z-50 flex items-center justify-between gap-3 bg-gradient-to-r from-amber-500/10 via-amber-500/15 to-amber-500/10 border-b border-amber-500/30 px-4 py-2 text-xs backdrop-blur-md shadow-sm",children:[s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-amber-500/20 text-amber-300 text-[11px] font-bold tracking-wide uppercase border border-amber-500/30",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-amber-400 animate-pulse"}),"Preview Mode"]}),s.jsxs("div",{className:"flex items-center gap-2 text-foreground font-medium",children:[s.jsx("span",{className:"text-muted-foreground",children:"Viewing dashboard as:"}),s.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-0.5 rounded-md bg-secondary/80 border border-border/80",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:l.color||"#10B981"}}),s.jsx("span",{className:"font-semibold text-xs text-foreground",children:l.name})]})]})]}),s.jsxs("div",{className:"flex items-center gap-2.5",children:[o.length>1&&s.jsxs(Ca,{value:l.id,onValueChange:C=>d(C),children:[s.jsx(Hr,{className:"h-7 text-xs bg-background/80 border-amber-500/30 text-amber-200 focus:ring-amber-500/40 w-[160px]",children:s.jsx(Sa,{})}),s.jsx(Gr,{className:"border-border bg-card",children:o.map(C=>s.jsx(Et,{value:C.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0",style:{backgroundColor:C.color||"#10B981"}}),s.jsx("span",{children:C.name})]})},C.id))})]}),s.jsx(ue,{size:"sm",variant:"outline",className:"h-7 px-3 text-xs bg-card border-amber-500/40 text-amber-300 hover:bg-amber-500/20 hover:text-white transition-all shadow-sm",onClick:m,children:"Exit Preview Mode"})]})]}),s.jsxs("header",{className:"relative z-40 flex h-14 shrink-0 items-center gap-3 border-b border-border bg-card px-4 md:px-6",children:[s.jsx(cC,{className:"-ml-1 text-muted-foreground hover:text-foreground md:hidden"}),s.jsx("p",{className:"hidden shrink-0 text-sm font-medium text-muted-foreground lg:block",children:y}),s.jsx(nR,{className:"min-w-0 flex-1"}),s.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[w?s.jsx(ue,{variant:"ghost",size:"icon",className:"hidden size-9 text-muted-foreground sm:inline-flex",asChild:!0,children:s.jsx("a",{href:w,target:"_blank",rel:"noopener noreferrer","aria-label":"Invite bot to a server",title:"Invite bot to a server",children:s.jsx(xe,{icon:nh,size:18})})}):s.jsx(ue,{variant:"ghost",size:"icon",className:"hidden size-9 text-muted-foreground sm:inline-flex",disabled:!0,"aria-label":"Invite bot to a server",title:"Invite link available when the bot is online",children:s.jsx(xe,{icon:nh,size:18})}),s.jsx(LR,{}),s.jsxs(zg,{children:[s.jsx(Pg,{asChild:!0,children:s.jsxs(ue,{variant:"ghost",className:"h-9 gap-2 rounded-full px-2 hover:bg-secondary",children:[s.jsxs(vs,{className:"size-7",children:[s.jsx(eo,{src:v,alt:b}),s.jsx(ys,{className:"bg-primary/20 text-xs text-primary",children:b.slice(0,2).toUpperCase()})]}),s.jsx("span",{className:"hidden max-w-[100px] truncate text-sm font-medium sm:inline",children:b}),s.jsx(xe,{icon:k2,size:16,className:"text-muted-foreground"})]})}),s.jsxs(Fd,{align:"end",className:"w-56",children:[s.jsx(Ig,{children:"Account"}),s.jsx(Fl,{}),n?s.jsxs(Vl,{disabled:!0,className:"text-xs text-muted-foreground",children:[n.username,n.id?` · ${n.id}`:""]}):null,s.jsx(Fl,{}),s.jsx(Vl,{onClick:()=>{a()},children:"Sign out"})]})]})]})]})]})}const T0={error:0,warning:1,info:2};function bA(t){return[...t].sort((n,a)=>{const o=T0[n.severity]??9,c=T0[a.severity]??9;return o!==c?o-c:n.title.localeCompare(a.title)})}function vA(t){const n=new Set;return t.filter(a=>n.has(a.id)?!1:(n.add(a.id),!0))}class yA{constructor(){by(this,"clientProviders",new Map)}register(n){return this.clientProviders.set(n.id,n),this}unregister(n){this.clientProviders.delete(n)}async evaluateClientProviders(){const n=[];for(const a of this.clientProviders.values()){const o=await a.evaluate();Array.isArray(o)&&o.length&&n.push(...o)}return n}async loadAll(){const[n,a]=await Promise.all([Ne.getAlerts().catch(()=>({data:[]})),this.evaluateClientProviders()]),o=n.data??[];return bA(vA([...o,...a]))}}const wA=new yA,jA={error:{border:"border-destructive/40",bg:"bg-destructive/10",icon:"text-destructive",title:"text-destructive"},warning:{border:"border-amber-500/40",bg:"bg-amber-500/10",icon:"text-amber-500",title:"text-amber-200"},info:{border:"border-sky-500/40",bg:"bg-sky-500/10",icon:"text-sky-400",title:"text-sky-100"}},CA=ji("relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),Ye=f.forwardRef(({className:t,variant:n,...a},o)=>s.jsx("div",{ref:o,role:"alert",className:pe(CA({variant:n}),t),...a}));Ye.displayName="Alert";const uS=f.forwardRef(({className:t,...n},a)=>s.jsx("h5",{ref:a,className:pe("mb-1 font-medium leading-none tracking-tight",t),...n}));uS.displayName="AlertTitle";const qe=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("text-sm [&_p]:leading-relaxed",t),...n}));qe.displayName="AlertDescription";function SA(t){return t==="info"?w8:ig}function NA({alert:t,context:n}){var d,m,p;const a=jA[t.severity],o=((d=t.meta)==null?void 0:d.extraGuilds)??[],c=(m=t.meta)==null?void 0:m.status,l=(p=t.meta)==null?void 0:p.progress;return s.jsxs(Ye,{variant:"destructive",className:`${a.border} ${a.bg} text-foreground`,children:[s.jsx(xe,{icon:SA(t.severity),size:18,className:a.icon}),s.jsx(uS,{className:a.title,children:t.title}),s.jsxs(qe,{className:"space-y-3 text-sm text-muted-foreground",children:[s.jsx("p",{children:t.message}),t.category==="guild"&&c==="missing_config"?s.jsxs("p",{children:["Open"," ",s.jsx(en,{to:"/configs?file=supportbot",className:"font-medium text-primary underline-offset-4 hover:underline",children:"Bot config"})," ","and set ",s.jsx("strong",{className:"text-foreground",children:"Server (guild) ID"})," ","(enable Developer Mode in Discord, then right-click your server → Copy Server ID)."]}):null,t.category==="modules"&&l?s.jsxs("p",{className:"text-xs",children:["Progress: ",s.jsx("span",{className:"text-foreground",children:l})]}):null,o.length>0?s.jsx("ul",{className:"space-y-2",children:o.map(g=>s.jsxs("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border bg-background/40 px-3 py-2",children:[s.jsxs("span",{children:[s.jsx("span",{className:"font-medium text-foreground",children:g.name}),s.jsx("span",{className:"ml-2 font-mono text-xs",children:g.id})]}),n.canLeaveGuild?s.jsxs(ue,{type:"button",size:"sm",variant:"outline",disabled:n.leavingGuildId===g.id,onClick:()=>void n.onLeaveGuild(g.id),children:[s.jsx(xe,{icon:j8,size:14,className:"mr-1.5"}),n.leavingGuildId===g.id?"Leaving…":"Leave server"]}):null]},g.id))}):null,n.actionError?s.jsx("p",{className:"text-destructive",children:n.actionError}):null,s.jsxs("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:[t.action?s.jsx(ue,{asChild:!0,size:"sm",variant:"secondary",children:s.jsx(en,{to:t.action.href,children:t.action.label})}):null,t.category==="guild"?s.jsx("p",{className:"text-xs",children:"The dashboard stays online while you fix this. Some features may be limited until setup is complete."}):null]})]})]})}const EA=15e3;function kA(){const{hasPermission:t}=Yt(),n=t("settings.update"),[a,o]=f.useState([]),[c,l]=f.useState(null),[d,m]=f.useState(""),p=f.useCallback(async()=>{try{const v=await wA.loadAll();o(v),m("")}catch{}},[]);f.useEffect(()=>{p();const v=window.setInterval(()=>void p(),EA);return()=>window.clearInterval(v)},[p]);async function g(v){if(n){l(v),m("");try{await Ne.leaveGuild(v),await p()}catch(w){m(w instanceof Error?w.message:"Could not leave server")}finally{l(null)}}}if(a.length===0)return null;const b={canLeaveGuild:n,onLeaveGuild:g,leavingGuildId:c,actionError:d};return s.jsx("div",{className:"space-y-3",children:a.map(v=>s.jsx(NA,{alert:v,context:b},v.id))})}function TA(){return s.jsx($8,{children:s.jsx(uR,{children:s.jsxs(iC,{children:[s.jsx(rM,{}),s.jsxs(dC,{className:"min-h-svh bg-background",children:[s.jsx(xA,{}),s.jsxs("div",{className:"flex flex-1 flex-col gap-6 p-4 md:p-6 lg:p-8",children:[s.jsx(kA,{}),s.jsx(_N,{})]})]})]})})})}const dS=f.createContext(null);function MA({children:t}){const[n,a]=f.useState(null),[o,c]=f.useState(!0),[l,d]=f.useState(""),m=f.useCallback(async()=>{d("");try{const g=await Ne.getSetupStatus();a(g.data??null)}catch(g){d(g instanceof Error?g.message:"Could not load setup status"),a(null)}},[]);f.useEffect(()=>{m().finally(()=>c(!1))},[m]);const p=f.useMemo(()=>({status:n,loading:o,error:l,complete:!!(n!=null&&n.complete),refresh:m}),[n,o,l,m]);return s.jsx(dS.Provider,{value:p,children:t})}function fS(){const t=f.useContext(dS);if(!t)throw new Error("useSetup must be used within SetupProvider");return t}var RA=Object.defineProperty,AA=(t,n)=>RA(t,"name",{value:n,configurable:!0}),_A=f.forwardRef(AA(function(n,a){return s.jsx(Me.label,{...n,ref:a,onMouseDown:o=>{var l;o.target.closest("button, input, select, textarea")||((l=n.onMouseDown)==null||l.call(n,o),!o.defaultPrevented&&o.detail>1&&o.preventDefault())}})},"Label")),mS=_A;const DA=ji("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Ae=f.forwardRef(({className:t,...n},a)=>s.jsx(mS,{ref:a,className:pe(DA(),t),...n}));Ae.displayName=mS.displayName;var OA=Object.defineProperty,ws=(t,n)=>OA(t,"name",{value:n,configurable:!0}),ax="Switch",[LA,YP]=bn(ax),[zA,sx]=LA(ax);function pS(t){const{__scopeSwitch:n,checked:a,children:o,defaultChecked:c,disabled:l,form:d,name:m,onCheckedChange:p,required:g,value:b="on",internal_do_not_use_render:v}=t,[w,y]=Vr({prop:a,defaultProp:c??!1,onChange:p,caller:ax}),[C,S]=f.useState(null),[N,E]=f.useState(null),T=f.useRef(!1),[M,k]=f.useReducer(L=>L+1,0),_=C?!!d||!!C.closest("form"):!0,R={checked:w,setChecked:y,disabled:l,control:C,setControl:S,name:m,form:d,value:b,hasConsumerStoppedPropagationRef:T,userInteractionCount:M,onUserInteraction:k,required:g,defaultChecked:c,isFormControl:_,bubbleInput:N,setBubbleInput:E};return s.jsx(zA,{scope:n,...R,children:gS(v)?v(R):o})}ws(pS,"SwitchProvider");var PA="SwitchTrigger",IA=f.forwardRef(ws(function({__scopeSwitch:n,onClick:a,...o},c){const{control:l,form:d,value:m,disabled:p,checked:g,required:b,setControl:v,setChecked:w,hasConsumerStoppedPropagationRef:y,onUserInteraction:C,isFormControl:S,bubbleInput:N}=sx(PA,n),E=Pe(c,v),T=f.useRef(g);return f.useEffect(()=>{const M=d?l==null?void 0:l.ownerDocument.getElementById(d):l==null?void 0:l.form;if(M instanceof HTMLFormElement){const k=ws(()=>w(T.current),"reset");return M.addEventListener("reset",k),()=>M.removeEventListener("reset",k)}},[l,d,w]),s.jsx(Me.button,{type:"button",role:"switch","aria-checked":g,"aria-required":b,"data-state":ox(g),"data-disabled":p?"":void 0,disabled:p,value:m,...o,ref:E,onClick:Ce(a,M=>{C(),w(k=>!k),N&&S&&(y.current=M.isPropagationStopped(),y.current||M.stopPropagation())})})},"SwitchTrigger")),hS=f.forwardRef(ws(function(n,a){const{__scopeSwitch:o,name:c,checked:l,defaultChecked:d,required:m,disabled:p,value:g,onCheckedChange:b,form:v,...w}=n;return s.jsx(pS,{__scopeSwitch:o,checked:l,defaultChecked:d,disabled:p,required:m,onCheckedChange:b,name:c,form:v,value:g,internal_do_not_use_render:({isFormControl:y})=>s.jsxs(s.Fragment,{children:[s.jsx(IA,{...w,ref:a,__scopeSwitch:o}),y&&s.jsx(HA,{__scopeSwitch:o})]})})},"Switch")),UA="SwitchThumb",BA=f.forwardRef(ws(function(n,a){const{__scopeSwitch:o,...c}=n,l=sx(UA,o);return s.jsx(Me.span,{"data-state":ox(l.checked),"data-disabled":l.disabled?"":void 0,...c,ref:a})},"SwitchThumb")),$A="SwitchBubbleInput",HA=f.forwardRef(ws(function({__scopeSwitch:n,onClick:a,...o},c){const{control:l,hasConsumerStoppedPropagationRef:d,userInteractionCount:m,checked:p,defaultChecked:g,required:b,disabled:v,name:w,value:y,form:C,bubbleInput:S,setBubbleInput:N}=sx($A,n),E=Pe(c,N),T=kg(l),M=f.useRef(!1),k=f.useRef(p),_=f.useRef(m);f.useEffect(()=>{const L=S;if(!L)return;const ne=window.HTMLInputElement.prototype,I=Object.getOwnPropertyDescriptor(ne,"checked").set,H=m!==_.current;_.current=m;const q=k.current!==p;k.current=p;const ce=!(H&&d.current);if(q&&I){M.current=!H;const de=new Event("click",{bubbles:ce});I.call(L,p),L.dispatchEvent(de),M.current=!1}},[S,p,d,m]);const R=f.useRef(p);return s.jsx(Me.input,{type:"checkbox","aria-hidden":!0,defaultChecked:g??R.current,required:b,disabled:v,name:w,value:y,form:C,...o,tabIndex:-1,ref:E,onClick:Ce(a,L=>{M.current&&L.stopPropagation()}),style:{...o.style,...T,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})},"SwitchBubbleInput"));function gS(t){return typeof t=="function"}ws(gS,"isFunction");function ox(t){return t?"checked":"unchecked"}ws(ox,"getState");const Mt=f.forwardRef(({className:t,...n},a)=>s.jsx(hS,{className:pe("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",t),...n,ref:a,children:s.jsx(BA,{className:pe("pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));Mt.displayName=hS.displayName;const Jd=f.forwardRef(({className:t,...n},a)=>s.jsx("textarea",{className:pe("flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),ref:a,...n}));Jd.displayName="Textarea";function ef(){return(ef=Object.assign||function(t){for(var n=1;n=0||(c[a]=t[a]);return c}function Dl(t){var n=f.useRef(t),a=f.useRef(function(o){n.current&&n.current(o)});return n.current=t,a.current}var Wl=function(t,n,a){return n===void 0&&(n=0),a===void 0&&(a=1),t>a?a:t0:M.buttons>0)&&l.current?d(M0(l.current,M,g.current)):(T(!1),p())},E=function(){T(!1),p()};function T(M){var k=b.current,_=Ph(l.current),R=M?_.addEventListener:_.removeEventListener;R(k?"touchmove":"mousemove",N),R(k?"touchend":"mouseup",E)}return[function(M){var k=M.nativeEvent,_=l.current;if(_&&(R0(k),!(function(L,ne){return ne&&!Ol(L)})(k,b.current)&&_)){if(Ol(k)){b.current=!0;var R=k.changedTouches||[];R.length&&(g.current=R[0].identifier)}_.focus(),d(M0(_,k,g.current)),T(!0)}},function(M){var k=M.which||M.keyCode;k<37||k>40||(M.preventDefault(),m({left:k===39?.05:k===37?-.05:0,top:k===40?.05:k===38?-.05:0}))},function(M){var k=M.which||M.keyCode;k>=37&&k<=40&&p()},T]},[m,d,p]),w=v[0],y=v[1],C=v[2],S=v[3];return f.useEffect(function(){return S},[S]),ve.createElement("div",ef({},c,{onTouchStart:w,onMouseDown:w,className:"react-colorful__interactive",ref:l,onKeyDown:y,onKeyUp:C,tabIndex:0,role:"slider"}))}),ix=function(t){return t.filter(Boolean).join(" ")},vS=function(t){var n=t.color,a=t.left,o=t.top,c=o===void 0?.5:o,l=ix(["react-colorful__pointer",t.className]);return ve.createElement("div",{className:l,style:{top:100*c+"%",left:100*a+"%"}},ve.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:n}}))},dn=function(t,n,a){return n===void 0&&(n=0),a===void 0&&(a=Math.pow(10,n)),Math.round(a*t)/a},GA=function(t){return KA(Ih(t))},Ih=function(t){return t[0]==="#"&&(t=t.substring(1)),t.length<6?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?dn(parseInt(t[3]+t[3],16)/255,2):1}:{r:parseInt(t.substring(0,2),16),g:parseInt(t.substring(2,4),16),b:parseInt(t.substring(4,6),16),a:t.length===8?dn(parseInt(t.substring(6,8),16)/255,2):1}},VA=function(t){return qA(YA(t))},FA=function(t){var n=t.s,a=t.v,o=t.a,c=(200-n)*a/100;return{h:dn(t.h),s:dn(c>0&&c<200?n*a/100/(c<=100?c:200-c)*100:0),l:dn(c/2),a:dn(o,2)}},Uh=function(t){var n=FA(t);return"hsl("+n.h+", "+n.s+"%, "+n.l+"%)"},YA=function(t){var n=t.h,a=t.s,o=t.v,c=t.a;n=n/360*6,a/=100,o/=100;var l=Math.floor(n),d=o*(1-a),m=o*(1-(n-l)*a),p=o*(1-(1-n+l)*a),g=l%6;return{r:dn(255*[o,m,d,d,p,o][g]),g:dn(255*[p,o,o,m,d,d][g]),b:dn(255*[d,d,p,o,o,m][g]),a:dn(c,2)}},Iu=function(t){var n=t.toString(16);return n.length<2?"0"+n:n},qA=function(t){var n=t.r,a=t.g,o=t.b,c=t.a,l=c<1?Iu(dn(255*c)):"";return"#"+Iu(n)+Iu(a)+Iu(o)+l},KA=function(t){var n=t.r,a=t.g,o=t.b,c=t.a,l=Math.max(n,a,o),d=l-Math.min(n,a,o),m=d?l===n?(a-o)/d:l===a?2+(o-n)/d:4+(n-a)/d:0;return{h:dn(60*(m<0?m+6:m)),s:dn(l?d/l*100:0),v:dn(l/255*100),a:c}},WA=ve.memo(function(t){var n=t.hue,a=t.onChange,o=t.onChangeEnd,c=ix(["react-colorful__hue",t.className]);return ve.createElement("div",{className:c},ve.createElement(bS,{onMove:function(l){a({h:360*l.left})},onKey:function(l){a({h:Wl(n+360*l.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":dn(n),"aria-valuemax":"360","aria-valuemin":"0"},ve.createElement(vS,{className:"react-colorful__hue-pointer",left:n/360,color:Uh({h:n,s:100,v:100,a:1})})))}),XA=ve.memo(function(t){var n=t.hsva,a=t.onChange,o=t.onChangeEnd,c={backgroundColor:Uh({h:n.h,s:100,v:100,a:1})};return ve.createElement("div",{className:"react-colorful__saturation",style:c},ve.createElement(bS,{onMove:function(l){a({s:100*l.left,v:100-100*l.top})},onKey:function(l){a({s:Wl(n.s+100*l.left,0,100),v:Wl(n.v-100*l.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+dn(n.s)+"%, Brightness "+dn(n.v)+"%"},ve.createElement(vS,{className:"react-colorful__saturation-pointer",top:1-n.v/100,left:n.s/100,color:Uh(n)})))}),yS=function(t,n){if(t===n)return!0;for(var a in t)if(t[a]!==n[a])return!1;return!0},ZA=function(t,n){return t.toLowerCase()===n.toLowerCase()||yS(Ih(t),Ih(n))};function QA(t,n,a,o){var c=Dl(a),l=Dl(o),d=f.useState(function(){return t.toHsva(n)}),m=d[0],p=d[1],g=f.useRef({color:n,hsva:m}),b=f.useRef(!1);f.useEffect(function(){if(!t.equal(n,g.current.color)){var y=t.toHsva(n);g.current={hsva:y,color:n},p(y),b.current=!1}},[n,t]),f.useEffect(function(){var y;yS(m,g.current.hsva)||t.equal(y=t.fromHsva(m),g.current.color)||(g.current={hsva:m,color:y},c(y),b.current=!0)},[m,t,c]);var v=f.useCallback(function(y){p(function(C){return Object.assign({},C,y)})},[]),w=f.useCallback(function(){b.current&&(b.current=!1,l(g.current.color))},[l]);return[m,v,w]}var JA=typeof window<"u"?f.useLayoutEffect:f.useEffect,e_=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},A0=new WeakMap,t_=function(t){JA(function(){var n=t.current;if(typeof document<"u"&&n){var a=n.getRootNode?n.getRootNode():n.ownerDocument,o=a&&("head"in a||"host"in a)?a:n.ownerDocument;if(!A0.has(o)){var c="head"in o?o.head:o,l=(c.ownerDocument||document).createElement("style");l.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`;var d=e_();d&&l.setAttribute("nonce",d),A0.set(o,l),c.appendChild(l)}}},[])},n_=function(t){var n=t.className,a=t.colorModel,o=t.color,c=o===void 0?a.defaultColor:o,l=t.onChange,d=t.onChangeEnd,m=xS(t,["className","colorModel","color","onChange","onChangeEnd"]),p=f.useRef(null);t_(p);var g=QA(a,c,l,d),b=g[0],v=g[1],w=g[2],y=ix(["react-colorful",n]);return ve.createElement("div",ef({},m,{ref:p,className:y}),ve.createElement(XA,{hsva:b,onChange:v,onChangeEnd:w}),ve.createElement(WA,{hue:b.h,onChange:v,onChangeEnd:w,className:"react-colorful__last-control"}))},r_={defaultColor:"000",toHsva:GA,fromHsva:function(t){return VA({h:t.h,s:t.s,v:t.v,a:1})},equal:ZA},a_=function(t){return ve.createElement(n_,ef({},t,{colorModel:r_}))};function $r(t,n="#000000"){let a=String(t??"").trim();if(!a)return n;a.startsWith("#")||(a=`#${a}`);const o=a.slice(1);return/^[0-9a-fA-F]{3}$/.test(o)?`#${o.split("").map(c=>c+c).join("").toLowerCase()}`:/^[0-9a-fA-F]{6}$/.test(o)?`#${o.toLowerCase()}`:n}function Bh(t){const n=String(t??"").trim();return/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(n)||/^[0-9a-fA-F]{6}$/.test(n)}function s_(t){const n=f.useRef(null);return f.useEffect(()=>{t&&(typeof t=="function"?t(n.current):t.current=n.current)}),n}var o_=Object.defineProperty,Ns=(t,n)=>o_(t,"name",{value:n,configurable:!0}),lx="Popover",[wS,qP]=bn(lx,[Cs]),cx=Cs(),[i_,Ti]=wS(lx),l_=Ns(t=>{const{__scopePopover:n,children:a,open:o,defaultOpen:c,onOpenChange:l,modal:d=!1}=t,m=cx(n),p=f.useRef(null),[g,b]=f.useState(!1),[v,w]=Vr({prop:o,defaultProp:c??!1,onChange:l,caller:lx});return s.jsx(zd,{...m,children:s.jsx(i_,{scope:n,contentId:nn(),triggerRef:p,open:v,onOpenChange:w,onOpenToggle:f.useCallback(()=>w(y=>!y),[w]),hasCustomAnchor:g,onCustomAnchorAdd:f.useCallback(()=>b(!0),[]),onCustomAnchorRemove:f.useCallback(()=>b(!1),[]),modal:d,children:a})})},"Popover"),c_="PopoverTrigger",u_=f.forwardRef(Ns(function(n,a){const{__scopePopover:o,...c}=n,l=Ti(c_,o),d=cx(o),m=Pe(a,l.triggerRef),p=s.jsx(Me.button,{type:"button","aria-haspopup":"dialog","aria-expanded":l.open,"aria-controls":l.open?l.contentId:void 0,"data-state":ux(l.open),...c,ref:m,onClick:Ce(n.onClick,l.onOpenToggle)});return l.hasCustomAnchor?p:s.jsx(Pd,{asChild:!0,...d,children:p})},"PopoverTrigger")),jS="PopoverPortal",[d_,f_]=wS(jS,{forceMount:void 0}),m_=Ns(t=>{const{__scopePopover:n,forceMount:a,children:o,container:c}=t,l=Ti(jS,n);return s.jsx(d_,{scope:n,forceMount:a,children:s.jsx(fn,{present:a||l.open,children:s.jsx(rc,{asChild:!0,container:c,children:o})})})},"PopoverPortal"),Xl="PopoverContent",p_=f.forwardRef(Ns(function(n,a){const o=f_(Xl,n.__scopePopover),{forceMount:c=o.forceMount,...l}=n,d=Ti(Xl,n.__scopePopover);return s.jsx(fn,{present:c||d.open,children:d.modal?s.jsx(g_,{...l,ref:a}):s.jsx(x_,{...l,ref:a})})},"PopoverContent")),h_=Er("PopoverContent.RemoveScroll"),g_=f.forwardRef(Ns(function(n,a){const o=Ti(Xl,n.__scopePopover),c=f.useRef(null),l=Pe(a,c),d=f.useRef(!1);return f.useEffect(()=>{const m=c.current;if(m)return $d(m)},[]),s.jsx(ac,{as:h_,allowPinchZoom:!0,children:s.jsx(CS,{...n,ref:l,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Ce(n.onCloseAutoFocus,m=>{var p;m.preventDefault(),d.current||(p=o.triggerRef.current)==null||p.focus()}),onPointerDownOutside:Ce(n.onPointerDownOutside,m=>{const p=m.detail.originalEvent,g=p.button===0&&p.ctrlKey===!0,b=p.button===2||g;d.current=b},{checkForDefaultPrevented:!1}),onFocusOutside:Ce(n.onFocusOutside,m=>m.preventDefault(),{checkForDefaultPrevented:!1})})})},"PopoverContentModal")),x_=f.forwardRef(Ns(function(n,a){const o=Ti(Xl,n.__scopePopover),c=f.useRef(!1),l=f.useRef(!1);return s.jsx(CS,{...n,ref:a,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:d=>{var m,p;(m=n.onCloseAutoFocus)==null||m.call(n,d),d.defaultPrevented||(c.current||(p=o.triggerRef.current)==null||p.focus(),d.preventDefault()),c.current=!1,l.current=!1},onInteractOutside:d=>{var g,b;(g=n.onInteractOutside)==null||g.call(n,d),d.defaultPrevented||(c.current=!0,d.detail.originalEvent.type==="pointerdown"&&(l.current=!0));const m=d.target;((b=o.triggerRef.current)==null?void 0:b.contains(m))&&d.preventDefault(),d.detail.originalEvent.type==="focusin"&&l.current&&d.preventDefault()}})},"PopoverContentNonModal")),CS=f.forwardRef(Ns(function(n,a){const{__scopePopover:o,trapFocus:c,onOpenAutoFocus:l,onCloseAutoFocus:d,disableOutsidePointerEvents:m,onEscapeKeyDown:p,onPointerDownOutside:g,onFocusOutside:b,onInteractOutside:v,...w}=n,y=Ti(Xl,o),C=cx(o);return Ni(),s.jsx(Md,{asChild:!0,loop:!0,trapped:c,onMountAutoFocus:l,onUnmountAutoFocus:d,children:s.jsx(nc,{asChild:!0,disableOutsidePointerEvents:m,onInteractOutside:v,onEscapeKeyDown:p,onPointerDownOutside:g,onFocusOutside:b,onDismiss:()=>y.onOpenChange(!1),deferPointerDownOutside:!0,children:s.jsx(Id,{"data-state":ux(y.open),role:"dialog",id:y.contentId,...C,...w,ref:a,style:{...w.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})},"PopoverContentImpl"));function ux(t){return t?"open":"closed"}Ns(ux,"getState");var b_=l_,v_=u_,y_=m_,SS=p_;const NS=b_,ES=v_,dx=f.forwardRef(({className:t,align:n="center",sideOffset:a=4,...o},c)=>s.jsx(y_,{children:s.jsx(SS,{ref:c,align:n,sideOffset:a,className:pe("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",t),...o})}));dx.displayName=SS.displayName;const tf=f.forwardRef(({disabled:t,value:n,onChange:a,onBlur:o,name:c,className:l,size:d,...m},p)=>{const g=s_(p),[b,v]=f.useState(!1),[w,y]=f.useState(""),C=f.useMemo(()=>$r(n,"#ffffff"),[n]),S=b&&w?w:C;function N(E){Bh(E)&&a($r(E)),y("")}return s.jsxs(NS,{open:b,onOpenChange:E=>{E||N(w||C),v(E)},children:[s.jsx(ES,{asChild:!0,disabled:t,onBlur:o,children:s.jsx(ue,{...m,type:"button",className:pe("size-10 shrink-0 overflow-hidden rounded-md border border-border p-0 shadow-sm",l),name:c,onClick:()=>v(!0),size:d??"icon",style:{backgroundColor:C},variant:"outline","aria-label":"Pick colour",children:s.jsx("span",{className:"sr-only",children:C})})}),s.jsxs(dx,{className:"w-auto border-border bg-card p-3",align:"start",children:[s.jsx(a_,{className:"color-picker-swatch",color:C,onChange:E=>{y(""),a($r(E))}}),s.jsx(_e,{ref:g,maxLength:7,value:S,onChange:E=>{const T=E.currentTarget.value;y(T),Bh(T)&&a($r(T))},onBlur:()=>N(w||C),onKeyDown:E=>{E.key==="Enter"&&(N(w||C),v(!1))},className:"mt-3 border-border bg-secondary/30 font-mono text-sm uppercase",placeholder:"#000000"})]})]})});tf.displayName="ColorPicker";function w_({value:t,onChange:n,placeholder:a="Add item…"}){const o=Array.isArray(t)?t:[];return s.jsxs("div",{className:"space-y-2",children:[o.map((c,l)=>s.jsxs("div",{className:"flex gap-2",children:[s.jsx(_e,{value:c,onChange:d=>{const m=[...o];m[l]=d.target.value,n(m)},placeholder:a,className:"border-border bg-secondary/30"}),s.jsx(ue,{type:"button",variant:"ghost",size:"icon",className:"shrink-0 text-destructive hover:bg-destructive/10",onClick:()=>n(o.filter((d,m)=>m!==l)),children:s.jsx(xe,{icon:bi,size:16})})]},l)),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",className:"w-full border-dashed border-border",onClick:()=>n([...o,""]),children:[s.jsx(xe,{icon:nh,size:16,className:"mr-2"}),"Add line"]})]})}const Zl="system",fx=[{id:"Inter",label:"Inter"},{id:"Roboto",label:"Roboto"},{id:"Open Sans",label:"Open Sans"},{id:"Lato",label:"Lato"},{id:"Montserrat",label:"Montserrat"},{id:"Poppins",label:"Poppins"},{id:"Nunito",label:"Nunito"},{id:"Raleway",label:"Raleway"},{id:"Work Sans",label:"Work Sans"},{id:"Source Sans 3",label:"Source Sans 3"},{id:"DM Sans",label:"DM Sans"},{id:"Manrope",label:"Manrope"},{id:"Outfit",label:"Outfit"},{id:"Rubik",label:"Rubik"},{id:"Ubuntu",label:"Ubuntu"},{id:"Fira Sans",label:"Fira Sans"},{id:"PT Sans",label:"PT Sans"},{id:"Noto Sans",label:"Noto Sans"},{id:"Oswald",label:"Oswald"},{id:"Merriweather",label:"Merriweather"},{id:"Playfair Display",label:"Playfair Display"},{id:"Libre Baskerville",label:"Libre Baskerville"},{id:"JetBrains Mono",label:"JetBrains Mono"},{id:"Fira Code",label:"Fira Code"}],_0=new Set(fx.map(t=>t.id));function j_(t){return`https://fonts.googleapis.com/css2?${t.map(a=>`family=${encodeURIComponent(a).replace(/%20/g,"+")}:wght@400;600;700;800`).join("&")}&display=swap`}function C_(){const t="supportbot-google-fonts";if(document.getElementById(t))return;const n=document.createElement("link");n.id=t,n.rel="stylesheet",n.href=j_(fx.map(a=>a.id)),document.head.appendChild(n)}function kS(t){var c;if(!t||typeof t!="string")return"Inter";const n=t.trim();if(n===Zl)return Zl;if(!n.includes(","))return _0.has(n)?n:"Inter";const a=n.match(/^["']?([^"',]+)["']?/),o=(c=a==null?void 0:a[1])==null?void 0:c.trim();return o&&_0.has(o)?o:"Inter"}function Bp(t){return t===Zl?'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif':`"${t}", ui-sans-serif, system-ui, sans-serif`}function S_({field:t,value:n,onChange:a,readOnly:o}){const c=t.path.replace(/\./g,"-"),l=kS(n);return f.useEffect(()=>{C_()},[]),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsxs(Ca,{value:l,disabled:o,onValueChange:a,children:[s.jsx(Hr,{id:c,className:"border-border bg-secondary/30",style:{fontFamily:Bp(l)},children:s.jsx(Sa,{placeholder:"Choose a font…"})}),s.jsxs(Gr,{className:"max-h-[min(320px,50vh)]",children:[s.jsx(Et,{value:Zl,style:{fontFamily:Bp(Zl)},children:"System default"}),fx.map(d=>s.jsx(Et,{value:d.id,style:{fontFamily:Bp(d.id)},children:d.label},d.id))]})]})]})}function TS({id:t,label:n,description:a,kind:o,value:c,onChange:l,readOnly:d}){const[m,p]=f.useState(null),[g,b]=f.useState(""),[v,w]=f.useState(!0),[y,C]=f.useState(!1),[S,N]=f.useState("");f.useEffect(()=>{let _=!1;return w(!0),Ne.getGuildResources().then(R=>{_||R.data&&(p(R.data),b(""))}).catch(R=>{_||b(R instanceof Error?R.message:"Could not load server list")}).finally(()=>{_||w(!1)}),()=>{_=!0}},[]);const E=f.useMemo(()=>m?o==="role"?m.roles:o==="category"?m.categories:m.channels:[],[m,o]),T=String(c??""),M=E.find(_=>_.id===T),k=f.useMemo(()=>{if(!S.trim())return E;const _=S.toLowerCase().trim();return E.filter(R=>R.name.toLowerCase().includes(_)||R.id.includes(_))},[E,S]);return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:t,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,m?s.jsxs(NS,{open:y,onOpenChange:C,children:[s.jsx(ES,{asChild:!0,children:s.jsxs(ue,{id:t,type:"button",variant:"outline",role:"combobox","aria-expanded":y,disabled:d||v,className:"w-full justify-between border-border bg-secondary/30 text-left font-normal h-10 px-3 hover:bg-secondary/50",children:[s.jsx("span",{className:"truncate",children:M?s.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[s.jsx("span",{className:"font-medium text-foreground truncate",children:M.name}),s.jsx("span",{className:"font-mono text-[11px] text-muted-foreground shrink-0",children:M.id})]}):s.jsx("span",{className:"text-muted-foreground",children:v?"Loading server list…":`Select ${o} from ${m.guildName}…`})}),s.jsx(xe,{icon:O8,size:16,className:"shrink-0 opacity-50 ml-2"})]})}),s.jsxs(dx,{className:"w-[var(--radix-popover-trigger-width)] p-2 bg-popover border-border shadow-2xl rounded-xl flex flex-col gap-2 z-50",children:[s.jsxs("div",{className:"relative flex items-center",children:[s.jsx(xe,{icon:vi,size:14,className:"absolute left-2.5 text-muted-foreground"}),s.jsx(_e,{placeholder:`Search ${o}s by name or ID…`,value:S,onChange:_=>N(_.target.value),className:"h-8 pl-8 text-xs border-border bg-secondary/20 focus-visible:ring-1",autoFocus:!0})]}),s.jsx("div",{className:"overflow-y-auto max-h-56 space-y-1 pr-1",children:k.length===0?s.jsxs("div",{className:"p-3 text-center text-xs text-muted-foreground",children:["No ",o,'s found matching "',S,'"']}):k.map(_=>s.jsxs("button",{type:"button",onClick:()=>{l(_.id),C(!1),N("")},className:pe("w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg text-xs transition-colors text-left",_.id===T?"bg-primary/15 text-primary font-semibold border border-primary/20":"hover:bg-secondary/60 text-foreground"),children:[s.jsx("span",{className:"truncate mr-2 font-medium",children:_.name}),s.jsx("span",{className:"font-mono text-[11px] text-muted-foreground shrink-0",children:_.id})]},_.id))})]})]}):null,s.jsx(_e,{value:T,disabled:d,onChange:_=>l(_.target.value),placeholder:o==="role"?"Role ID (ROLE_ID)":o==="category"?"Category ID":"Channel ID",className:"border-border bg-secondary/30 font-mono text-xs"}),g?s.jsx("p",{className:"text-xs text-amber-500",children:g}):null,!g&&!m&&!v?s.jsx("p",{className:"text-xs text-muted-foreground",children:"Set General.GuildId and invite the bot to pick from a list."}):null]})}var N_=Object.defineProperty,Mi=(t,n)=>N_(t,"name",{value:n,configurable:!0}),mx="Tabs",[E_,KP]=bn(mx,[Bd]),MS=Bd(),[k_,px]=E_(mx),T_=f.forwardRef(Mi(function(n,a){const{__scopeTabs:o,value:c,onValueChange:l,defaultValue:d,orientation:m="horizontal",dir:p,activationMode:g="automatic",...b}=n,v=Si(p),[w,y]=Vr({prop:c,onChange:l,defaultProp:d??"",caller:mx});return s.jsx(k_,{scope:o,baseId:nn(),value:w,onValueChange:y,orientation:m,dir:v,activationMode:g,children:s.jsx(Me.div,{dir:v,"data-orientation":m,...b,ref:a})})},"Tabs")),M_="TabsList",R_=f.forwardRef(Mi(function(n,a){const{__scopeTabs:o,loop:c=!0,...l}=n,d=px(M_,o),m=MS(o);return s.jsx(Qw,{asChild:!0,...m,orientation:d.orientation,dir:d.dir,loop:c,children:s.jsx(Me.div,{role:"tablist","aria-orientation":d.orientation,...l,ref:a})})},"TabsList")),A_="TabsTrigger",__=f.forwardRef(Mi(function(n,a){const{__scopeTabs:o,value:c,disabled:l=!1,...d}=n,m=px(A_,o),p=MS(o),g=hx(m.baseId,c),b=gx(m.baseId,c),v=c===m.value;return s.jsx(Jw,{asChild:!0,...p,focusable:!l,active:v,children:s.jsx(Me.button,{type:"button",role:"tab","aria-selected":v,"aria-controls":b,"data-state":v?"active":"inactive","data-disabled":l?"":void 0,disabled:l,id:g,...d,ref:a,onMouseDown:Ce(n.onMouseDown,w=>{!l&&w.button===0&&w.ctrlKey===!1?m.onValueChange(c):w.preventDefault()}),onKeyDown:Ce(n.onKeyDown,w=>{l||w.target!==w.currentTarget||[" ","Enter"].includes(w.key)&&m.onValueChange(c)}),onFocus:Ce(n.onFocus,()=>{const w=m.activationMode!=="manual";!v&&!l&&w&&m.onValueChange(c)})})})},"TabsTrigger")),D_="TabsContent",O_=f.forwardRef(Mi(function(n,a){const{__scopeTabs:o,value:c,forceMount:l,children:d,...m}=n,p=px(D_,o),g=hx(p.baseId,c),b=gx(p.baseId,c),v=c===p.value,w=f.useRef(v);return f.useEffect(()=>{const y=requestAnimationFrame(()=>w.current=!1);return()=>cancelAnimationFrame(y)},[]),s.jsx(fn,{present:l||v,children:({present:y})=>s.jsx(Me.div,{"data-state":v?"active":"inactive","data-orientation":p.orientation,role:"tabpanel","aria-labelledby":g,hidden:!y,id:b,tabIndex:0,...m,ref:a,style:{...n.style,animationDuration:w.current?"0s":void 0},children:y&&d})})},"TabsContent"));function hx(t,n){return`${t}-trigger-${n}`}Mi(hx,"makeTriggerId");function gx(t,n){return`${t}-content-${n}`}Mi(gx,"makeContentId");var L_=T_,RS=R_,AS=__,_S=O_;const DS=L_,xx=f.forwardRef(({className:t,...n},a)=>s.jsx(RS,{ref:a,className:pe("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",t),...n}));xx.displayName=RS.displayName;const Ys=f.forwardRef(({className:t,...n},a)=>s.jsx(AS,{ref:a,className:pe("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",t),...n}));Ys.displayName=AS.displayName;const $h=f.forwardRef(({className:t,...n},a)=>s.jsx(_S,{ref:a,className:pe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...n}));$h.displayName=_S.displayName;function Uu(t){if(typeof t!="string"||!t)throw new Error("expected a non-empty string, got: "+t)}function $p(t){if(typeof t!="number")throw new Error("expected a number, got: "+t)}const z_=1,P_=1,fo="emoji",mi="keyvalue",bx="favorites",I_="tokens",OS="tokens",U_="unicode",LS="count",B_="group",$_="order",zS="group-order",Hh="eTag",dd="url",D0="skinTone",Ri="readonly",vx="readwrite",PS="skinUnicodes",H_="skinUnicodes",G_="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",V_="en";function F_(t,n){const a=new Set,o=[];for(const c of t){const l=n(c);a.has(l)||(a.add(l),o.push(c))}return o}function O0(t){return F_(t,n=>n.unicode)}function Y_(t){function n(a,o,c){const l=o?t.createObjectStore(a,{keyPath:o}):t.createObjectStore(a);if(c)for(const[d,[m,p]]of Object.entries(c))l.createIndex(d,m,{multiEntry:p});return l}n(mi),n(fo,U_,{[OS]:[I_,!0],[zS]:[[B_,$_]],[PS]:[H_,!0]}),n(bx,void 0,{[LS]:[""]})}const Gh={},Ju={},fd={};function IS(t,n,a){a.onerror=()=>n(a.error),a.onblocked=()=>n(new Error("IDB blocked")),a.onsuccess=()=>t(a.result)}async function q_(t){const n=await new Promise((a,o)=>{const c=indexedDB.open(t,z_);Gh[t]=c,c.onupgradeneeded=l=>{l.oldVersionyx(t),n}function K_(t){return Ju[t]||(Ju[t]=q_(t)),Ju[t]}function _a(t,n,a,o){return new Promise((c,l)=>{const d=t.transaction(n,a,{durability:"relaxed"}),m=typeof n=="string"?d.objectStore(n):n.map(g=>d.objectStore(g));let p;o(m,d,g=>{p=g}),d.oncomplete=()=>c(p),d.onerror=()=>l(d.error)})}function yx(t){const n=Gh[t],a=n&&n.result;if(a){a.close();const o=fd[t];if(o)for(const c of o)c()}delete Gh[t],delete Ju[t],delete fd[t]}function W_(t){return new Promise((n,a)=>{yx(t);const o=indexedDB.deleteDatabase(t);IS(n,a,o)})}function X_(t,n){let a=fd[t];a||(a=fd[t]=[]),a.push(n)}const Z_=new Set([":D","XD",":'D","O:)",":X",":P",";P","XP",":L",":Z",":j","8D","XO","8)",":B",":O",":S",":'o","Dx","X(","D:",":C",">0)",":3","!n.match(/\w/)||Z_.has(n)?n.toLowerCase():n.replace(/[)(:,]/g,"").replace(/’/g,"'").toLowerCase()).filter(Boolean)}const Q_=2;function US(t){return t.filter(Boolean).map(n=>n.toLowerCase()).filter(n=>n.length>=Q_)}function J_(t){return t.map(({annotation:a,emoticon:o,group:c,order:l,shortcodes:d,skins:m,tags:p,emoji:g,version:b})=>{const v=[...new Set(US([...(d||[]).map(ci).flat(),...(p||[]).map(ci).flat(),...ci(a),o]))].sort(),w={annotation:a,group:c,order:l,tags:p,tokens:v,unicode:g,version:b};if(o&&(w.emoticon=o),d&&(w.shortcodes=d),m){w.skinTones=[],w.skinUnicodes=[],w.skinVersions=[];for(const{tone:y,emoji:C,version:S}of m)w.skinTones.push(y),w.skinUnicodes.push(C),w.skinVersions.push(S)}return w})}function BS(t,n,a,o){t[n](a).onsuccess=c=>o&&o(c.target.result)}function ro(t,n,a){BS(t,"get",n,a)}function $S(t,n,a){BS(t,"getAll",n,a)}function wx(t){t.commit&&t.commit()}function eD(t,n){let a=t[0];for(let o=1;on(c)&&(a=c)}return a}function HS(t,n){const a=eD(t,c=>c.length),o=[];for(const c of a)t.some(l=>l.findIndex(d=>n(d)===n(c))===-1)||o.push(c);return o}async function tD(t){return!await jx(t,mi,dd)}async function nD(t,n,a){const[o,c]=await Promise.all([Hh,dd].map(l=>jx(t,mi,l)));return o===a&&c===n}async function rD(t,n){return _a(t,fo,Ri,(o,c,l)=>{let d;const m=()=>{o.getAll(d&&IDBKeyRange.lowerBound(d,!0),50).onsuccess=p=>{const g=p.target.result;for(const b of g)if(d=b.unicode,n(b))return l(b);if(g.length<50)return l();m()}};m()})}async function GS(t,n,a,o){try{const c=J_(n);await _a(t,[fo,mi],vx,([l,d],m)=>{let p,g,b=0;function v(){++b===2&&w()}function w(){if(!(p===o&&g===a)){l.clear();for(const y of c)l.put(y);d.put(o,Hh),d.put(a,dd),wx(m)}}ro(d,Hh,y=>{p=y,v()}),ro(d,dd,y=>{g=y,v()})})}finally{}}async function aD(t,n){return _a(t,fo,Ri,(a,o,c)=>{const l=IDBKeyRange.bound([n,0],[n+1,0],!1,!0);$S(a.index(zS),l,c)})}async function VS(t,n){const a=US(ci(n));return a.length?_a(t,fo,Ri,(o,c,l)=>{const d=[],m=()=>{d.length===a.length&&p()},p=()=>{const g=HS(d,b=>b.unicode);l(g.sort((b,v)=>b.order{d.push(w),m()})}}):[]}async function sD(t,n){const a=await VS(t,n);return a.length?a.filter(o=>(o.shortcodes||[]).map(l=>l.toLowerCase()).includes(n.toLowerCase()))[0]||null:await rD(t,c=>(c.shortcodes||[]).includes(n.toLowerCase()))||null}async function oD(t,n){return _a(t,fo,Ri,(a,o,c)=>ro(a,n,l=>{if(l)return c(l);ro(a.index(PS),n,d=>c(d||null))}))}function jx(t,n,a){return _a(t,n,Ri,(o,c,l)=>ro(o,a,l))}function iD(t,n,a,o){return _a(t,n,vx,(c,l)=>{c.put(o,a),wx(l)})}function lD(t,n){return _a(t,bx,vx,(a,o)=>ro(a,n,c=>{a.put((c||0)+1,n),wx(o)}))}function cD(t,n,a){return a===0?[]:_a(t,[bx,fo],Ri,([o,c],l,d)=>{const m=[];o.index(LS).openCursor(void 0,"prev").onsuccess=p=>{const g=p.target.result;if(!g)return d(m);function b(y){if(m.push(y),m.length===a)return d(m);g.continue()}const v=g.primaryKey,w=n.byName(v);if(w)return b(w);ro(c,v,y=>{if(y)return b(y);g.continue()})}})}const Bu="";function uD(t,n){const a=new Map;for(const c of t){const l=n(c);for(const d of l){let m=a;for(let g=0;g{let d=a;for(let g=0;gv[0]!(o in t[0])));if(!n||a)throw new Error("Custom emojis are in the wrong format")}function L0(t){fD(t);const n=(w,y)=>w.name.toLowerCase(){const y=new Set;if(w.shortcodes)for(const C of w.shortcodes)for(const S of ci(C))y.add(S);return y}),l=w=>c(w,!0),d=w=>c(w,!1),m=w=>{const y=ci(w),C=y.map((S,N)=>(NS.name).sort(n)},p=new Map,g=new Map;for(const w of t){g.set(w.name.toLowerCase(),w);for(const y of w.shortcodes||[])p.set(y.toLowerCase(),w)}return{all:a,search:m,byShortcode:w=>p.get(w.toLowerCase()),byName:w=>g.get(w.toLowerCase())}}const mD=typeof wrappedJSObject<"u";function Rl(t){if(!t)return t;if(mD&&(t=structuredClone(t)),delete t.tokens,t.skinTones){const n=t.skinTones.length;t.skins=Array(n);for(let a=0;a!(n in t[0])))throw new Error("Emoji data is in the wrong format")}function YS(t,n){if(Math.floor(t.status/100)!==2)throw new Error("Failed to fetch: "+n+": "+t.status)}async function gD(t){const n=await fetch(t,{method:"HEAD"});YS(n,t);const a=n.headers.get("etag");return FS(a),a}async function Vh(t){const n=await fetch(t);YS(n,t);const a=n.headers.get("etag");FS(a);const o=await n.json();return hD(o),[a,o]}function xD(t){for(var n="",a=new Uint8Array(t),o=a.byteLength,c=-1;++c(this._ready||(this._ready=this._init()),this._ready);await n(),this._db||await n()}async getEmojiByGroup(n){return $p(n),await this.ready(),O0(await aD(this._db,n)).map(Rl)}async getEmojiBySearchQuery(n){Uu(n),await this.ready();const a=this._custom.search(n),o=O0(await VS(this._db,n)).map(Rl);return[...a,...o]}async getEmojiByShortcode(n){Uu(n),await this.ready();const a=this._custom.byShortcode(n);return a||Rl(await sD(this._db,n))}async getEmojiByUnicodeOrName(n){Uu(n),await this.ready();const a=this._custom.byName(n);return a||Rl(await oD(this._db,n))}async getPreferredSkinTone(){return await this.ready(),await jx(this._db,mi,D0)||0}async setPreferredSkinTone(n){return $p(n),await this.ready(),iD(this._db,mi,D0,n)}async incrementFavoriteEmojiCount(n){return Uu(n),await this.ready(),lD(this._db,n)}async getTopFavoriteEmoji(n){return $p(n),await this.ready(),(await cD(this._db,this._custom,n)).map(Rl)}set customEmoji(n){this._custom=L0(n)}get customEmoji(){return this._custom.all}async _shutdown(){await this.ready();try{await this._lazyUpdate}catch{}}_clear(){this._db=this._ready=this._lazyUpdate=void 0}async close(){await this._shutdown(),await yx(this._dbName)}async delete(){await this._shutdown(),await W_(this._dbName)}}const Fh=[[-1,"✨","custom"],[0,"😀","smileys-emotion"],[1,"👋","people-body"],[3,"🐱","animals-nature"],[4,"🍎","food-drink"],[5,"🏠️","travel-places"],[6,"⚽","activities"],[7,"📝","objects"],[8,"⛔️","symbols"],[9,"🏁","flags"]].map(([t,n,a])=>({id:t,emoji:n,name:a})),Hp=Fh.slice(1),CD=2,z0=6,KS=typeof requestIdleCallback=="function"?requestIdleCallback:setTimeout;function P0(t){return t.unicode.includes("‍")}const SD={"🫪":17,"🫩":16,"🫨":15.1,"🫠":14,"🥲":13.1,"🥻":12.1,"🥰":11,"🤩":5,"👱‍♀️":4,"🤣":3,"👁️‍🗨️":2,"😀":1,"😐️":.7,"😃":.6},ND=1e3,ED="🖐️",kD=8,TD=["😊","😒","❤️","👍️","😍","😂","😭","☺️","😔","😩","😏","💕","🙌","😘"],WS='"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif',MD=(t,n)=>tn?1:0,I0=(t,n)=>{const a=document.createElement("canvas");a.width=a.height=1;const o=a.getContext("2d",{willReadFrequently:!0});return o.textBaseline="top",o.font=`100px ${WS}`,o.fillStyle=n,o.scale(.01,.01),o.fillText(t,0,0),o.getImageData(0,0,1,1).data},RD=(t,n)=>{const a=[...t].join(","),o=[...n].join(",");return a===o&&!a.startsWith("0,0,0,")};function AD(t){const n=I0(t,"#000"),a=I0(t,"#fff");return n&&a&&RD(n,a)}function _D(){const t=Object.entries(SD);try{for(const[n,a]of t)if(AD(n))return a}catch{}finally{}return t[0][1]}let Gp;const Vp=()=>(Gp||(Gp=new Promise(t=>KS(()=>t(_D())))),Gp),Yh=new Map,DD="️",OD="\uD83C",LD="‍",zD=127995,PD=57339;function ID(t,n){if(n===0)return t;const a=t.indexOf(LD);return a!==-1?t.substring(0,a)+String.fromCodePoint(zD+n-1)+t.substring(a):(t.endsWith(DD)&&(t=t.substring(0,t.length-1)),t+OD+String.fromCodePoint(PD+n-1))}function Ir(t){t.preventDefault(),t.stopPropagation()}function Fp(t,n,a){return n+=t?-1:1,n<0?n=a.length-1:n>=a.length&&(n=0),n}function XS(t,n){const a=new Set,o=[];for(const c of t){const l=n(c);a.has(l)||(a.add(l),o.push(c))}return o}function UD(t,n){const a=o=>{const c={};for(const l of o)typeof l.tone=="number"&&l.version<=n&&(c[l.tone]=l.unicode);return c};return t.map(({unicode:o,skins:c,shortcodes:l,url:d,name:m,category:p,annotation:g})=>({unicode:o,name:m,shortcodes:l,url:d,category:p,annotation:g,id:o||m,skins:c&&a(c)}))}const ed=requestAnimationFrame;let BD=typeof ResizeObserver=="function";function $D(t,n,a){let o;BD?(o=new ResizeObserver(a),o.observe(t)):ed(a),n.addEventListener("abort",()=>{o&&o.disconnect()})}function U0(t){{const n=document.createRange();return n.selectNode(t.firstChild),n.getBoundingClientRect().width}}const HD="😀";let Yp,Fs;function B0(t,n,a){const o=U0(n);if(!o){if(!Fs){Fs=a.cloneNode(!0);const c=getComputedStyle(a);for(const l of["font-family","line-height","width","height","font-size","display","align-items","justify-content"])Fs.style.setProperty(l,c.getPropertyValue(l),"important")}try{return document.body.appendChild(Fs),Fs.firstChild.nodeValue=t,U0(Fs)}finally{Fs.remove()}}return o}function GD(t,n,a){let o=!0;for(const c of t){const l=a(c);if(!l)continue;typeof Yp>"u"&&(Yp=B0(HD,n,n));const m=B0(c.unicode,l,n)/1.8n)}function FD(t){t&&(t.scrollTop=0)}function Ll(t,n,a){let o=t.get(n);return o||(o=a(),t.set(n,o)),o}function $0(t){return""+t}function YD(t){const n=document.createElement("template");return n.innerHTML=t,n}const qD=new WeakMap,KD=new WeakMap,WD=Symbol("un-keyed"),XD="replaceChildren"in Element.prototype;function ZD(t,n){XD?t.replaceChildren(...n):(t.innerHTML="",t.append(...n))}function QD(t,n){let a=t.firstChild,o=0;for(;a;){if(n[o]!==a)return!0;a=a.nextSibling,o++}return o!==n.length}function JD(t,n){const{targetNode:a}=n;let{targetParentNode:o}=n,c=!1;o?c=QD(o,t):(c=!0,n.targetNode=void 0,n.targetParentNode=o=a.parentNode),c&&ZD(o,t)}function eO(t,n){for(const a of n){const{targetNode:o,currentExpression:c,binding:{expressionIndex:l,attributeName:d,attributeValuePre:m,attributeValuePost:p}}=a,g=t[l];if(c!==g)if(a.currentExpression=g,d)if(g===null)o.removeAttribute(d);else{const b=m+$0(g)+p;o.setAttribute(d,b)}else{let b;Array.isArray(g)?JD(g,a):g instanceof Element?(b=g,o.replaceWith(b)):o.nodeValue=$0(g),b&&(a.targetNode=b)}}}function tO(t){let n="",a=!1,o=!1,c=-1;const l=new Map,d=[];let m=0;for(let g=0,b=t.length;g":{a=!1,o=!1;break}case"=":{o=!0;break}}const w=d[d.length-1],y=Ll(l,w,()=>[]);let C,S,N;if(o){const T=/(\S+)="?([^"=]*)$/.exec(v);C=T[1],S=T[2];const M=/^([^">]*)("?)/.exec(t[g+1]);N=M[1],n=n.slice(0,-1*T[0].length),m=M[0].length}else m=0;const E={attributeName:C,attributeValuePre:S,attributeValuePost:N,expressionIndex:g};y.push(E),!a&&!o&&(n+=" ")}return{template:YD(n),elementsToBindings:l}}function H0(t,n,a){for(let o=0;otO(t)),o=n.cloneNode(!0).content.firstElementChild,c=nO(o,a);return function(d){return eO(d,c),o}}function aO(t){const n=Ll(KD,t,()=>new Map);let a=WD;function o(l,...d){const m=Ll(n,l,()=>new Map);return Ll(m,a,()=>rO(l))(d)}function c(l,d,m){return l.map((p,g)=>{const b=a;a=m(p);try{return d(p,g)}finally{a=b}})}return{map:c,html:o}}function sO(t,n,a,o,c,l,d,m,p){const{labelWithSkin:g,titleForEmoji:b,unicodeWithSkin:v}=a,{html:w,map:y}=aO(n);function C(T,M,k){return y(T,(_,R)=>w``,_=>`${k}-${_.id}`)}const N=w`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${y(n.skinTones,(T,M)=>w`
${T}
`,T=>T)}
${y(n.currentEmojisWithCategories,(T,M)=>w`
${C(T.emojis,n.searchMode,"emo")}
`,T=>T.category)}
`,E=(T,M)=>{for(const k of t.querySelectorAll(`[${T}]`))M(k,k.getAttribute(T))};if(p){t.appendChild(N);for(const T of["click","focusout","input","keydown","keyup"])E(`data-on-${T}`,(M,k)=>{M.addEventListener(T,o[k])});E("data-ref",(T,M)=>{l[M]=T}),d.addEventListener("abort",()=>{t.removeChild(N)})}E("data-action",(T,M)=>{let k=m.get(M);k||m.set(M,k=new WeakSet),k.has(T)||(k.add(T),c[M](T))})}const md=typeof queueMicrotask=="function"?queueMicrotask:t=>Promise.resolve().then(t);function oO(t){let n=!1,a;const o=new Map,c=new Set;let l;const d=()=>{if(n)return;const g=[...c];c.clear();try{for(const b of g)b()}finally{l=!1,c.size&&(l=!0,md(d))}},m=new Proxy({},{get(g,b){if(a){let v=o.get(b);v||(v=new Set,o.set(b,v)),v.add(a)}return g[b]},set(g,b,v){if(g[b]!==v){g[b]=v;const w=o.get(b);if(w){for(const y of w)c.add(y);l||(l=!0,md(d))}}return!0}}),p=g=>{const b=()=>{const v=a;a=b;try{return g()}finally{a=v}};return b()};return t.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:p}}function qp(t,n,a){if(t.length!==n.length)return!1;for(let o=0;o{c.disconnect()})),c.observe(t)}}const Kp=[],{assign:$u}=Object;function lO(t,n){const a={},o=new AbortController,c=o.signal,{state:l,createEffect:d}=oO(c),m=new Map;$u(l,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),$u(l,n),$u(l,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:kD,isRtl:!1,currentGroupIndex:0,groups:Hp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{l.currentGroup!==l.groups[l.currentGroupIndex]&&(l.currentGroup=l.groups[l.currentGroupIndex])});const p=$=>{t.getElementById($).focus()},g=$=>t.getElementById(`emo-${$.id}`),b=($,ie)=>{a.rootElement.dispatchEvent(new CustomEvent($,{detail:ie,bubbles:!0,composed:!0}))},v=($,ie)=>$.id===ie.id,w=($,ie)=>{const{category:ye,emojis:Se}=$,{category:Be,emojis:Ke}=ie;return ye!==Be?!1:qp(Se,Ke,v)},y=$=>{qp(l.currentEmojis,$,v)||(l.currentEmojis=$)},C=$=>{l.searchMode!==$&&(l.searchMode=$)},S=$=>{qp(l.currentEmojisWithCategories,$,w)||(l.currentEmojisWithCategories=$)},N=($,ie)=>ie&&$.skins&&$.skins[ie]||$.unicode,M={labelWithSkin:($,ie)=>VD([$.name||N($,ie),$.annotation,...$.shortcodes||Kp].filter(Boolean)).join(", "),titleForEmoji:$=>$.annotation||($.shortcodes||Kp).join(", "),unicodeWithSkin:N},k={onClickSkinToneButton:Z,onEmojiClick:D,onNavClick:oe,onNavKeydown:ae,onSearchKeydown:W,onSkinToneOptionsClick:V,onSkinToneOptionsFocusOut:ge,onSkinToneOptionsKeydown:be,onSkinToneOptionsKeyup:K,onSearchInput:me},_={calculateEmojiGridStyle:ne,updateOnIntersection:X};let R=!0;d(()=>{sO(t,l,M,k,_,a,c,m,R),R=!1}),l.emojiVersion||Vp().then($=>{$||(l.message=l.i18n.emojiUnsupportedMessage)}),d(()=>{async function $(){let ie=!1;const ye=setTimeout(()=>{ie=!0,l.message=l.i18n.loadingMessage},ND);try{await l.database.ready(),l.databaseLoaded=!0}catch(Se){console.error(Se),l.message=l.i18n.networkErrorMessage}finally{clearTimeout(ye),ie&&(ie=!1,l.message="")}}l.database&&$()}),d(()=>{l.pickerStyle=` --num-groups: ${l.groups.length}; --indicator-opacity: ${l.searchMode?0:1}; - --num-skintones: ${z0};`}),d(()=>{l.customEmoji&&l.database&&L()}),d(()=>{l.customEmoji&&l.customEmoji.length?l.groups!==Fh&&(l.groups=Fh):l.groups!==Hp&&(l.currentGroupIndex&&l.currentGroupIndex--,l.groups=Hp)}),d(()=>{async function B(){l.databaseLoaded&&(l.currentSkinTone=await l.database.getPreferredSkinTone())}B()}),d(()=>{l.skinTones=Array(z0).fill().map((B,ie)=>ID(l.skinToneEmoji,ie))}),d(()=>{l.skinToneButtonText=l.skinTones[l.currentSkinTone]}),d(()=>{l.skinToneButtonLabel=l.i18n.skinToneLabel.replace("{skinTone}",l.i18n.skinTones[l.currentSkinTone])}),d(()=>{async function B(){const{database:ie}=l,we=(await Promise.all(TD.map(Ce=>ie.getEmojiByUnicodeOrName(Ce)))).filter(Boolean);l.defaultFavoriteEmojis=we}l.databaseLoaded&&B()});function L(){const{customEmoji:B,database:ie}=l,we=B||Kp;ie.customEmoji!==we&&(ie.customEmoji=we)}d(()=>{async function B(){L();const{database:ie,defaultFavoriteEmojis:we,numColumns:Ce}=l,ze=await ie.getTopFavoriteEmoji(Ce),Ke=await fe(XS([...ze,...we],ft=>ft.unicode||ft.name).slice(0,Ce));l.currentFavorites=Ke}l.databaseLoaded&&l.defaultFavoriteEmojis&&B()});function te(B){$D(B,c,()=>{{const ie=getComputedStyle(a.rootElement),we=parseInt(ie.getPropertyValue("--num-columns"),10),Ce=ie.getPropertyValue("direction")==="rtl";l.numColumns=we,l.isRtl=Ce}})}function K(B){iO(B,c,ie=>{for(const{target:we,isIntersecting:Ce}of ie)we.classList.toggle("onscreen",Ce)})}d(()=>{async function B(){const{searchText:ie,currentGroup:we,databaseLoaded:Ce,customEmoji:ze}=l;if(!Ce)l.currentEmojis=[],l.searchMode=!1;else if(ie.length>=CD){const Ke=await P(ie);l.searchText===ie&&(y(Ke),C(!0))}else{const{id:Ke}=we;if(Ke!==-1||ze&&ze.length){const ft=await se(Ke);l.currentGroup.id===Ke&&(y(ft),C(!1))}}}B()});const I=()=>{ed(()=>FD(a.tabpanelElement))};d(()=>{const{currentEmojis:B,emojiVersion:ie}=l,we=B.filter(Ce=>Ce.unicode).filter(Ce=>P0(Ce)&&!Yh.has(Ce.unicode));if(!ie&&we.length)y(B),ed(()=>G(we));else{const Ce=ie?B:B.filter(Y);y(Ce),I()}});function G(B){GD(B,a.baselineEmoji,g)?I():l.currentEmojis=[...l.currentEmojis]}function Y(B){return!B.unicode||!P0(B)||Yh.get(B.unicode)}async function ce(B){const ie=l.emojiVersion||await Vp();return B.filter(({version:we})=>!we||we<=ie)}async function fe(B){return UD(B,l.emojiVersion||await Vp())}async function se(B){const ie=B===-1?l.customEmoji:await l.database.getEmojiByGroup(B);return fe(await ce(ie))}async function P(B){return fe(await ce(await l.database.getEmojiBySearchQuery(B)))}d(()=>{}),d(()=>{function B(){const{searchMode:we,currentEmojis:Ce}=l;if(we)return[{category:"",emojis:Ce}];const ze=new Map;for(const Ke of Ce){const ft=Ke.category||"";let Pt=ze.get(ft);Pt||(Pt=[],ze.set(ft,Pt)),Pt.push(Ke)}return[...ze.entries()].map(([Ke,ft])=>({category:Ke,emojis:ft})).sort((Ke,ft)=>l.customCategorySorting(Ke.category,ft.category))}const ie=B();S(ie)}),d(()=>{l.activeSearchItemId=l.activeSearchItem!==-1&&l.currentEmojis[l.activeSearchItem].id}),d(()=>{const{rawSearchText:B}=l;KS(()=>{l.searchText=(B||"").trim(),l.activeSearchItem=-1})});function Z(B){if(!l.searchMode||!l.currentEmojis.length)return;const ie=we=>{zr(B),l.activeSearchItem=Fp(we,l.activeSearchItem,l.currentEmojis)};switch(B.key){case"ArrowDown":return ie(!1);case"ArrowUp":return ie(!0);case"Enter":if(l.activeSearchItem===-1)l.activeSearchItem=0;else return zr(B),O(l.currentEmojis[l.activeSearchItem].id)}}function ae(B){const{target:ie}=B,we=ie.closest(".nav-button");if(!we)return;const Ce=parseInt(we.dataset.groupId,10);a.searchElement.value="",l.rawSearchText="",l.searchText="",l.activeSearchItem=-1,l.currentGroupIndex=l.groups.findIndex(ze=>ze.id===Ce)}function re(B){const{target:ie,key:we}=B,Ce=ze=>{ze&&(zr(B),ze.focus())};switch(we){case"ArrowLeft":return Ce(ie.previousElementSibling);case"ArrowRight":return Ce(ie.nextElementSibling);case"Home":return Ce(ie.parentElement.firstElementChild);case"End":return Ce(ie.parentElement.lastElementChild)}}async function V(B){const ie=await l.database.getEmojiByUnicodeOrName(B),we=[...l.currentEmojis,...l.currentFavorites].find(ze=>ze.id===B),Ce=we.unicode&&E(we,l.currentSkinTone);return await l.database.incrementFavoriteEmojiCount(B),{emoji:ie,skinTone:l.currentSkinTone,...Ce&&{unicode:Ce},...we.name&&{name:we.name}}}async function O(B){const ie=V(B);v("emoji-click-sync",ie),v("emoji-click",await ie)}function D(B){const{target:ie}=B;if(!ie.classList.contains("emoji"))return;zr(B);const we=ie.id.substring(4);O(we)}function $(B){l.currentSkinTone=B,l.skinTonePickerExpanded=!1,p("skintone-button"),v("skin-tone-change",{skinTone:B}),l.database.setPreferredSkinTone(B)}function H(B){const{target:{id:ie}}=B,we=ie&&ie.match(/^skintone-(\d)/);if(!we)return;zr(B);const Ce=parseInt(we[1],10);$(Ce)}function X(B){l.skinTonePickerExpanded=!l.skinTonePickerExpanded,l.activeSkinTone=l.currentSkinTone,l.skinTonePickerExpanded&&(zr(B),ed(()=>p("skintone-list")))}d(()=>{l.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{l.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):l.skinTonePickerExpandedAfterAnimation=!1});function xe(B){if(!l.skinTonePickerExpanded)return;const ie=async we=>{zr(B),l.activeSkinTone=we};switch(B.key){case"ArrowUp":return ie(Fp(!0,l.activeSkinTone,l.skinTones));case"ArrowDown":return ie(Fp(!1,l.activeSkinTone,l.skinTones));case"Home":return ie(0);case"End":return ie(l.skinTones.length-1);case"Enter":return zr(B),$(l.activeSkinTone);case"Escape":return zr(B),l.skinTonePickerExpanded=!1,p("skintone-button")}}function q(B){if(l.skinTonePickerExpanded)switch(B.key){case" ":return zr(B),$(l.activeSkinTone)}}async function ge(B){const{relatedTarget:ie}=B;(!ie||ie.id!=="skintone-list")&&(l.skinTonePickerExpanded=!1)}function me(B){l.rawSearchText=B.target.value}return{$set(B){$u(l,B)},$destroy(){o.abort()}}}const cO="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",uO="en";var dO={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},fO=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const ZS=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],mO=`:host{--emoji-font-family:${WS}}`;class Cx extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=fO+mO,this.shadowRoot.appendChild(a),this._ctx={locale:uO,dataSource:cO,skinToneEmoji:ED,customCategorySorting:MD,customEmoji:null,i18n:dO,emojiVersion:null,...n};for(const o of ZS)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){V0(this),this._cmp||(this._cmp=lO(this.shadowRoot,this._ctx))}disconnectedCallback(){V0(this),md(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(c,l)=>l.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new jD({locale:n,dataSource:a}))}_dbFlush(){md(()=>this._dbCreate())}}const QS={};for(const t of ZS)QS[t]={get(){return t==="database"&&this._dbCreate(),this._ctx[t]},set(n){if(t==="database")throw new Error("database is read-only");this._set(t,n)}};Object.defineProperties(Cx.prototype,QS);function V0(t){t instanceof Cx||Object.setPrototypeOf(t,customElements.get(t.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Cx);function pO({onPick:t}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const c=l=>{var p;const d=l.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&t(m)};return o.addEventListener("emoji-click",c),a.appendChild(o),()=>{o.removeEventListener("emoji-click",c),o.remove()}},[t]),s.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const hO=/^<(a?):([^:>]+):(\d{17,20})>$/;function td(t,n,a=!1){return`${a?"`}function JS(t){const n=String(t??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(hO);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function e5(t,n=!1){return`https://cdn.discordapp.com/emojis/${t}.${n?"gif":"png"}?size=64`}function gO(t,n=[]){const a=JS(t);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(c=>c.id===a.id);if(o)return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(c=>c.id===a.id);if(o&&a.value!==td(o.name,o.id,o.animated))return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function xO({value:t,guildEmojis:n,size:a="md"}){const o=gO(t,n),c=a==="lg"?"size-10":"size-7",l=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?s.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?s.jsxs("span",{className:"inline-flex items-center gap-3",children:[s.jsx("img",{src:e5(o.id,o.animated),alt:o.name??"custom emoji",className:pe(c,"shrink-0 rounded-md"),loading:"lazy"}),s.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[s.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),s.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):s.jsx("span",{className:pe(l,"leading-none"),title:o.value,children:o.value})}function vO({id:t,label:n,description:a,value:o,onChange:c,readOnly:l}){const[d,m]=f.useState(!1),[p,g]=f.useState("server"),[v,b]=f.useState(null),[w,y]=f.useState(""),[C,S]=f.useState(!1),[E,k]=f.useState(""),N=f.useCallback(async(I=!1)=>{S(!0),y("");try{const G=await Ne.getGuildResources(I);G.data?(b(G.data),Array.isArray(G.data.emojis)||y("Server response is missing emojis. Restart the bot after updating.")):y("No guild data returned.")}catch(G){y(G instanceof Error?G.message:"Could not load server emojis")}finally{S(!1)}},[]);f.useEffect(()=>{d&&N(!0)},[d,N]);const T=f.useMemo(()=>Array.isArray(v==null?void 0:v.emojis)?v.emojis:[],[v]),M=f.useMemo(()=>{const I=E.trim().toLowerCase();return I?T.filter(G=>G.name.toLowerCase().includes(I)):T},[T,E]),_=String(o??""),R=JS(_);function L(I){c(I),m(!1)}function te(I){c(td(I.name,I.id,I.animated)),m(!1)}function K(){c("")}return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:t,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,s.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx(xO,{value:o,guildEmojis:T,size:"lg"})}),s.jsxs("div",{className:"flex shrink-0 gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",size:"sm",disabled:l,onClick:()=>m(!0),children:"Choose emoji"}),_?s.jsx(ue,{type:"button",variant:"ghost",size:"sm",disabled:l,onClick:K,children:"Clear"}):null]})]}),s.jsx(Qs,{open:d,onOpenChange:m,children:s.jsxs(hs,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[s.jsxs(gs,{className:"space-y-1 border-b border-border px-5 py-4",children:[s.jsx(xs,{children:"Choose emoji"}),s.jsxs(vs,{children:["Server emojis save as"," ",s.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),s.jsxs(DS,{value:p,onValueChange:I=>g(I),className:"flex min-h-0 flex-1 flex-col",children:[s.jsxs(xx,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[s.jsx(Ys,{value:"server",children:"Server"}),s.jsx(Ys,{value:"unicode",children:"All emojis"})]}),s.jsxs($h,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[s.jsxs("div",{className:"relative mb-3",children:[s.jsx(ve,{icon:ji,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search by name…",value:E,onChange:I=>k(I.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),v?s.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[v.guildName," · ",T.length," custom emoji",T.length===1?"":"s"]}):null,s.jsx(fc,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:C?s.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((I,G)=>s.jsx(Be,{className:"aspect-square rounded-lg"},G))}):w?s.jsxs("div",{className:"space-y-3 p-4 text-center",children:[s.jsx("p",{className:"text-sm text-destructive",children:w}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>void N(!0),children:"Retry"})]}):M.length===0?s.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:T.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):s.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:M.map(I=>{const G=R.kind==="custom"&&R.id===I.id;return s.jsx("button",{type:"button",title:`:${I.name}:`,className:pe("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",G&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>te(I),children:s.jsx("img",{src:I.url??e5(I.id,I.animated),alt:I.name,className:"size-8 object-contain",loading:"lazy"})},I.id)})})})]}),s.jsx($h,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:s.jsx(pO,{onPick:L})})]})]})}),s.jsx(De,{value:_,disabled:l,onChange:I=>c(I.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const F0="BOT_TOKEN",bO="MODEL_API_KEY";function pd({field:t,value:n,onChange:a,readOnly:o}){const c=t.path.replace(/\./g,"-");if(t.type==="googleFont")return s.jsx(S_,{field:t,value:n,onChange:a,readOnly:o});if(t.type==="boolean")return s.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[s.jsxs("div",{children:[s.jsx(_e,{htmlFor:c,className:"font-medium",children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null]}),s.jsx(kt,{id:c,checked:!!n,disabled:o,onCheckedChange:a})]});if(t.type==="stringList")return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(w_,{value:Array.isArray(n)?n:[],onChange:a})]});if(t.type==="select"&&t.options)return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),s.jsxs(Ca,{value:String(n??""),disabled:o,onValueChange:a,children:[s.jsx(Br,{id:c,className:"border-border bg-secondary/30",children:s.jsx(Sa,{placeholder:"Select…"})}),s.jsx($r,{children:t.options.map(d=>s.jsx(vt,{value:d.value,children:d.label},d.value))})]})]});if(t.type==="color"){const d=Ur(String(n??"#000000"));return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsxs("div",{className:"flex gap-2",children:[s.jsx(tf,{value:d,onChange:a}),s.jsx(De,{id:c,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(Ur(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(t.type==="emoji")return s.jsx(vO,{id:c,label:t.label,description:t.description,value:n,onChange:a,readOnly:o});if(t.type==="discordChannel"||t.type==="discordRole"||t.type==="discordCategory"){const d=t.type==="discordRole"?"role":t.type==="discordCategory"?"category":"channel";return s.jsx(TS,{id:c,label:t.label,description:t.description,kind:d,value:n,onChange:a,readOnly:o})}if(t.type==="secret"){const d=n===F0||n===bO||!n?"":"••••••••••••";return s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(De,{id:c,type:"password",value:d,disabled:o,placeholder:t.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(t.placeholder??F0))},className:"border-border bg-secondary/30"})]})}const l="border-border bg-secondary/30";return t.type==="textarea"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),s.jsx(Jd,{id:c,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${l}`})]}):s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(De,{id:c,type:t.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(t.type==="number"?Number(d.target.value):d.target.value),placeholder:t.placeholder??(t.type==="discordId"?"Discord snowflake ID":void 0),className:l})]})}const Ze=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("rounded-xl border border-border bg-card text-card-foreground shadow-none",t),...n}));Ze.displayName="Card";const ut=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex flex-col space-y-1.5 p-6",t),...n}));ut.displayName="CardHeader";const dt=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("font-semibold leading-none tracking-tight",t),...n}));dt.displayName="CardTitle";const Ot=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("text-sm text-muted-foreground",t),...n}));Ot.displayName="CardDescription";const Qe=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("p-6 pt-0",t),...n}));Qe.displayName="CardContent";const Sx=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex items-center p-6 pt-0",t),...n}));Sx.displayName="CardFooter";function Y0(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function yO(t,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=t.toLowerCase();return/prefix/.test(a)?"text":/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Nx(t,n=""){const a=[];for(const[o,c]of Object.entries(t)){const l=n?`${n}.${o}`:o;if(Array.isArray(c)){if(c.length>0&&typeof c[0]=="object"&&c[0]!==null&&!Array.isArray(c[0]))continue;a.push({path:l,label:Y0(o),type:"stringList"});continue}if(c&&typeof c=="object"&&Object.keys(c).length>0){a.push(...Nx(c,l));continue}a.push({path:l,label:Y0(o),type:yO(o,c)})}return a}function wO(t){const n=Nx(t);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function Fr(t,n){const a=n.split(".");let o=t;for(const c of a){if(o==null||typeof o!="object")return;o=o[c]}return o}function Gn(t,n,a){const o=n.split("."),c=structuredClone(t);let l=c;for(let d=0;d{switch(t){case"success":return NO;case"info":return kO;case"warning":return EO;case"error":return TO;default:return null}},CO=Array(12).fill(0),SO=({visible:t,className:n})=>be.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":t},be.createElement("div",{className:"sonner-spinner"},CO.map((a,o)=>be.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),NO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),EO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),kO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),TO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},be.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),MO=be.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},be.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),be.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),RO=()=>{let[t,n]=be.useState(document.hidden);return be.useEffect(()=>{let a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),t},qh=1,AO=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let n=this.subscribers.indexOf(t);this.subscribers.splice(n,1)}),this.publish=t=>{this.subscribers.forEach(n=>n(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var n;let{message:a,...o}=t,c=typeof(t==null?void 0:t.id)=="number"||((n=t.id)==null?void 0:n.length)>0?t.id:qh++,l=this.toasts.find(m=>m.id===c),d=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),l?this.toasts=this.toasts.map(m=>m.id===c?(this.publish({...m,...t,id:c,title:a}),{...m,...t,id:c,dismissible:d,title:a}):m):this.addToast({title:a,...o,dismissible:d,id:c}),c},this.dismiss=t=>(this.dismissedToasts.add(t),t||this.toasts.forEach(n=>{this.subscribers.forEach(a=>a({id:n.id,dismiss:!0}))}),this.subscribers.forEach(n=>n({id:t,dismiss:!0})),t),this.message=(t,n)=>this.create({...n,message:t}),this.error=(t,n)=>this.create({...n,message:t,type:"error"}),this.success=(t,n)=>this.create({...n,type:"success",message:t}),this.info=(t,n)=>this.create({...n,type:"info",message:t}),this.warning=(t,n)=>this.create({...n,type:"warning",message:t}),this.loading=(t,n)=>this.create({...n,type:"loading",message:t}),this.promise=(t,n)=>{if(!n)return;let a;n.loading!==void 0&&(a=this.create({...n,promise:t,type:"loading",message:n.loading,description:typeof n.description!="function"?n.description:void 0}));let o=t instanceof Promise?t:t(),c=a!==void 0,l,d=o.then(async p=>{if(l=["resolve",p],be.isValidElement(p))c=!1,this.create({id:a,type:"default",message:p});else if(DO(p)&&!p.ok){c=!1;let g=typeof n.error=="function"?await n.error(`HTTP error! status: ${p.status}`):n.error,v=typeof n.description=="function"?await n.description(`HTTP error! status: ${p.status}`):n.description;this.create({id:a,type:"error",message:g,description:v})}else if(n.success!==void 0){c=!1;let g=typeof n.success=="function"?await n.success(p):n.success,v=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"success",message:g,description:v})}}).catch(async p=>{if(l=["reject",p],n.error!==void 0){c=!1;let g=typeof n.error=="function"?await n.error(p):n.error,v=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"error",message:g,description:v})}}).finally(()=>{var p;c&&(this.dismiss(a),a=void 0),(p=n.finally)==null||p.call(n)}),m=()=>new Promise((p,g)=>d.then(()=>l[0]==="reject"?g(l[1]):p(l[1])).catch(g));return typeof a!="string"&&typeof a!="number"?{unwrap:m}:Object.assign(a,{unwrap:m})},this.custom=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return this.create({jsx:t(a),id:a,...n}),a},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Tn=new AO,_O=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return Tn.addToast({title:t,...n,id:a}),a},DO=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",OO=_O,LO=()=>Tn.toasts,zO=()=>Tn.getActiveToasts(),Dt=Object.assign(OO,{success:Tn.success,info:Tn.info,warning:Tn.warning,error:Tn.error,custom:Tn.custom,message:Tn.message,promise:Tn.promise,dismiss:Tn.dismiss,loading:Tn.loading},{getHistory:LO,getToasts:zO});function PO(t,{insertAt:n}={}){if(typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}PO(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} -`);function Hu(t){return t.label!==void 0}var IO=3,UO="32px",BO="16px",q0=4e3,$O=356,HO=14,GO=20,VO=200;function wr(...t){return t.filter(Boolean).join(" ")}function FO(t){let[n,a]=t.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}var YO=t=>{var n,a,o,c,l,d,m,p,g,v,b;let{invert:w,toast:y,unstyled:C,interacting:S,setHeights:E,visibleToasts:k,heights:N,index:T,toasts:M,expanded:_,removeToast:R,defaultRichColors:L,closeButton:te,style:K,cancelButtonStyle:I,actionButtonStyle:G,className:Y="",descriptionClassName:ce="",duration:fe,position:se,gap:P,loadingIcon:Z,expandByDefault:ae,classNames:re,icons:V,closeButtonAriaLabel:O="Close toast",pauseWhenPageIsHidden:D}=t,[$,H]=be.useState(null),[X,xe]=be.useState(null),[q,ge]=be.useState(!1),[me,B]=be.useState(!1),[ie,we]=be.useState(!1),[Ce,ze]=be.useState(!1),[Ke,ft]=be.useState(!1),[Pt,gn]=be.useState(0),[Yr,_n]=be.useState(0),wn=be.useRef(y.duration||fe||q0),Xn=be.useRef(null),Zn=be.useRef(null),It=T===0,po=T+1<=k,nn=y.type,Dn=y.dismissible!==!1,Da=y.className||"",ho=y.descriptionClassName||"",Qn=be.useMemo(()=>N.findIndex(Oe=>Oe.toastId===y.id)||0,[N,y.id]),Es=be.useMemo(()=>{var Oe;return(Oe=y.closeButton)!=null?Oe:te},[y.closeButton,te]),qr=be.useMemo(()=>y.duration||fe||q0,[y.duration,fe]),gr=be.useRef(0),Tt=be.useRef(0),On=be.useRef(0),Mt=be.useRef(null),[Oi,Li]=se.split("-"),go=be.useMemo(()=>N.reduce((Oe,tt,it)=>it>=Qn?Oe:Oe+tt.height,0),[N,Qn]),Kr=RO(),Oa=y.invert||w,Mr=nn==="loading";Tt.current=be.useMemo(()=>Qn*P+go,[Qn,go]),be.useEffect(()=>{wn.current=qr},[qr]),be.useEffect(()=>{ge(!0)},[]),be.useEffect(()=>{let Oe=Zn.current;if(Oe){let tt=Oe.getBoundingClientRect().height;return _n(tt),E(it=>[{toastId:y.id,height:tt,position:y.position},...it]),()=>E(it=>it.filter(rn=>rn.toastId!==y.id))}},[E,y.id]),be.useLayoutEffect(()=>{if(!q)return;let Oe=Zn.current,tt=Oe.style.height;Oe.style.height="auto";let it=Oe.getBoundingClientRect().height;Oe.style.height=tt,_n(it),E(rn=>rn.find(Ft=>Ft.toastId===y.id)?rn.map(Ft=>Ft.toastId===y.id?{...Ft,height:it}:Ft):[{toastId:y.id,height:it,position:y.position},...rn])},[q,y.title,y.description,E,y.id]);let Kt=be.useCallback(()=>{B(!0),gn(Tt.current),E(Oe=>Oe.filter(tt=>tt.toastId!==y.id)),setTimeout(()=>{R(y)},VO)},[y,R,E,Tt]);be.useEffect(()=>{if(y.promise&&nn==="loading"||y.duration===1/0||y.type==="loading")return;let Oe;return _||S||D&&Kr?(()=>{if(On.current{var tt;(tt=y.onAutoClose)==null||tt.call(y,y),Kt()},wn.current)),()=>clearTimeout(Oe)},[_,S,y,nn,D,Kr,Kt]),be.useEffect(()=>{y.delete&&Kt()},[Kt,y.delete]);function La(){var Oe,tt,it;return V!=null&&V.loading?be.createElement("div",{className:wr(re==null?void 0:re.loader,(Oe=y==null?void 0:y.classNames)==null?void 0:Oe.loader,"sonner-loader"),"data-visible":nn==="loading"},V.loading):Z?be.createElement("div",{className:wr(re==null?void 0:re.loader,(tt=y==null?void 0:y.classNames)==null?void 0:tt.loader,"sonner-loader"),"data-visible":nn==="loading"},Z):be.createElement(SO,{className:wr(re==null?void 0:re.loader,(it=y==null?void 0:y.classNames)==null?void 0:it.loader),visible:nn==="loading"})}return be.createElement("li",{tabIndex:0,ref:Zn,className:wr(Y,Da,re==null?void 0:re.toast,(n=y==null?void 0:y.classNames)==null?void 0:n.toast,re==null?void 0:re.default,re==null?void 0:re[nn],(a=y==null?void 0:y.classNames)==null?void 0:a[nn]),"data-sonner-toast":"","data-rich-colors":(o=y.richColors)!=null?o:L,"data-styled":!(y.jsx||y.unstyled||C),"data-mounted":q,"data-promise":!!y.promise,"data-swiped":Ke,"data-removed":me,"data-visible":po,"data-y-position":Oi,"data-x-position":Li,"data-index":T,"data-front":It,"data-swiping":ie,"data-dismissible":Dn,"data-type":nn,"data-invert":Oa,"data-swipe-out":Ce,"data-swipe-direction":X,"data-expanded":!!(_||ae&&q),style:{"--index":T,"--toasts-before":T,"--z-index":M.length-T,"--offset":`${me?Pt:Tt.current}px`,"--initial-height":ae?"auto":`${Yr}px`,...K,...y.style},onDragEnd:()=>{we(!1),H(null),Mt.current=null},onPointerDown:Oe=>{Mr||!Dn||(Xn.current=new Date,gn(Tt.current),Oe.target.setPointerCapture(Oe.pointerId),Oe.target.tagName!=="BUTTON"&&(we(!0),Mt.current={x:Oe.clientX,y:Oe.clientY}))},onPointerUp:()=>{var Oe,tt,it,rn;if(Ce||!Dn)return;Mt.current=null;let Ft=Number(((Oe=Zn.current)==null?void 0:Oe.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Rt=Number(((tt=Zn.current)==null?void 0:tt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),Jn=new Date().getTime()-((it=Xn.current)==null?void 0:it.getTime()),fn=$==="x"?Ft:Rt,Ln=Math.abs(fn)/Jn;if(Math.abs(fn)>=GO||Ln>.11){gn(Tt.current),(rn=y.onDismiss)==null||rn.call(y,y),xe($==="x"?Ft>0?"right":"left":Rt>0?"down":"up"),Kt(),ze(!0),ft(!1);return}we(!1),H(null)},onPointerMove:Oe=>{var tt,it,rn,Ft;if(!Mt.current||!Dn||((tt=window.getSelection())==null?void 0:tt.toString().length)>0)return;let Rt=Oe.clientY-Mt.current.y,Jn=Oe.clientX-Mt.current.x,fn=(it=t.swipeDirections)!=null?it:FO(se);!$&&(Math.abs(Jn)>1||Math.abs(Rt)>1)&&H(Math.abs(Jn)>Math.abs(Rt)?"x":"y");let Ln={x:0,y:0};$==="y"?(fn.includes("top")||fn.includes("bottom"))&&(fn.includes("top")&&Rt<0||fn.includes("bottom")&&Rt>0)&&(Ln.y=Rt):$==="x"&&(fn.includes("left")||fn.includes("right"))&&(fn.includes("left")&&Jn<0||fn.includes("right")&&Jn>0)&&(Ln.x=Jn),(Math.abs(Ln.x)>0||Math.abs(Ln.y)>0)&&ft(!0),(rn=Zn.current)==null||rn.style.setProperty("--swipe-amount-x",`${Ln.x}px`),(Ft=Zn.current)==null||Ft.style.setProperty("--swipe-amount-y",`${Ln.y}px`)}},Es&&!y.jsx?be.createElement("button",{"aria-label":O,"data-disabled":Mr,"data-close-button":!0,onClick:Mr||!Dn?()=>{}:()=>{var Oe;Kt(),(Oe=y.onDismiss)==null||Oe.call(y,y)},className:wr(re==null?void 0:re.closeButton,(c=y==null?void 0:y.classNames)==null?void 0:c.closeButton)},(l=V==null?void 0:V.close)!=null?l:MO):null,y.jsx||f.isValidElement(y.title)?y.jsx?y.jsx:typeof y.title=="function"?y.title():y.title:be.createElement(be.Fragment,null,nn||y.icon||y.promise?be.createElement("div",{"data-icon":"",className:wr(re==null?void 0:re.icon,(d=y==null?void 0:y.classNames)==null?void 0:d.icon)},y.promise||y.type==="loading"&&!y.icon?y.icon||La():null,y.type!=="loading"?y.icon||(V==null?void 0:V[nn])||jO(nn):null):null,be.createElement("div",{"data-content":"",className:wr(re==null?void 0:re.content,(m=y==null?void 0:y.classNames)==null?void 0:m.content)},be.createElement("div",{"data-title":"",className:wr(re==null?void 0:re.title,(p=y==null?void 0:y.classNames)==null?void 0:p.title)},typeof y.title=="function"?y.title():y.title),y.description?be.createElement("div",{"data-description":"",className:wr(ce,ho,re==null?void 0:re.description,(g=y==null?void 0:y.classNames)==null?void 0:g.description)},typeof y.description=="function"?y.description():y.description):null),f.isValidElement(y.cancel)?y.cancel:y.cancel&&Hu(y.cancel)?be.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||I,onClick:Oe=>{var tt,it;Hu(y.cancel)&&Dn&&((it=(tt=y.cancel).onClick)==null||it.call(tt,Oe),Kt())},className:wr(re==null?void 0:re.cancelButton,(v=y==null?void 0:y.classNames)==null?void 0:v.cancelButton)},y.cancel.label):null,f.isValidElement(y.action)?y.action:y.action&&Hu(y.action)?be.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||G,onClick:Oe=>{var tt,it;Hu(y.action)&&((it=(tt=y.action).onClick)==null||it.call(tt,Oe),!Oe.defaultPrevented&&Kt())},className:wr(re==null?void 0:re.actionButton,(b=y==null?void 0:y.classNames)==null?void 0:b.actionButton)},y.action.label):null))};function K0(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}function qO(t,n){let a={};return[t,n].forEach((o,c)=>{let l=c===1,d=l?"--mobile-offset":"--offset",m=l?BO:UO;function p(g){["top","right","bottom","left"].forEach(v=>{a[`${d}-${v}`]=typeof g=="number"?`${g}px`:g})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(g=>{o[g]===void 0?a[`${d}-${g}`]=m:a[`${d}-${g}`]=typeof o[g]=="number"?`${o[g]}px`:o[g]}):p(m)}),a}var KO=f.forwardRef(function(t,n){let{invert:a,position:o="bottom-right",hotkey:c=["altKey","KeyT"],expand:l,closeButton:d,className:m,offset:p,mobileOffset:g,theme:v="light",richColors:b,duration:w,style:y,visibleToasts:C=IO,toastOptions:S,dir:E=K0(),gap:k=HO,loadingIcon:N,icons:T,containerAriaLabel:M="Notifications",pauseWhenPageIsHidden:_}=t,[R,L]=be.useState([]),te=be.useMemo(()=>Array.from(new Set([o].concat(R.filter(D=>D.position).map(D=>D.position)))),[R,o]),[K,I]=be.useState([]),[G,Y]=be.useState(!1),[ce,fe]=be.useState(!1),[se,P]=be.useState(v!=="system"?v:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),Z=be.useRef(null),ae=c.join("+").replace(/Key/g,"").replace(/Digit/g,""),re=be.useRef(null),V=be.useRef(!1),O=be.useCallback(D=>{L($=>{var H;return(H=$.find(X=>X.id===D.id))!=null&&H.delete||Tn.dismiss(D.id),$.filter(({id:X})=>X!==D.id)})},[]);return be.useEffect(()=>Tn.subscribe(D=>{if(D.dismiss){L($=>$.map(H=>H.id===D.id?{...H,delete:!0}:H));return}setTimeout(()=>{m8.flushSync(()=>{L($=>{let H=$.findIndex(X=>X.id===D.id);return H!==-1?[...$.slice(0,H),{...$[H],...D},...$.slice(H+1)]:[D,...$]})})})}),[]),be.useEffect(()=>{if(v!=="system"){P(v);return}if(v==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?P("dark"):P("light")),typeof window>"u")return;let D=window.matchMedia("(prefers-color-scheme: dark)");try{D.addEventListener("change",({matches:$})=>{P($?"dark":"light")})}catch{D.addListener(({matches:H})=>{try{P(H?"dark":"light")}catch(X){console.error(X)}})}},[v]),be.useEffect(()=>{R.length<=1&&Y(!1)},[R]),be.useEffect(()=>{let D=$=>{var H,X;c.every(xe=>$[xe]||$.code===xe)&&(Y(!0),(H=Z.current)==null||H.focus()),$.code==="Escape"&&(document.activeElement===Z.current||(X=Z.current)!=null&&X.contains(document.activeElement))&&Y(!1)};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[c]),be.useEffect(()=>{if(Z.current)return()=>{re.current&&(re.current.focus({preventScroll:!0}),re.current=null,V.current=!1)}},[Z.current]),be.createElement("section",{ref:n,"aria-label":`${M} ${ae}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},te.map((D,$)=>{var H;let[X,xe]=D.split("-");return R.length?be.createElement("ol",{key:D,dir:E==="auto"?K0():E,tabIndex:-1,ref:Z,className:m,"data-sonner-toaster":!0,"data-theme":se,"data-y-position":X,"data-lifted":G&&R.length>1&&!l,"data-x-position":xe,style:{"--front-toast-height":`${((H=K[0])==null?void 0:H.height)||0}px`,"--width":`${$O}px`,"--gap":`${k}px`,...y,...qO(p,g)},onBlur:q=>{V.current&&!q.currentTarget.contains(q.relatedTarget)&&(V.current=!1,re.current&&(re.current.focus({preventScroll:!0}),re.current=null))},onFocus:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||V.current||(V.current=!0,re.current=q.relatedTarget)},onMouseEnter:()=>Y(!0),onMouseMove:()=>Y(!0),onMouseLeave:()=>{ce||Y(!1)},onDragEnd:()=>Y(!1),onPointerDown:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||fe(!0)},onPointerUp:()=>fe(!1)},R.filter(q=>!q.position&&$===0||q.position===D).map((q,ge)=>{var me,B;return be.createElement(YO,{key:q.id,icons:T,index:ge,toast:q,defaultRichColors:b,duration:(me=S==null?void 0:S.duration)!=null?me:w,className:S==null?void 0:S.className,descriptionClassName:S==null?void 0:S.descriptionClassName,invert:a,visibleToasts:C,closeButton:(B=S==null?void 0:S.closeButton)!=null?B:d,interacting:ce,position:D,style:S==null?void 0:S.style,unstyled:S==null?void 0:S.unstyled,classNames:S==null?void 0:S.classNames,cancelButtonStyle:S==null?void 0:S.cancelButtonStyle,actionButtonStyle:S==null?void 0:S.actionButtonStyle,removeToast:O,toasts:R.filter(ie=>ie.position==q.position),heights:K.filter(ie=>ie.position==q.position),setHeights:I,expandByDefault:l,gap:k,loadingIcon:N,expanded:G,pauseWhenPageIsHidden:_,swipeDirections:t.swipeDirections})})):null}))});async function nd(t){const n=Dt.loading("Saving changes…");try{const a=await t();if(Dt.success("Changes saved",{id:n}),a.botRestart){const o=Dt.loading("Restarting bot…");a.botRestart.success?Dt.success("Bot started",{id:o}):Dt.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Dt.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function WO({filename:t}){const{canEditConfig:n}=qt(),a=!n("supportbot"),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{p(!0),w(""),C("");try{const _=(await Ne.getAddonConfigJson(t)).data??{};c(_),d(structuredClone(_))}catch(M){w(M instanceof Error?M.message:"Failed to load config")}finally{p(!1)}},[t]);f.useEffect(()=>{S()},[S]);const E=o?wO(o):null;function k(M,_){c(R=>R&&Gn(R,M,_))}async function N(){if(!(a||!o)){v(!0),w(""),C("");try{const M=await nd(()=>Ne.saveAddonConfig(t,o));C(M.message||"Saved."),await S()}catch(M){w(M instanceof Error?M.message:"Save failed")}finally{v(!1)}}}if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!o||!E)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b||"Failed to load"})});const T=l&&JSON.stringify(o)!==JSON.stringify(l);return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:S,disabled:m||g,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:N,disabled:g||!T,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save"]})]}),b?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(ve,{icon:ig,size:18}),s.jsx(qe,{children:b})]}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,E.map(M=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:M.title}),M.description?s.jsx(Ot,{children:M.description}):null]}),s.jsx(Qe,{className:"grid gap-4 sm:grid-cols-2",children:M.fields.map(_=>s.jsx("div",{className:_.type==="textarea"||_.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:_,value:Fr(o,_.path),readOnly:a,onChange:R=>k(_.path,R)})},_.path))})]},M.title))]})}function XO(t){return t.startsWith("Ticket.DepartmentSystem.")?"Ticket Departments":t.startsWith("Ticket.PrioritySystem.")?"Ticket Priorities":t.startsWith("Ticket.")?"Tickets":(t.split(".")[0]??"Other").replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,a=>a.toUpperCase())}function ZO(t,n){const a=new Set(t.flatMap(d=>d.fields.map(m=>m.path))),o=Nx(n).filter(d=>!a.has(d.path));if(o.length===0)return t;const c=t.map(d=>({...d,fields:[...d.fields]})),l=new Map;for(const d of o){const m=XO(d.path),p=l.get(m)??[];p.push(d),l.set(m,p)}for(const[d,m]of l.entries()){const p=c.find(g=>g.title.toLowerCase()===d.toLowerCase());p?p.fields.push(...m):c.push({title:d,description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((g,v)=>g.path.localeCompare(v.path))})}return c}function W0(t,n){(n==null||n>t.length)&&(n=t.length);for(var a=0,o=Array(n);a=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};Gu.initial(t),Gu.handler(n);var a={current:t},o=Al(wL)(a,n),c=Al(yL)(a),l=Al(Gu.changes)(t),d=Al(bL)(a);function m(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(v){return v};return Gu.selector(g),g(a.current)}function p(g){cL(o,c,l,d)(g)}return[m,p]}function bL(t,n){return Ql(n)?n(t.current):n}function yL(t,n){return t.current=J0(J0({},t.current),n),n}function wL(t,n,a){return Ql(n)?n(t.current):Object.keys(a).forEach(function(o){var c;return(c=n[o])===null||c===void 0?void 0:c.call(n,t.current[o])}),a}var jL={create:vL},CL={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function SL(t){return function n(){for(var a=this,o=arguments.length,c=new Array(o),l=0;l=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p{l.customEmoji&&l.database&&L()}),d(()=>{l.customEmoji&&l.customEmoji.length?l.groups!==Fh&&(l.groups=Fh):l.groups!==Hp&&(l.currentGroupIndex&&l.currentGroupIndex--,l.groups=Hp)}),d(()=>{async function $(){l.databaseLoaded&&(l.currentSkinTone=await l.database.getPreferredSkinTone())}$()}),d(()=>{l.skinTones=Array(z0).fill().map(($,ie)=>ID(l.skinToneEmoji,ie))}),d(()=>{l.skinToneButtonText=l.skinTones[l.currentSkinTone]}),d(()=>{l.skinToneButtonLabel=l.i18n.skinToneLabel.replace("{skinTone}",l.i18n.skinTones[l.currentSkinTone])}),d(()=>{async function $(){const{database:ie}=l,ye=(await Promise.all(TD.map(Se=>ie.getEmojiByUnicodeOrName(Se)))).filter(Boolean);l.defaultFavoriteEmojis=ye}l.databaseLoaded&&$()});function L(){const{customEmoji:$,database:ie}=l,ye=$||Kp;ie.customEmoji!==ye&&(ie.customEmoji=ye)}d(()=>{async function $(){L();const{database:ie,defaultFavoriteEmojis:ye,numColumns:Se}=l,Be=await ie.getTopFavoriteEmoji(Se),Ke=await de(XS([...Be,...ye],We=>We.unicode||We.name).slice(0,Se));l.currentFavorites=Ke}l.databaseLoaded&&l.defaultFavoriteEmojis&&$()});function ne($){$D($,c,()=>{{const ie=getComputedStyle(a.rootElement),ye=parseInt(ie.getPropertyValue("--num-columns"),10),Se=ie.getPropertyValue("direction")==="rtl";l.numColumns=ye,l.isRtl=Se}})}function X($){iO($,c,ie=>{for(const{target:ye,isIntersecting:Se}of ie)ye.classList.toggle("onscreen",Se)})}d(()=>{async function $(){const{searchText:ie,currentGroup:ye,databaseLoaded:Se,customEmoji:Be}=l;if(!Se)l.currentEmojis=[],l.searchMode=!1;else if(ie.length>=CD){const Ke=await P(ie);l.searchText===ie&&(y(Ke),C(!0))}else{const{id:Ke}=ye;if(Ke!==-1||Be&&Be.length){const We=await se(Ke);l.currentGroup.id===Ke&&(y(We),C(!1))}}}$()});const I=()=>{ed(()=>FD(a.tabpanelElement))};d(()=>{const{currentEmojis:$,emojiVersion:ie}=l,ye=$.filter(Se=>Se.unicode).filter(Se=>P0(Se)&&!Yh.has(Se.unicode));if(!ie&&ye.length)y($),ed(()=>H(ye));else{const Se=ie?$:$.filter(q);y(Se),I()}});function H($){GD($,a.baselineEmoji,g)?I():l.currentEmojis=[...l.currentEmojis]}function q($){return!$.unicode||!P0($)||Yh.get($.unicode)}async function ce($){const ie=l.emojiVersion||await Vp();return $.filter(({version:ye})=>!ye||ye<=ie)}async function de($){return UD($,l.emojiVersion||await Vp())}async function se($){const ie=$===-1?l.customEmoji:await l.database.getEmojiByGroup($);return de(await ce(ie))}async function P($){return de(await ce(await l.database.getEmojiBySearchQuery($)))}d(()=>{}),d(()=>{function $(){const{searchMode:ye,currentEmojis:Se}=l;if(ye)return[{category:"",emojis:Se}];const Be=new Map;for(const Ke of Se){const We=Ke.category||"";let qt=Be.get(We);qt||(qt=[],Be.set(We,qt)),qt.push(Ke)}return[...Be.entries()].map(([Ke,We])=>({category:Ke,emojis:We})).sort((Ke,We)=>l.customCategorySorting(Ke.category,We.category))}const ie=$();S(ie)}),d(()=>{l.activeSearchItemId=l.activeSearchItem!==-1&&l.currentEmojis[l.activeSearchItem].id}),d(()=>{const{rawSearchText:$}=l;KS(()=>{l.searchText=($||"").trim(),l.activeSearchItem=-1})});function W($){if(!l.searchMode||!l.currentEmojis.length)return;const ie=ye=>{Ir($),l.activeSearchItem=Fp(ye,l.activeSearchItem,l.currentEmojis)};switch($.key){case"ArrowDown":return ie(!1);case"ArrowUp":return ie(!0);case"Enter":if(l.activeSearchItem===-1)l.activeSearchItem=0;else return Ir($),O(l.currentEmojis[l.activeSearchItem].id)}}function oe($){const{target:ie}=$,ye=ie.closest(".nav-button");if(!ye)return;const Se=parseInt(ye.dataset.groupId,10);a.searchElement.value="",l.rawSearchText="",l.searchText="",l.activeSearchItem=-1,l.currentGroupIndex=l.groups.findIndex(Be=>Be.id===Se)}function ae($){const{target:ie,key:ye}=$,Se=Be=>{Be&&(Ir($),Be.focus())};switch(ye){case"ArrowLeft":return Se(ie.previousElementSibling);case"ArrowRight":return Se(ie.nextElementSibling);case"Home":return Se(ie.parentElement.firstElementChild);case"End":return Se(ie.parentElement.lastElementChild)}}async function G($){const ie=await l.database.getEmojiByUnicodeOrName($),ye=[...l.currentEmojis,...l.currentFavorites].find(Be=>Be.id===$),Se=ye.unicode&&N(ye,l.currentSkinTone);return await l.database.incrementFavoriteEmojiCount($),{emoji:ie,skinTone:l.currentSkinTone,...Se&&{unicode:Se},...ye.name&&{name:ye.name}}}async function O($){const ie=G($);b("emoji-click-sync",ie),b("emoji-click",await ie)}function D($){const{target:ie}=$;if(!ie.classList.contains("emoji"))return;Ir($);const ye=ie.id.substring(4);O(ye)}function B($){l.currentSkinTone=$,l.skinTonePickerExpanded=!1,p("skintone-button"),b("skin-tone-change",{skinTone:$}),l.database.setPreferredSkinTone($)}function V($){const{target:{id:ie}}=$,ye=ie&&ie.match(/^skintone-(\d)/);if(!ye)return;Ir($);const Se=parseInt(ye[1],10);B(Se)}function Z($){l.skinTonePickerExpanded=!l.skinTonePickerExpanded,l.activeSkinTone=l.currentSkinTone,l.skinTonePickerExpanded&&(Ir($),ed(()=>p("skintone-list")))}d(()=>{l.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{l.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):l.skinTonePickerExpandedAfterAnimation=!1});function be($){if(!l.skinTonePickerExpanded)return;const ie=async ye=>{Ir($),l.activeSkinTone=ye};switch($.key){case"ArrowUp":return ie(Fp(!0,l.activeSkinTone,l.skinTones));case"ArrowDown":return ie(Fp(!1,l.activeSkinTone,l.skinTones));case"Home":return ie(0);case"End":return ie(l.skinTones.length-1);case"Enter":return Ir($),B(l.activeSkinTone);case"Escape":return Ir($),l.skinTonePickerExpanded=!1,p("skintone-button")}}function K($){if(l.skinTonePickerExpanded)switch($.key){case" ":return Ir($),B(l.activeSkinTone)}}async function ge($){const{relatedTarget:ie}=$;(!ie||ie.id!=="skintone-list")&&(l.skinTonePickerExpanded=!1)}function me($){l.rawSearchText=$.target.value}return{$set($){$u(l,$)},$destroy(){o.abort()}}}const cO="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",uO="en";var dO={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},fO=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const ZS=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],mO=`:host{--emoji-font-family:${WS}}`;class Cx extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=fO+mO,this.shadowRoot.appendChild(a),this._ctx={locale:uO,dataSource:cO,skinToneEmoji:ED,customCategorySorting:MD,customEmoji:null,i18n:dO,emojiVersion:null,...n};for(const o of ZS)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){V0(this),this._cmp||(this._cmp=lO(this.shadowRoot,this._ctx))}disconnectedCallback(){V0(this),md(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(c,l)=>l.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new jD({locale:n,dataSource:a}))}_dbFlush(){md(()=>this._dbCreate())}}const QS={};for(const t of ZS)QS[t]={get(){return t==="database"&&this._dbCreate(),this._ctx[t]},set(n){if(t==="database")throw new Error("database is read-only");this._set(t,n)}};Object.defineProperties(Cx.prototype,QS);function V0(t){t instanceof Cx||Object.setPrototypeOf(t,customElements.get(t.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",Cx);function pO({onPick:t}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const c=l=>{var p;const d=l.detail,m=(d==null?void 0:d.unicode)??((p=d==null?void 0:d.emoji)==null?void 0:p.unicode);m&&t(m)};return o.addEventListener("emoji-click",c),a.appendChild(o),()=>{o.removeEventListener("emoji-click",c),o.remove()}},[t]),s.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const hO=/^<(a?):([^:>]+):(\d{17,20})>$/;function td(t,n,a=!1){return`${a?"`}function JS(t){const n=String(t??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(hO);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function e5(t,n=!1){return`https://cdn.discordapp.com/emojis/${t}.${n?"gif":"png"}?size=64`}function gO(t,n=[]){const a=JS(t);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(c=>c.id===a.id);if(o)return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(c=>c.id===a.id);if(o&&a.value!==td(o.name,o.id,o.animated))return{kind:"custom",value:td(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function xO({value:t,guildEmojis:n,size:a="md"}){const o=gO(t,n),c=a==="lg"?"size-10":"size-7",l=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?s.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?s.jsxs("span",{className:"inline-flex items-center gap-3",children:[s.jsx("img",{src:e5(o.id,o.animated),alt:o.name??"custom emoji",className:pe(c,"shrink-0 rounded-md"),loading:"lazy"}),s.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[s.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),s.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):s.jsx("span",{className:pe(l,"leading-none"),title:o.value,children:o.value})}function bO({id:t,label:n,description:a,value:o,onChange:c,readOnly:l}){const[d,m]=f.useState(!1),[p,g]=f.useState("server"),[b,v]=f.useState(null),[w,y]=f.useState(""),[C,S]=f.useState(!1),[N,E]=f.useState(""),T=f.useCallback(async(I=!1)=>{S(!0),y("");try{const H=await Ne.getGuildResources(I);H.data?(v(H.data),Array.isArray(H.data.emojis)||y("Server response is missing emojis. Restart the bot after updating.")):y("No guild data returned.")}catch(H){y(H instanceof Error?H.message:"Could not load server emojis")}finally{S(!1)}},[]);f.useEffect(()=>{d&&T(!0)},[d,T]);const M=f.useMemo(()=>Array.isArray(b==null?void 0:b.emojis)?b.emojis:[],[b]),k=f.useMemo(()=>{const I=N.trim().toLowerCase();return I?M.filter(H=>H.name.toLowerCase().includes(I)):M},[M,N]),_=String(o??""),R=JS(_);function L(I){c(I),m(!1)}function ne(I){c(td(I.name,I.id,I.animated)),m(!1)}function X(){c("")}return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:t,children:n}),a?s.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,s.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx(xO,{value:o,guildEmojis:M,size:"lg"})}),s.jsxs("div",{className:"flex shrink-0 gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",size:"sm",disabled:l,onClick:()=>m(!0),children:"Choose emoji"}),_?s.jsx(ue,{type:"button",variant:"ghost",size:"sm",disabled:l,onClick:X,children:"Clear"}):null]})]}),s.jsx(Qs,{open:d,onOpenChange:m,children:s.jsxs(hs,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[s.jsxs(gs,{className:"space-y-1 border-b border-border px-5 py-4",children:[s.jsx(xs,{children:"Choose emoji"}),s.jsxs(bs,{children:["Server emojis save as"," ",s.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),s.jsxs(DS,{value:p,onValueChange:I=>g(I),className:"flex min-h-0 flex-1 flex-col",children:[s.jsxs(xx,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[s.jsx(Ys,{value:"server",children:"Server"}),s.jsx(Ys,{value:"unicode",children:"All emojis"})]}),s.jsxs($h,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[s.jsxs("div",{className:"relative mb-3",children:[s.jsx(xe,{icon:vi,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(_e,{placeholder:"Search by name…",value:N,onChange:I=>E(I.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),b?s.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[b.guildName," · ",M.length," custom emoji",M.length===1?"":"s"]}):null,s.jsx(fc,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:C?s.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((I,H)=>s.jsx(Ue,{className:"aspect-square rounded-lg"},H))}):w?s.jsxs("div",{className:"space-y-3 p-4 text-center",children:[s.jsx("p",{className:"text-sm text-destructive",children:w}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>void T(!0),children:"Retry"})]}):k.length===0?s.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:M.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):s.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:k.map(I=>{const H=R.kind==="custom"&&R.id===I.id;return s.jsx("button",{type:"button",title:`:${I.name}:`,className:pe("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",H&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>ne(I),children:s.jsx("img",{src:I.url??e5(I.id,I.animated),alt:I.name,className:"size-8 object-contain",loading:"lazy"})},I.id)})})})]}),s.jsx($h,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:s.jsx(pO,{onPick:L})})]})]})}),s.jsx(_e,{value:_,disabled:l,onChange:I=>c(I.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const F0="BOT_TOKEN",vO="MODEL_API_KEY";function pd({field:t,value:n,onChange:a,readOnly:o}){const c=t.path.replace(/\./g,"-");if(t.type==="googleFont")return s.jsx(S_,{field:t,value:n,onChange:a,readOnly:o});if(t.type==="boolean")return s.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[s.jsxs("div",{children:[s.jsx(Ae,{htmlFor:c,className:"font-medium",children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null]}),s.jsx(Mt,{id:c,checked:!!n,disabled:o,onCheckedChange:a})]});if(t.type==="stringList")return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(w_,{value:Array.isArray(n)?n:[],onChange:a})]});if(t.type==="select"&&t.options)return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),s.jsxs(Ca,{value:String(n??""),disabled:o,onValueChange:a,children:[s.jsx(Hr,{id:c,className:"border-border bg-secondary/30",children:s.jsx(Sa,{placeholder:"Select…"})}),s.jsx(Gr,{children:t.options.map(d=>s.jsx(Et,{value:d.value,children:d.label},d.value))})]})]});if(t.type==="color"){const d=$r(String(n??"#000000"));return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsxs("div",{className:"flex gap-2",children:[s.jsx(tf,{value:d,onChange:a}),s.jsx(_e,{id:c,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a($r(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(t.type==="emoji")return s.jsx(bO,{id:c,label:t.label,description:t.description,value:n,onChange:a,readOnly:o});if(t.type==="discordChannel"||t.type==="discordRole"||t.type==="discordCategory"){const d=t.type==="discordRole"?"role":t.type==="discordCategory"?"category":"channel";return s.jsx(TS,{id:c,label:t.label,description:t.description,kind:d,value:n,onChange:a,readOnly:o})}if(t.type==="secret"){const d=n===F0||n===vO||!n?"":"••••••••••••";return s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(_e,{id:c,type:"password",value:d,disabled:o,placeholder:t.placeholder??"Unchanged if empty",onChange:m=>{const p=m.target.value;a(p||(t.placeholder??F0))},className:"border-border bg-secondary/30"})]})}const l="border-border bg-secondary/30";return t.type==="textarea"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),s.jsx(Jd,{id:c,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${l}`})]}):s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:c,children:t.label}),t.description?s.jsx("p",{className:"text-xs text-muted-foreground",children:t.description}):null,s.jsx(_e,{id:c,type:t.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(t.type==="number"?Number(d.target.value):d.target.value),placeholder:t.placeholder??(t.type==="discordId"?"Discord snowflake ID":void 0),className:l})]})}const Je=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("rounded-xl border border-border bg-card text-card-foreground shadow-none",t),...n}));Je.displayName="Card";const dt=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex flex-col space-y-1.5 p-6",t),...n}));dt.displayName="CardHeader";const ft=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("font-semibold leading-none tracking-tight",t),...n}));ft.displayName="CardTitle";const Ot=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("text-sm text-muted-foreground",t),...n}));Ot.displayName="CardDescription";const et=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("p-6 pt-0",t),...n}));et.displayName="CardContent";const Sx=f.forwardRef(({className:t,...n},a)=>s.jsx("div",{ref:a,className:pe("flex items-center p-6 pt-0",t),...n}));Sx.displayName="CardFooter";function Y0(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function yO(t,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=t.toLowerCase();return/prefix/.test(a)?"text":/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function Nx(t,n=""){const a=[];for(const[o,c]of Object.entries(t)){const l=n?`${n}.${o}`:o;if(Array.isArray(c)){if(c.length>0&&typeof c[0]=="object"&&c[0]!==null&&!Array.isArray(c[0]))continue;a.push({path:l,label:Y0(o),type:"stringList"});continue}if(c&&typeof c=="object"&&Object.keys(c).length>0){a.push(...Nx(c,l));continue}a.push({path:l,label:Y0(o),type:yO(o,c)})}return a}function wO(t){const n=Nx(t);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function kr(t,n){const a=n.split(".");let o=t;for(const c of a){if(o==null||typeof o!="object")return;o=o[c]}return o}function Gn(t,n,a){const o=n.split("."),c=structuredClone(t);let l=c;for(let d=0;d{switch(t){case"success":return NO;case"info":return kO;case"warning":return EO;case"error":return TO;default:return null}},CO=Array(12).fill(0),SO=({visible:t,className:n})=>ve.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":t},ve.createElement("div",{className:"sonner-spinner"},CO.map((a,o)=>ve.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),NO=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),EO=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),kO=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),TO=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),MO=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ve.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ve.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),RO=()=>{let[t,n]=ve.useState(document.hidden);return ve.useEffect(()=>{let a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),t},qh=1,AO=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let n=this.subscribers.indexOf(t);this.subscribers.splice(n,1)}),this.publish=t=>{this.subscribers.forEach(n=>n(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var n;let{message:a,...o}=t,c=typeof(t==null?void 0:t.id)=="number"||((n=t.id)==null?void 0:n.length)>0?t.id:qh++,l=this.toasts.find(m=>m.id===c),d=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(c)&&this.dismissedToasts.delete(c),l?this.toasts=this.toasts.map(m=>m.id===c?(this.publish({...m,...t,id:c,title:a}),{...m,...t,id:c,dismissible:d,title:a}):m):this.addToast({title:a,...o,dismissible:d,id:c}),c},this.dismiss=t=>(this.dismissedToasts.add(t),t||this.toasts.forEach(n=>{this.subscribers.forEach(a=>a({id:n.id,dismiss:!0}))}),this.subscribers.forEach(n=>n({id:t,dismiss:!0})),t),this.message=(t,n)=>this.create({...n,message:t}),this.error=(t,n)=>this.create({...n,message:t,type:"error"}),this.success=(t,n)=>this.create({...n,type:"success",message:t}),this.info=(t,n)=>this.create({...n,type:"info",message:t}),this.warning=(t,n)=>this.create({...n,type:"warning",message:t}),this.loading=(t,n)=>this.create({...n,type:"loading",message:t}),this.promise=(t,n)=>{if(!n)return;let a;n.loading!==void 0&&(a=this.create({...n,promise:t,type:"loading",message:n.loading,description:typeof n.description!="function"?n.description:void 0}));let o=t instanceof Promise?t:t(),c=a!==void 0,l,d=o.then(async p=>{if(l=["resolve",p],ve.isValidElement(p))c=!1,this.create({id:a,type:"default",message:p});else if(DO(p)&&!p.ok){c=!1;let g=typeof n.error=="function"?await n.error(`HTTP error! status: ${p.status}`):n.error,b=typeof n.description=="function"?await n.description(`HTTP error! status: ${p.status}`):n.description;this.create({id:a,type:"error",message:g,description:b})}else if(n.success!==void 0){c=!1;let g=typeof n.success=="function"?await n.success(p):n.success,b=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"success",message:g,description:b})}}).catch(async p=>{if(l=["reject",p],n.error!==void 0){c=!1;let g=typeof n.error=="function"?await n.error(p):n.error,b=typeof n.description=="function"?await n.description(p):n.description;this.create({id:a,type:"error",message:g,description:b})}}).finally(()=>{var p;c&&(this.dismiss(a),a=void 0),(p=n.finally)==null||p.call(n)}),m=()=>new Promise((p,g)=>d.then(()=>l[0]==="reject"?g(l[1]):p(l[1])).catch(g));return typeof a!="string"&&typeof a!="number"?{unwrap:m}:Object.assign(a,{unwrap:m})},this.custom=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return this.create({jsx:t(a),id:a,...n}),a},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Mn=new AO,_O=(t,n)=>{let a=(n==null?void 0:n.id)||qh++;return Mn.addToast({title:t,...n,id:a}),a},DO=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",OO=_O,LO=()=>Mn.toasts,zO=()=>Mn.getActiveToasts(),Dt=Object.assign(OO,{success:Mn.success,info:Mn.info,warning:Mn.warning,error:Mn.error,custom:Mn.custom,message:Mn.message,promise:Mn.promise,dismiss:Mn.dismiss,loading:Mn.loading},{getHistory:LO,getToasts:zO});function PO(t,{insertAt:n}={}){if(typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}PO(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} +`);function Hu(t){return t.label!==void 0}var IO=3,UO="32px",BO="16px",q0=4e3,$O=356,HO=14,GO=20,VO=200;function jr(...t){return t.filter(Boolean).join(" ")}function FO(t){let[n,a]=t.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}var YO=t=>{var n,a,o,c,l,d,m,p,g,b,v;let{invert:w,toast:y,unstyled:C,interacting:S,setHeights:N,visibleToasts:E,heights:T,index:M,toasts:k,expanded:_,removeToast:R,defaultRichColors:L,closeButton:ne,style:X,cancelButtonStyle:I,actionButtonStyle:H,className:q="",descriptionClassName:ce="",duration:de,position:se,gap:P,loadingIcon:W,expandByDefault:oe,classNames:ae,icons:G,closeButtonAriaLabel:O="Close toast",pauseWhenPageIsHidden:D}=t,[B,V]=ve.useState(null),[Z,be]=ve.useState(null),[K,ge]=ve.useState(!1),[me,$]=ve.useState(!1),[ie,ye]=ve.useState(!1),[Se,Be]=ve.useState(!1),[Ke,We]=ve.useState(!1),[qt,vn]=ve.useState(0),[Xn,br]=ve.useState(0),yn=ve.useRef(y.duration||de||q0),wn=ve.useRef(null),Zn=ve.useRef(null),Kt=M===0,po=M+1<=E,Pt=y.type,Qn=y.dismissible!==!1,Da=y.className||"",Es=y.descriptionClassName||"",qr=ve.useMemo(()=>T.findIndex(De=>De.toastId===y.id)||0,[T,y.id]),ho=ve.useMemo(()=>{var De;return(De=y.closeButton)!=null?De:ne},[y.closeButton,ne]),Kr=ve.useMemo(()=>y.duration||de||q0,[y.duration,de]),Dn=ve.useRef(0),yt=ve.useRef(0),On=ve.useRef(0),Rt=ve.useRef(null),[Ai,_i]=se.split("-"),go=ve.useMemo(()=>T.reduce((De,rt,lt)=>lt>=qr?De:De+rt.height,0),[T,qr]),Wr=RO(),Oa=y.invert||w,Ar=Pt==="loading";yt.current=ve.useMemo(()=>qr*P+go,[qr,go]),ve.useEffect(()=>{yn.current=Kr},[Kr]),ve.useEffect(()=>{ge(!0)},[]),ve.useEffect(()=>{let De=Zn.current;if(De){let rt=De.getBoundingClientRect().height;return br(rt),N(lt=>[{toastId:y.id,height:rt,position:y.position},...lt]),()=>N(lt=>lt.filter(rn=>rn.toastId!==y.id))}},[N,y.id]),ve.useLayoutEffect(()=>{if(!K)return;let De=Zn.current,rt=De.style.height;De.style.height="auto";let lt=De.getBoundingClientRect().height;De.style.height=rt,br(lt),N(rn=>rn.find(It=>It.toastId===y.id)?rn.map(It=>It.toastId===y.id?{...It,height:lt}:It):[{toastId:y.id,height:lt,position:y.position},...rn])},[K,y.title,y.description,N,y.id]);let Wt=ve.useCallback(()=>{$(!0),vn(yt.current),N(De=>De.filter(rt=>rt.toastId!==y.id)),setTimeout(()=>{R(y)},VO)},[y,R,N,yt]);ve.useEffect(()=>{if(y.promise&&Pt==="loading"||y.duration===1/0||y.type==="loading")return;let De;return _||S||D&&Wr?(()=>{if(On.current{var rt;(rt=y.onAutoClose)==null||rt.call(y,y),Wt()},yn.current)),()=>clearTimeout(De)},[_,S,y,Pt,D,Wr,Wt]),ve.useEffect(()=>{y.delete&&Wt()},[Wt,y.delete]);function La(){var De,rt,lt;return G!=null&&G.loading?ve.createElement("div",{className:jr(ae==null?void 0:ae.loader,(De=y==null?void 0:y.classNames)==null?void 0:De.loader,"sonner-loader"),"data-visible":Pt==="loading"},G.loading):W?ve.createElement("div",{className:jr(ae==null?void 0:ae.loader,(rt=y==null?void 0:y.classNames)==null?void 0:rt.loader,"sonner-loader"),"data-visible":Pt==="loading"},W):ve.createElement(SO,{className:jr(ae==null?void 0:ae.loader,(lt=y==null?void 0:y.classNames)==null?void 0:lt.loader),visible:Pt==="loading"})}return ve.createElement("li",{tabIndex:0,ref:Zn,className:jr(q,Da,ae==null?void 0:ae.toast,(n=y==null?void 0:y.classNames)==null?void 0:n.toast,ae==null?void 0:ae.default,ae==null?void 0:ae[Pt],(a=y==null?void 0:y.classNames)==null?void 0:a[Pt]),"data-sonner-toast":"","data-rich-colors":(o=y.richColors)!=null?o:L,"data-styled":!(y.jsx||y.unstyled||C),"data-mounted":K,"data-promise":!!y.promise,"data-swiped":Ke,"data-removed":me,"data-visible":po,"data-y-position":Ai,"data-x-position":_i,"data-index":M,"data-front":Kt,"data-swiping":ie,"data-dismissible":Qn,"data-type":Pt,"data-invert":Oa,"data-swipe-out":Se,"data-swipe-direction":Z,"data-expanded":!!(_||oe&&K),style:{"--index":M,"--toasts-before":M,"--z-index":k.length-M,"--offset":`${me?qt:yt.current}px`,"--initial-height":oe?"auto":`${Xn}px`,...X,...y.style},onDragEnd:()=>{ye(!1),V(null),Rt.current=null},onPointerDown:De=>{Ar||!Qn||(wn.current=new Date,vn(yt.current),De.target.setPointerCapture(De.pointerId),De.target.tagName!=="BUTTON"&&(ye(!0),Rt.current={x:De.clientX,y:De.clientY}))},onPointerUp:()=>{var De,rt,lt,rn;if(Se||!Qn)return;Rt.current=null;let It=Number(((De=Zn.current)==null?void 0:De.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Jn=Number(((rt=Zn.current)==null?void 0:rt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),er=new Date().getTime()-((lt=wn.current)==null?void 0:lt.getTime()),bt=B==="x"?It:Jn,Ln=Math.abs(bt)/er;if(Math.abs(bt)>=GO||Ln>.11){vn(yt.current),(rn=y.onDismiss)==null||rn.call(y,y),be(B==="x"?It>0?"right":"left":Jn>0?"down":"up"),Wt(),Be(!0),We(!1);return}ye(!1),V(null)},onPointerMove:De=>{var rt,lt,rn,It;if(!Rt.current||!Qn||((rt=window.getSelection())==null?void 0:rt.toString().length)>0)return;let Jn=De.clientY-Rt.current.y,er=De.clientX-Rt.current.x,bt=(lt=t.swipeDirections)!=null?lt:FO(se);!B&&(Math.abs(er)>1||Math.abs(Jn)>1)&&V(Math.abs(er)>Math.abs(Jn)?"x":"y");let Ln={x:0,y:0};B==="y"?(bt.includes("top")||bt.includes("bottom"))&&(bt.includes("top")&&Jn<0||bt.includes("bottom")&&Jn>0)&&(Ln.y=Jn):B==="x"&&(bt.includes("left")||bt.includes("right"))&&(bt.includes("left")&&er<0||bt.includes("right")&&er>0)&&(Ln.x=er),(Math.abs(Ln.x)>0||Math.abs(Ln.y)>0)&&We(!0),(rn=Zn.current)==null||rn.style.setProperty("--swipe-amount-x",`${Ln.x}px`),(It=Zn.current)==null||It.style.setProperty("--swipe-amount-y",`${Ln.y}px`)}},ho&&!y.jsx?ve.createElement("button",{"aria-label":O,"data-disabled":Ar,"data-close-button":!0,onClick:Ar||!Qn?()=>{}:()=>{var De;Wt(),(De=y.onDismiss)==null||De.call(y,y)},className:jr(ae==null?void 0:ae.closeButton,(c=y==null?void 0:y.classNames)==null?void 0:c.closeButton)},(l=G==null?void 0:G.close)!=null?l:MO):null,y.jsx||f.isValidElement(y.title)?y.jsx?y.jsx:typeof y.title=="function"?y.title():y.title:ve.createElement(ve.Fragment,null,Pt||y.icon||y.promise?ve.createElement("div",{"data-icon":"",className:jr(ae==null?void 0:ae.icon,(d=y==null?void 0:y.classNames)==null?void 0:d.icon)},y.promise||y.type==="loading"&&!y.icon?y.icon||La():null,y.type!=="loading"?y.icon||(G==null?void 0:G[Pt])||jO(Pt):null):null,ve.createElement("div",{"data-content":"",className:jr(ae==null?void 0:ae.content,(m=y==null?void 0:y.classNames)==null?void 0:m.content)},ve.createElement("div",{"data-title":"",className:jr(ae==null?void 0:ae.title,(p=y==null?void 0:y.classNames)==null?void 0:p.title)},typeof y.title=="function"?y.title():y.title),y.description?ve.createElement("div",{"data-description":"",className:jr(ce,Es,ae==null?void 0:ae.description,(g=y==null?void 0:y.classNames)==null?void 0:g.description)},typeof y.description=="function"?y.description():y.description):null),f.isValidElement(y.cancel)?y.cancel:y.cancel&&Hu(y.cancel)?ve.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||I,onClick:De=>{var rt,lt;Hu(y.cancel)&&Qn&&((lt=(rt=y.cancel).onClick)==null||lt.call(rt,De),Wt())},className:jr(ae==null?void 0:ae.cancelButton,(b=y==null?void 0:y.classNames)==null?void 0:b.cancelButton)},y.cancel.label):null,f.isValidElement(y.action)?y.action:y.action&&Hu(y.action)?ve.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||H,onClick:De=>{var rt,lt;Hu(y.action)&&((lt=(rt=y.action).onClick)==null||lt.call(rt,De),!De.defaultPrevented&&Wt())},className:jr(ae==null?void 0:ae.actionButton,(v=y==null?void 0:y.classNames)==null?void 0:v.actionButton)},y.action.label):null))};function K0(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}function qO(t,n){let a={};return[t,n].forEach((o,c)=>{let l=c===1,d=l?"--mobile-offset":"--offset",m=l?BO:UO;function p(g){["top","right","bottom","left"].forEach(b=>{a[`${d}-${b}`]=typeof g=="number"?`${g}px`:g})}typeof o=="number"||typeof o=="string"?p(o):typeof o=="object"?["top","right","bottom","left"].forEach(g=>{o[g]===void 0?a[`${d}-${g}`]=m:a[`${d}-${g}`]=typeof o[g]=="number"?`${o[g]}px`:o[g]}):p(m)}),a}var KO=f.forwardRef(function(t,n){let{invert:a,position:o="bottom-right",hotkey:c=["altKey","KeyT"],expand:l,closeButton:d,className:m,offset:p,mobileOffset:g,theme:b="light",richColors:v,duration:w,style:y,visibleToasts:C=IO,toastOptions:S,dir:N=K0(),gap:E=HO,loadingIcon:T,icons:M,containerAriaLabel:k="Notifications",pauseWhenPageIsHidden:_}=t,[R,L]=ve.useState([]),ne=ve.useMemo(()=>Array.from(new Set([o].concat(R.filter(D=>D.position).map(D=>D.position)))),[R,o]),[X,I]=ve.useState([]),[H,q]=ve.useState(!1),[ce,de]=ve.useState(!1),[se,P]=ve.useState(b!=="system"?b:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),W=ve.useRef(null),oe=c.join("+").replace(/Key/g,"").replace(/Digit/g,""),ae=ve.useRef(null),G=ve.useRef(!1),O=ve.useCallback(D=>{L(B=>{var V;return(V=B.find(Z=>Z.id===D.id))!=null&&V.delete||Mn.dismiss(D.id),B.filter(({id:Z})=>Z!==D.id)})},[]);return ve.useEffect(()=>Mn.subscribe(D=>{if(D.dismiss){L(B=>B.map(V=>V.id===D.id?{...V,delete:!0}:V));return}setTimeout(()=>{m8.flushSync(()=>{L(B=>{let V=B.findIndex(Z=>Z.id===D.id);return V!==-1?[...B.slice(0,V),{...B[V],...D},...B.slice(V+1)]:[D,...B]})})})}),[]),ve.useEffect(()=>{if(b!=="system"){P(b);return}if(b==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?P("dark"):P("light")),typeof window>"u")return;let D=window.matchMedia("(prefers-color-scheme: dark)");try{D.addEventListener("change",({matches:B})=>{P(B?"dark":"light")})}catch{D.addListener(({matches:V})=>{try{P(V?"dark":"light")}catch(Z){console.error(Z)}})}},[b]),ve.useEffect(()=>{R.length<=1&&q(!1)},[R]),ve.useEffect(()=>{let D=B=>{var V,Z;c.every(be=>B[be]||B.code===be)&&(q(!0),(V=W.current)==null||V.focus()),B.code==="Escape"&&(document.activeElement===W.current||(Z=W.current)!=null&&Z.contains(document.activeElement))&&q(!1)};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[c]),ve.useEffect(()=>{if(W.current)return()=>{ae.current&&(ae.current.focus({preventScroll:!0}),ae.current=null,G.current=!1)}},[W.current]),ve.createElement("section",{ref:n,"aria-label":`${k} ${oe}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},ne.map((D,B)=>{var V;let[Z,be]=D.split("-");return R.length?ve.createElement("ol",{key:D,dir:N==="auto"?K0():N,tabIndex:-1,ref:W,className:m,"data-sonner-toaster":!0,"data-theme":se,"data-y-position":Z,"data-lifted":H&&R.length>1&&!l,"data-x-position":be,style:{"--front-toast-height":`${((V=X[0])==null?void 0:V.height)||0}px`,"--width":`${$O}px`,"--gap":`${E}px`,...y,...qO(p,g)},onBlur:K=>{G.current&&!K.currentTarget.contains(K.relatedTarget)&&(G.current=!1,ae.current&&(ae.current.focus({preventScroll:!0}),ae.current=null))},onFocus:K=>{K.target instanceof HTMLElement&&K.target.dataset.dismissible==="false"||G.current||(G.current=!0,ae.current=K.relatedTarget)},onMouseEnter:()=>q(!0),onMouseMove:()=>q(!0),onMouseLeave:()=>{ce||q(!1)},onDragEnd:()=>q(!1),onPointerDown:K=>{K.target instanceof HTMLElement&&K.target.dataset.dismissible==="false"||de(!0)},onPointerUp:()=>de(!1)},R.filter(K=>!K.position&&B===0||K.position===D).map((K,ge)=>{var me,$;return ve.createElement(YO,{key:K.id,icons:M,index:ge,toast:K,defaultRichColors:v,duration:(me=S==null?void 0:S.duration)!=null?me:w,className:S==null?void 0:S.className,descriptionClassName:S==null?void 0:S.descriptionClassName,invert:a,visibleToasts:C,closeButton:($=S==null?void 0:S.closeButton)!=null?$:d,interacting:ce,position:D,style:S==null?void 0:S.style,unstyled:S==null?void 0:S.unstyled,classNames:S==null?void 0:S.classNames,cancelButtonStyle:S==null?void 0:S.cancelButtonStyle,actionButtonStyle:S==null?void 0:S.actionButtonStyle,removeToast:O,toasts:R.filter(ie=>ie.position==K.position),heights:X.filter(ie=>ie.position==K.position),setHeights:I,expandByDefault:l,gap:E,loadingIcon:T,expanded:H,pauseWhenPageIsHidden:_,swipeDirections:t.swipeDirections})})):null}))});async function nd(t){const n=Dt.loading("Saving changes…");try{const a=await t();if(Dt.success("Changes saved",{id:n}),a.botRestart){const o=Dt.loading("Restarting bot…");a.botRestart.success?Dt.success("Bot started",{id:o}):Dt.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw Dt.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function WO({filename:t}){const{canEditConfig:n}=Yt(),a=!n("supportbot"),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,b]=f.useState(!1),[v,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{p(!0),w(""),C("");try{const _=(await Ne.getAddonConfigJson(t)).data??{};c(_),d(structuredClone(_))}catch(k){w(k instanceof Error?k.message:"Failed to load config")}finally{p(!1)}},[t]);f.useEffect(()=>{S()},[S]);const N=o?wO(o):null;function E(k,_){c(R=>R&&Gn(R,k,_))}async function T(){if(!(a||!o)){b(!0),w(""),C("");try{const k=await nd(()=>Ne.saveAddonConfig(t,o));C(k.message||"Saved."),await S()}catch(k){w(k instanceof Error?k.message:"Save failed")}finally{b(!1)}}}if(m)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Ue,{className:"h-24 w-full rounded-xl"}),s.jsx(Ue,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:v||"Failed to load"})});const M=l&&JSON.stringify(o)!==JSON.stringify(l);return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[M?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:S,disabled:m||g,children:"Reload"}),a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:T,disabled:g||!M,children:[s.jsx(xe,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save"]})]}),v?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(xe,{icon:ig,size:18}),s.jsx(qe,{children:v})]}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,N.map(k=>s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"pb-3",children:[s.jsx(ft,{className:"text-base",children:k.title}),k.description?s.jsx(Ot,{children:k.description}):null]}),s.jsx(et,{className:"grid gap-4 sm:grid-cols-2",children:k.fields.map(_=>s.jsx("div",{className:_.type==="textarea"||_.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:_,value:kr(o,_.path),readOnly:a,onChange:R=>E(_.path,R)})},_.path))})]},k.title))]})}function XO(t){return t.startsWith("Ticket.DepartmentSystem.")?"Ticket Departments":t.startsWith("Ticket.PrioritySystem.")?"Ticket Priorities":t.startsWith("Ticket.")?"Tickets":(t.split(".")[0]??"Other").replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,a=>a.toUpperCase())}function ZO(t,n){const a=new Set(t.flatMap(d=>d.fields.map(m=>m.path))),o=Nx(n).filter(d=>!a.has(d.path));if(o.length===0)return t;const c=t.map(d=>({...d,fields:[...d.fields]})),l=new Map;for(const d of o){const m=XO(d.path),p=l.get(m)??[];p.push(d),l.set(m,p)}for(const[d,m]of l.entries()){const p=c.find(g=>g.title.toLowerCase()===d.toLowerCase());p?p.fields.push(...m):c.push({title:d,description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((g,b)=>g.path.localeCompare(b.path))})}return c}function W0(t,n){(n==null||n>t.length)&&(n=t.length);for(var a=0,o=Array(n);a=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p1&&arguments[1]!==void 0?arguments[1]:{};Gu.initial(t),Gu.handler(n);var a={current:t},o=Al(wL)(a,n),c=Al(yL)(a),l=Al(Gu.changes)(t),d=Al(vL)(a);function m(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(b){return b};return Gu.selector(g),g(a.current)}function p(g){cL(o,c,l,d)(g)}return[m,p]}function vL(t,n){return Ql(n)?n(t.current):n}function yL(t,n){return t.current=J0(J0({},t.current),n),n}function wL(t,n,a){return Ql(n)?n(t.current):Object.keys(a).forEach(function(o){var c;return(c=n[o])===null||c===void 0?void 0:c.call(n,t.current[o])}),a}var jL={create:bL},CL={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function SL(t){return function n(){for(var a=this,o=arguments.length,c=new Array(o),l=0;l=t.length?t.apply(this,c):function(){for(var d=arguments.length,m=new Array(d),p=0;p{o.current=!1}:t,n)}var Yn=XL;function zl(){}function li(t,n,a,o){return ZL(t,o)||QL(t,n,a,o)}function ZL(t,n){return t.editor.getModel(l5(t,n))}function QL(t,n,a,o){return t.editor.createModel(n,a,o?l5(t,o):void 0)}function l5(t,n){return t.Uri.parse(n)}function JL({original:t,modified:n,language:a,originalLanguage:o,modifiedLanguage:c,originalModelPath:l,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:g="light",loading:v="Loading...",options:b={},height:w="100%",width:y="100%",className:C,wrapperProps:S={},beforeMount:E=zl,onMount:k=zl}){let[N,T]=f.useState(!1),[M,_]=f.useState(!0),R=f.useRef(null),L=f.useRef(null),te=f.useRef(null),K=f.useRef(k),I=f.useRef(E),G=f.useRef(!1);i5(()=>{let se=s5.init();return se.then(P=>(L.current=P)&&_(!1)).catch(P=>(P==null?void 0:P.type)!=="cancelation"&&console.error("Monaco initialization: error:",P)),()=>R.current?fe():se.cancel()}),Yn(()=>{if(R.current&&L.current){let se=R.current.getOriginalEditor(),P=li(L.current,t||"",o||a||"text",l||"");P!==se.getModel()&&se.setModel(P)}},[l],N),Yn(()=>{if(R.current&&L.current){let se=R.current.getModifiedEditor(),P=li(L.current,n||"",c||a||"text",d||"");P!==se.getModel()&&se.setModel(P)}},[d],N),Yn(()=>{let se=R.current.getModifiedEditor();se.getOption(L.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],N),Yn(()=>{var se,P;(P=(se=R.current)==null?void 0:se.getModel())==null||P.original.setValue(t||"")},[t],N),Yn(()=>{let{original:se,modified:P}=R.current.getModel();L.current.editor.setModelLanguage(se,o||a||"text"),L.current.editor.setModelLanguage(P,c||a||"text")},[a,o,c],N),Yn(()=>{var se;(se=L.current)==null||se.editor.setTheme(g)},[g],N),Yn(()=>{var se;(se=R.current)==null||se.updateOptions(b)},[b],N);let Y=f.useCallback(()=>{var Z;if(!L.current)return;I.current(L.current);let se=li(L.current,t||"",o||a||"text",l||""),P=li(L.current,n||"",c||a||"text",d||"");(Z=R.current)==null||Z.setModel({original:se,modified:P})},[a,n,c,t,o,l,d]),ce=f.useCallback(()=>{var se;!G.current&&te.current&&(R.current=L.current.editor.createDiffEditor(te.current,{automaticLayout:!0,...b}),Y(),(se=L.current)==null||se.editor.setTheme(g),T(!0),G.current=!0)},[b,g,Y]);f.useEffect(()=>{N&&K.current(R.current,L.current)},[N]),f.useEffect(()=>{!M&&!N&&ce()},[M,N,ce]);function fe(){var P,Z,ae,re;let se=(P=R.current)==null?void 0:P.getModel();m||((Z=se==null?void 0:se.original)==null||Z.dispose()),p||((ae=se==null?void 0:se.modified)==null||ae.dispose()),(re=R.current)==null||re.dispose()}return be.createElement(o5,{width:y,height:w,isEditorReady:N,loading:v,_ref:te,className:C,wrapperProps:S})}var ez=JL;f.memo(ez);function tz(t){let n=f.useRef();return f.useEffect(()=>{n.current=t},[t]),n.current}var nz=tz,Vu=new Map;function rz({defaultValue:t,defaultLanguage:n,defaultPath:a,value:o,language:c,path:l,theme:d="light",line:m,loading:p="Loading...",options:g={},overrideServices:v={},saveViewState:b=!0,keepCurrentModel:w=!1,width:y="100%",height:C="100%",className:S,wrapperProps:E={},beforeMount:k=zl,onMount:N=zl,onChange:T,onValidate:M=zl}){let[_,R]=f.useState(!1),[L,te]=f.useState(!0),K=f.useRef(null),I=f.useRef(null),G=f.useRef(null),Y=f.useRef(N),ce=f.useRef(k),fe=f.useRef(),se=f.useRef(o),P=nz(l),Z=f.useRef(!1),ae=f.useRef(!1);i5(()=>{let O=s5.init();return O.then(D=>(K.current=D)&&te(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>I.current?V():O.cancel()}),Yn(()=>{var D,$,H,X;let O=li(K.current,t||o||"",n||c||"",l||a||"");O!==((D=I.current)==null?void 0:D.getModel())&&(b&&Vu.set(P,($=I.current)==null?void 0:$.saveViewState()),(H=I.current)==null||H.setModel(O),b&&((X=I.current)==null||X.restoreViewState(Vu.get(l))))},[l],_),Yn(()=>{var O;(O=I.current)==null||O.updateOptions(g)},[g],_),Yn(()=>{!I.current||o===void 0||(I.current.getOption(K.current.editor.EditorOption.readOnly)?I.current.setValue(o):o!==I.current.getValue()&&(ae.current=!0,I.current.executeEdits("",[{range:I.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),I.current.pushUndoStop(),ae.current=!1))},[o],_),Yn(()=>{var D,$;let O=(D=I.current)==null?void 0:D.getModel();O&&c&&(($=K.current)==null||$.editor.setModelLanguage(O,c))},[c],_),Yn(()=>{var O;m!==void 0&&((O=I.current)==null||O.revealLine(m))},[m],_),Yn(()=>{var O;(O=K.current)==null||O.editor.setTheme(d)},[d],_);let re=f.useCallback(()=>{var O;if(!(!G.current||!K.current)&&!Z.current){ce.current(K.current);let D=l||a,$=li(K.current,o||t||"",n||c||"",D||"");I.current=(O=K.current)==null?void 0:O.editor.create(G.current,{model:$,automaticLayout:!0,...g},v),b&&I.current.restoreViewState(Vu.get(D)),K.current.editor.setTheme(d),m!==void 0&&I.current.revealLine(m),R(!0),Z.current=!0}},[t,n,a,o,c,l,g,v,b,d,m]);f.useEffect(()=>{_&&Y.current(I.current,K.current)},[_]),f.useEffect(()=>{!L&&!_&&re()},[L,_,re]),se.current=o,f.useEffect(()=>{var O,D;_&&T&&((O=fe.current)==null||O.dispose(),fe.current=(D=I.current)==null?void 0:D.onDidChangeModelContent($=>{ae.current||T(I.current.getValue(),$)}))},[_,T]),f.useEffect(()=>{if(_){let O=K.current.editor.onDidChangeMarkers(D=>{var H;let $=(H=I.current.getModel())==null?void 0:H.uri;if($&&D.find(X=>X.path===$.path)){let X=K.current.editor.getModelMarkers({resource:$});M==null||M(X)}});return()=>{O==null||O.dispose()}}return()=>{}},[_,M]);function V(){var O,D;(O=fe.current)==null||O.dispose(),w?b&&Vu.set(l,I.current.saveViewState()):(D=I.current.getModel())==null||D.dispose(),I.current.dispose()}return be.createElement(o5,{width:y,height:C,isEditorReady:_,loading:p,_ref:G,className:S,wrapperProps:E})}var az=rz,sz=f.memo(az),oz=sz;function iz(t){return t!==null&&typeof t=="object"&&"Command"in t}function lz(t){return Object.entries(t).filter(([,n])=>iz(n)).map(([n,a])=>({key:n,...a}))}function cz({data:t,onChange:n}){const a=lz(t);function o(c,l){const d=t[c];n({...t,[c]:{...d,...l}})}return a.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(c=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(ve,{icon:ds,size:18})}),s.jsx(dt,{className:"text-base",children:c.key})]}),s.jsxs(Qe,{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(_e,{htmlFor:`${c.key}-enabled`,children:"Enabled"}),s.jsx(kt,{id:`${c.key}-enabled`,checked:c.Enabled!==!1,onCheckedChange:l=>o(c.key,{Enabled:l})})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{children:"Slash command"}),s.jsx(De,{value:c.Command??"",onChange:l=>o(c.key,{Command:l.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{children:"Description"}),s.jsx(De,{value:c.Description??"",onChange:l=>o(c.key,{Description:l.target.value}),className:"border-border bg-secondary/30"})]})]})]},c.key))})}function uz(t,n){let a=structuredClone(n);if(t==="supportbot"){const o=Fr(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Gn(a,"General.Token","BOT_TOKEN"))}if(t==="supportbot-ai"){const o=Fr(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Gn(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function dz(t,n,a,o){const c={};for(const l of n)for(const d of l.fields){const m=Fr(a,d.path),p=Fr(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(c[`${t}:${d.path}`]=m)}return c}function fz(t,n){const a=new Map,o=[];for(const l of t){const d=l.path.split(".");if(d.length>=5&&d[1]==="DepartmentSystem"&&d[2]==="Departments"){const m=d[3],p=a.get(m)??[];p.push(l),a.set(m,p)}else if(d.length>=3){const m=d[1],p=a.get(m)??[];p.push(l),a.set(m,p)}else o.push(l)}if(a.size===0)return{standalone:t,groups:[]};const c=[...a.entries()].map(([l,d])=>{const m=["enabled","name","description","emoji","category","role","channelprefix","defaultpriority","questions"];d.sort((v,b)=>{var E,k;const w=((E=v.path.split(".").pop())==null?void 0:E.toLowerCase())||"",y=((k=b.path.split(".").pop())==null?void 0:k.toLowerCase())||"",C=m.indexOf(w),S=m.indexOf(y);return C!==-1&&S!==-1?C-S:C!==-1?-1:S!==-1?1:w.localeCompare(y)});const p=d.find(v=>v.path.toLowerCase().endsWith(".name")||v.path.toLowerCase().endsWith(".title"));let g="";if(p&&n){const v=Fr(n,p.path);typeof v=="string"&&v.trim()&&(g=v.trim())}return g||(g=l.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,v=>v.toUpperCase())),{key:l,name:g,fields:d}});return{standalone:o,groups:c}}function mz({configFile:t}){const{permissions:n,canEditConfig:a}=qt(),o=Mn(n,"configs.raw_yaml"),c=!a(t),[l,d]=f.useState(null),[m,p]=f.useState(null),[g,v]=f.useState(!0),[b,w]=f.useState(!1),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState("visual");f.useEffect(()=>{!o&&k==="yaml"&&N("visual")},[o,k]);const[T,M]=f.useState(""),[_,R]=f.useState(""),[L]=wd(),[te,K]=f.useState(()=>L.get("tab")||null),[I,G]=f.useState(!1),[Y,ce]=f.useState(""),[fe,se]=f.useState(""),P=()=>{const q=Y.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"");if(!q||!l)return;const ge=fe.trim()||q,me=`Ticket.DepartmentSystem.Departments.${q}`,B={...l};Gn(B,`${me}.Name`,ge),Gn(B,`${me}.Description`,`Open a ${ge} ticket`),Gn(B,`${me}.Emoji`,"🎫"),Gn(B,`${me}.Category`,"CATEGORY_ID"),Gn(B,`${me}.Role`,"ROLE_ID"),Gn(B,`${me}.ChannelPrefix`,`${q}-`),Gn(B,`${me}.DefaultPriority`,"normal"),Gn(B,`${me}.Questions`,["What do you need assistance with?"]),d(B),G(!1),ce(""),se("")},Z=q=>{if(!l)return;const ge=`Ticket.DepartmentSystem.Departments.${q}`,me=JSON.parse(JSON.stringify(l));if(Object.keys(me).forEach(B=>{(B.startsWith(ge)||B===ge)&&delete me[B]}),me.Ticket&&typeof me.Ticket=="object"){const B=me.Ticket.DepartmentSystem;B&&typeof B=="object"&&B.Departments&&typeof B.Departments=="object"&&delete B.Departments[q]}d(me)},ae=FM(t),re=f.useMemo(()=>!ae||ae==="commands"||!l?ae:ZO(ae,l),[ae,l]);f.useEffect(()=>{var q;if(re&&re!=="commands"){const ge=L.get("tab");if(ge&&re.find(me=>me.title.toLowerCase()===ge.toLowerCase())){const me=re.find(B=>B.title.toLowerCase()===ge.toLowerCase());me&&me.title!==te&&K(me.title)}else(!te||!re.find(me=>me.title===te))&&K(((q=re[0])==null?void 0:q.title)||null)}},[re,te,L]);const V=f.useCallback(async()=>{v(!0),C(""),E("");try{const ge=(await Ne.getConfigJson(t)).data??{},me=uz(t,ge);d(me),p(me);const ie=(await Ne.getConfigRaw(t)).data??"",we=z8(ie,t);M(we),R(we)}catch(q){C(q instanceof Error?q.message:"Failed to load config")}finally{v(!1)}},[t]);f.useEffect(()=>{V()},[V]);function O(q,ge){d(me=>me&&Gn(me,q,ge))}async function D(){if(!(c||T===_)){w(!0),C(""),E("");try{const q=await nd(()=>Ne.saveConfigRaw(t,T));E(q.message||"Config saved."),await V()}catch(q){C(q instanceof Error?q.message:"Save failed")}finally{w(!1)}}}async function $(){if(!(c||!l||!m)){if(k==="yaml"){await D();return}w(!0),C(""),E("");try{if(ae==="commands"){const q={};for(const me of Object.keys(l))JSON.stringify(l[me])!==JSON.stringify(m[me])&&(q[`${t}:${me}`]=l[me]);if(Object.keys(q).length===0){E("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(q));E(ge.message||"")}else if(re&&re!=="commands"){const q=dz(t,re,l,m);if(Object.keys(q).length===0){E("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(q));E(ge.message||"")}await V()}catch(q){C(q instanceof Error?q.message:"Save failed")}finally{w(!1)}}}if(ae===null)return s.jsx(Ye,{children:s.jsx(qe,{children:"No visual editor available for this file."})});if(g)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-24 w-full rounded-xl"}),s.jsx(Be,{className:"h-48 w-full rounded-xl"})]});if(!l)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y||"Failed to load"})});const H=m&&JSON.stringify(l)!==JSON.stringify(m),xe=k==="yaml"?T!==_:H;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[o?s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:k==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),s.jsx(ue,{type:"button",variant:k==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}):null,s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[xe?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:V,disabled:g||b,children:"Reload"}),c?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:$,disabled:b||!xe,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),b?"Saving…":"Save"]})]})]}),y?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(ve,{icon:ig,size:18}),s.jsx(qe,{children:y})]}):null,S?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:S})}):null,k==="yaml"?s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:"Raw YAML"}),s.jsx(Ot,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),s.jsx(Qe,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:s.jsx(oz,{height:"100%",language:"yaml",theme:"vs-dark",value:T,onChange:q=>M(q||""),options:{readOnly:c,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):ae==="commands"?s.jsx(cz,{data:l,onChange:q=>d(q)}):re&&re!=="commands"?s.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[s.jsx("nav",{className:"flex flex-col gap-1",children:re.map(q=>s.jsx("button",{onClick:()=>K(q.title),className:pe("text-left px-3 py-2 text-sm rounded-md transition-colors",te===q.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:q.title},q.title))}),s.jsx("div",{className:"min-w-0",children:re.filter(q=>q.title===te).map(q=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3 flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(dt,{className:"text-base",children:q.title}),q.description?s.jsx(Ot,{children:q.description}):null]}),q.title==="Ticket Departments"&&!c&&s.jsxs(ue,{type:"button",size:"sm",variant:"outline",onClick:()=>G(!0),className:"gap-1.5 text-xs h-8 shrink-0",children:[s.jsx(ve,{icon:sg,size:14})," Add Department"]})]}),s.jsx(Qe,{className:"space-y-6",children:(()=>{const{standalone:ge,groups:me}=fz(q.fields,l);return s.jsxs(s.Fragment,{children:[ge.length>0&&s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:ge.map(B=>s.jsx("div",{className:B.type==="textarea"||B.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:B,value:Fr(l,B.path),readOnly:c,onChange:ie=>O(B.path,ie)})},B.path))}),me.map(B=>s.jsxs("div",{className:"rounded-xl border border-border bg-card/60 p-4 space-y-4 shadow-sm transition-all hover:border-primary/40",children:[s.jsxs("div",{className:"flex items-center justify-between border-b border-border/60 pb-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-semibold text-base text-foreground",children:B.name}),s.jsx("span",{className:"text-xs font-mono px-2.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20 font-medium",children:q.title==="Ticket Departments"?`Ticket.${B.key}`:B.key})]}),q.title==="Ticket Departments"&&B.key!=="DepartmentSystem"&&!c&&s.jsx(ue,{type:"button",size:"sm",variant:"ghost",onClick:()=>Z(B.key),className:"h-7 w-7 p-0 text-muted-foreground hover:text-destructive",title:"Delete Department",children:s.jsx(ve,{icon:wi,size:14})})]}),s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:B.fields.map(ie=>s.jsx("div",{className:ie.type==="textarea"||ie.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:ie,value:Fr(l,ie.path),readOnly:c,onChange:we=>O(ie.path,we)})},ie.path))})]},B.key))]})})()})]},q.title))})]}):null,s.jsx(Qs,{open:I,onOpenChange:G,children:s.jsxs(hs,{className:"sm:max-w-[400px]",children:[s.jsxs(gs,{children:[s.jsx(xs,{className:"text-base",children:"Add Ticket Department"}),s.jsx(vs,{className:"text-xs",children:"Create a new support department for ticket creation."})]}),s.jsxs("div",{className:"space-y-3 py-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department Key (Internal ID)"}),s.jsx(De,{placeholder:"billing",value:Y,onChange:q=>ce(q.target.value.toLowerCase().replace(/[^a-z0-9_-]/g,"")),className:"text-xs font-mono border-border bg-secondary/30"}),s.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["e.g. ",s.jsx("code",{children:"billing"}),", ",s.jsx("code",{children:"technical"}),", ",s.jsx("code",{children:"sales"})]})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department Display Name"}),s.jsx(De,{placeholder:"Billing & Sales Support",value:fe,onChange:q=>se(q.target.value),className:"text-xs border-border bg-secondary/30"})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>G(!1),className:"text-xs",children:"Cancel"}),s.jsx(ue,{size:"sm",onClick:P,disabled:!Y.trim(),className:"text-xs bg-primary font-semibold",children:"Create Department"})]})]})})]})}const pz=Ne.listConfigs(),hz={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function gz(){var T,M;const{permissions:t,canViewConfig:n}=qt(),{files:a}=$2(),[o,c]=wd(),l=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>pz.filter(_=>n(_)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),g=f.useMemo(()=>[...m,...p.map(_=>_l(_))],[m,p]),v=g[0]??"",[b,w]=f.useState(()=>l&&g.includes(l)?l:v);if(f.useEffect(()=>{l&&g.includes(l)?w(l):g.includes(b)||(w(v),v&&c({file:v}))},[l,g,b,v,c]),g.length===0)return s.jsx(ya,{to:mg(t),replace:!0});const y=H8(b),C=(y==null?void 0:y.type)==="addon",S=C?y.file:null,E=C?H2(S):hz[b]??"Configuration",k=C?!!((T=t==null?void 0:t.configs.supportbot)!=null&&T.edit):t?!!((M=t.configs[b])!=null&&M.edit):!1,N=C?S:`${b}.yml`;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),s.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${N} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${N} — you do not have permission to save changes.`})]}),s.jsx("div",{className:"mt-6",children:C&&S?s.jsx(WO,{filename:S},S):s.jsx(mz,{configFile:b},b)})]})}const xz={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function vz(t){return t?xz[t]||"Sign-in failed. Please try again.":""}function bz(){const{branding:t}=Ed(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=qt(),[c]=wd(),l=f.useMemo(()=>vz(c.get("error")),[c]);return!a&&n?s.jsx(ya,{to:"/",replace:!0}):s.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:s.jsxs(Ze,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),s.jsxs(ut,{className:"space-y-6 pt-10 pb-4 text-center",children:[s.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:s.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),s.jsxs("div",{children:[s.jsx(dt,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:t.title||"SupportBot"}),s.jsx(Ot,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),s.jsxs(Qe,{className:"space-y-6 pb-10",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),s.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",s.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),l?s.jsx(Ye,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:s.jsx(qe,{className:"font-medium",children:l})}):null,s.jsxs(ue,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[s.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),s.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:s.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const mi=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:cg},{id:"database",title:"Database",subtitle:"SQLite or MySQL engine",icon:x8},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:By},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:Nd},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:rh},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:By}];function yz(t){return t==="oauth"?"oauth":t==="owners"?"owners":t}function wz({brandingTitle:t,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:c}){return s.jsx("div",{className:"min-h-svh bg-background",children:s.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[s.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?s.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):s.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:s.jsx(ve,{icon:cg,size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),s.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:t})]})]}),c]})})}function jz({currentIndex:t,validation:n}){const a=(t+1)/mi.length*100;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[s.jsxs("span",{children:["Step ",t+1," of ",mi.length]}),s.jsxs("span",{children:[Math.round(a),"%"]})]}),s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),s.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:mi.map((o,c)=>{var g;const l=yz(o.id),d=(g=n[l])==null?void 0:g.ok,m=c===t,p=cs.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx(ve,{icon:jd,size:14}),o.globalName||o.username,s.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!t.bot&&!((a=t.users)!=null&&a.length)?s.jsx("p",{children:t.warning||"Verified successfully."}):null]})}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:t.error})}):null}function Sz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",s.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",s.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"botToken",children:"Bot token"}),s.jsx(De,{id:"botToken",type:"password",autoComplete:"off",value:t.botToken,onChange:l=>n({...t,botToken:l.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.botToken}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.botToken,onClick:c,children:o?"Checking with Discord…":"Verify bot token"})})]})}function Nz({values:t,setValues:n,validation:a,validating:o,onValidate:c,onGenerate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"secretKey",children:"Session secret"}),s.jsx(De,{id:"secretKey",type:"password",autoComplete:"off",value:t.secretKey,onChange:d=>n({...t,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.secretKey}),s.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[s.jsx(ue,{type:"button",variant:"outline",onClick:l,children:"Generate secure secret"}),s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.secretKey,onClick:c,children:o?"Checking…":"Validate"})]})]})}function Ez({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",s.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"clientId",children:"Client ID"}),s.jsx(De,{id:"clientId",value:t.clientId,onChange:l=>n({...t,clientId:l.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"clientSecret",children:"Client Secret"}),s.jsx(De,{id:"clientSecret",type:"password",autoComplete:"off",value:t.clientSecret,onChange:l=>n({...t,clientSecret:l.target.value}),className:"h-11 font-mono text-sm"})]})]}),s.jsx(mo,{result:a.oauth}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.clientId||!t.clientSecret,onClick:c,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function kz({values:t,setValues:n,validation:a}){async function o(){if(t.redirectUri)try{await navigator.clipboard.writeText(t.redirectUri)}catch{}}return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",s.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"redirectUri",children:"Redirect URI"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(De,{id:"redirectUri",value:t.redirectUri,onChange:c=>n({...t,redirectUri:c.target.value}),className:"h-11 flex-1 font-mono text-xs"}),s.jsx(ue,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:s.jsx(ve,{icon:R2,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?s.jsx(mo,{result:a.redirectUri}):s.jsx(Ye,{className:"border-border bg-secondary",children:s.jsx(qe,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function Tz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",s.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",s.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"owners",children:"Owner user IDs"}),s.jsx(Jd,{id:"owners",value:t.ownerUserIds,onChange:l=>n({...t,ownerUserIds:l.target.value}),placeholder:`829112572816130058 -987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),s.jsx(mo,{result:a.owners}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.ownerUserIds.trim(),onClick:c,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function Mz({onContinue:t}){return s.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:s.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[s.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:s.jsx(ve,{icon:jd,size:40})}),s.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),s.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",s.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),s.jsx(Ye,{className:"mt-6 text-left",children:s.jsx(qe,{children:"After restarting, sign in with Discord to open the dashboard."})}),s.jsx(ue,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:t,children:"Continue to sign in"})]})})}function Rz({currentIndex:t,validating:n,saving:a,onBack:o,onNext:c,onFinish:l}){const d=t===mi.length-1;return s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(ue,{type:"button",variant:"ghost",disabled:t===0||a,onClick:o,children:[s.jsx(ve,{icon:T2,size:18,className:"mr-1"}),"Back"]}),s.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?s.jsx(ue,{type:"button",size:"lg",disabled:a||n,onClick:l,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):s.jsxs(ue,{type:"button",size:"lg",disabled:n||a,onClick:c,children:["Continue",s.jsx(ve,{icon:lg,size:18,className:"ml-1"})]})})]})}function Az({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),s.jsx(De,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:t.emeraldApiKey,onChange:l=>n({...t,emeraldApiKey:l.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.emeraldApi}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Checking…":t.emeraldApiKey?"Verify key":"Skip step"})})]})}function _z({values:t,setValues:n,validation:a,validating:o,onValidate:c}){const l=a.database,d=t.dbDriver==="mysql";return s.jsxs("div",{className:"flex flex-1 flex-col gap-6",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Choose your database storage engine. Select ",s.jsx("strong",{children:"SQLite"})," for instant zero-config local storage, or ",s.jsx("strong",{children:"MySQL / MariaDB"})," for external host databases."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"sqlite"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="sqlite"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"SQLite"}),s.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-xs font-medium text-emerald-500",children:"Zero Config"})]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["Single-file SQL database stored locally at ",s.jsx("code",{className:"font-mono",children:"./Data/supportbot.db"}),". Zero extra setup required."]})]}),s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"mysql"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="mysql"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"MySQL / MariaDB"}),s.jsx("span",{className:"rounded-full bg-blue-500/10 px-2.5 py-0.5 text-xs font-medium text-blue-500",children:"External Database"})]}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Connect to a remote or local MySQL database server."})]})]}),d&&s.jsxs("div",{className:"space-y-4 rounded-xl border border-border bg-card/50 p-4",children:[s.jsx("h4",{className:"text-sm font-semibold text-foreground",children:"MySQL Connection Settings"}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{htmlFor:"dbHost",children:"Database Host"}),s.jsx(De,{id:"dbHost",placeholder:"127.0.0.1 or localhost",value:t.dbHost,onChange:m=>n(p=>({...p,dbHost:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbPort",children:"Port"}),s.jsx(De,{id:"dbPort",placeholder:"3306",value:t.dbPort,onChange:m=>n(p=>({...p,dbPort:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbDatabase",children:"Database Name"}),s.jsx(De,{id:"dbDatabase",placeholder:"supportbot",value:t.dbDatabase,onChange:m=>n(p=>({...p,dbDatabase:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbUser",children:"Database User"}),s.jsx(De,{id:"dbUser",placeholder:"root",value:t.dbUser,onChange:m=>n(p=>({...p,dbUser:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"dbPassword",children:"Password"}),s.jsx(De,{id:"dbPassword",type:"password",placeholder:"••••••••••••",value:t.dbPassword,onChange:m=>n(p=>({...p,dbPassword:m.target.value})),className:"h-11 text-sm font-mono"})]})]})]}),s.jsx(mo,{result:l}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Testing Connection...":"Test Connection & Validate"})})]})}function Dz(){const t=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return t+n}function Oz(t){return t.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function t2(t){return t==="oauth"?"oauth":t==="owners"?"owners":t==="database"?"database":t==="emeraldApi"?"emeraldApi":t}function Lz(){const t=ao(),{branding:n}=Ed(),{loading:a,error:o,refresh:c,status:l}=fS(),[d,m]=f.useState(0),[p,g]=f.useState({botToken:"",dbDriver:"sqlite",dbHost:"127.0.0.1",dbPort:"3306",dbUser:"",dbPassword:"",dbDatabase:"supportbot",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[v,b]=f.useState({}),[w,y]=f.useState(!1),[C,S]=f.useState(!1),[E,k]=f.useState(""),[N,T]=f.useState(!1),M=mi[d];f.useEffect(()=>{l!=null&&l.suggestedRedirectUri&&!p.redirectUri&&g(G=>({...G,redirectUri:l.suggestedRedirectUri}))},[l==null?void 0:l.suggestedRedirectUri,p.redirectUri]);const _=f.useMemo(()=>({botToken:p.botToken,dbDriver:p.dbDriver,dbHost:p.dbHost,dbPort:p.dbPort,dbUser:p.dbUser,dbPassword:p.dbPassword,dbDatabase:p.dbDatabase,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:Oz(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function R(){y(!0),k("");try{const G=await Ne.validateSetup(_);return b(Y=>{var ce;return{...Y,...(ce=G.data)==null?void 0:ce.results}}),G.data}catch(G){return k(G instanceof Error?G.message:"Validation failed"),null}finally{y(!1)}}async function L(){var ce,fe;const G=t2(M.id),Y=await R();return!!((fe=(ce=Y==null?void 0:Y.results)==null?void 0:ce[G])!=null&&fe.ok)}async function te(){const G=t2(M.id),Y=v[G];!(Y!=null&&Y.ok)&&!await L()||m(ce=>Math.min(ce+1,mi.length-1))}async function K(){S(!0),k("");try{const G=await R();if(!(G!=null&&G.ok)){k("Fix the steps marked with errors before finishing.");return}await Ne.completeSetup(_),T(!0)}catch(G){k(G instanceof Error?G.message:"Could not save setup")}finally{S(!1)}}function I(){const G={values:p,setValues:g,validation:v,validating:w};switch(M.id){case"botToken":return s.jsx(Sz,{...G,onValidate:()=>void L()});case"database":return s.jsx(_z,{...G,onValidate:()=>void L()});case"secretKey":return s.jsx(Nz,{...G,onGenerate:()=>g(Y=>({...Y,secretKey:Dz()})),onValidate:()=>void L()});case"oauth":return s.jsx(Ez,{...G,onValidate:()=>void L()});case"redirectUri":return s.jsx(kz,{values:p,setValues:g,validation:v});case"owners":return s.jsx(Tz,{...G,onValidate:()=>void L()});case"emeraldApi":return s.jsx(Az,{...G,onValidate:()=>void L()})}}return a?s.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:s.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[s.jsx(Be,{className:"h-14 w-64"}),s.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[s.jsx(Be,{className:"hidden h-80 lg:block"}),s.jsx(Be,{className:"h-[520px] rounded-2xl"})]})]})}):s.jsxs(wz,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:o})}):null,E?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:E})}):null,N?s.jsx(Mz,{onContinue:async()=>{await c(),t("/login",{replace:!0})}}):s.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[s.jsx(jz,{currentIndex:d,validation:v}),s.jsx(Cz,{step:M,footer:s.jsx(Rz,{currentIndex:d,validating:w,saving:C,onBack:()=>m(G=>Math.max(0,G-1)),onNext:()=>void te(),onFinish:()=>void K()}),children:I()})]})]})}const zz={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function Pz({title:t,icon:n,href:a,badge:o="Configured",status:c="done"}){return s.jsxs(Jt,{to:a,className:pe("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[s.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:s.jsx(ve,{icon:n,size:20})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate font-semibold",children:t}),s.jsx("span",{className:pe("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",zz[c]),children:o})]})]})}function Iz({percent:t,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:c="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,t)),p=d-m/100*d;return s.jsxs("div",{className:pe("relative inline-flex",a),children:[s.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:c})]}),s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[s.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),s.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const Uz={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function Bz({title:t,subtitle:n,icon:a,href:o,status:c,meta:l="Open in dashboard"}){const d=Uz[c];return s.jsxs(Jt,{to:o,className:pe("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsx("span",{className:pe("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),s.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:t}),s.jsx("span",{className:pe("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),s.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ve,{icon:a,size:16})}),s.jsx("span",{className:"text-xs text-muted-foreground",children:l})]}),s.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[s.jsx(ve,{icon:Nd,size:14,className:"opacity-60"}),s.jsx(ve,{icon:qs,size:14,className:"opacity-60 group-hover:text-primary"}),s.jsx(ve,{icon:lg,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function $z({stats:t}){const n=[{id:"ping",label:"Gateway latency",detail:`${t.bot.ping}ms`,badge:t.bot.ping<200?"Good":"High",badgeClass:t.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:fg(t.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${t.hosting.ram_used} / ${t.hosting.ram_total}`,badge:`${t.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return s.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[s.jsxs(dt,{className:"text-sm font-semibold",children:["Connected servers (",t.servers,")"]}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),s.jsxs(Qe,{className:"pt-0",children:[s.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,t.servers)}).map((a,o)=>s.jsxs(bs,{className:"size-9 border-2 border-card ring-0",children:[s.jsx(eo,{src:t.bot.avatar,alt:""}),s.jsx(ys,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),t.servers>6?s.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",t.servers-6]}):null]}),s.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[t.users.toLocaleString()," members across your guilds"]})]})]}),s.jsx(Ze,{className:"overflow-hidden border-border bg-secondary",children:s.jsx(Qe,{className:"p-5",children:s.jsxs("div",{className:"space-y-3",children:[s.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:s.jsx(ve,{icon:T8,size:22})}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),s.jsx(ue,{asChild:!0,size:"sm",className:"w-full",children:s.jsxs(Jt,{to:"/settings",children:[s.jsx(ve,{icon:Cd,size:16,className:"mr-2"}),"Open settings"]})})]})})}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[s.jsx(dt,{className:"text-sm font-semibold",children:"System activity"}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),s.jsxs(Qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>s.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[s.jsxs(bs,{className:"size-9",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{className:"bg-secondary text-xs",children:"SB"})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),s.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),s.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),s.jsx(ue,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:s.jsxs(Jt,{to:"/system",children:["All system details",s.jsx(ve,{icon:lg,size:14})]})})]})]}),s.jsx(Ze,{className:"border-border bg-card",children:s.jsxs(Qe,{className:"flex items-center gap-3 p-4",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(ve,{icon:qs,size:18})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("p",{className:"text-sm font-medium",children:["v",t.bot.version]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",t.hosting.cpu_load]})]})]})})]})}const c5={todo:"Needs setup",progress:"In progress",done:"Active"};function Kh(t,n,a="Configure module"){const o=n==null?void 0:n[t];return o||{status:"todo",subtitle:a}}function Hz(){return s.jsxs("div",{className:"flex gap-6",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-44 rounded-2xl"}),s.jsx(Be,{className:"h-44 rounded-2xl"})]}),s.jsx(Be,{className:"h-8 w-48"}),s.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((t,n)=>s.jsx(Be,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),s.jsx(Be,{className:"h-8 w-56"}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((t,n)=>s.jsx(Be,{className:"h-20 rounded-2xl"},n))})]}),s.jsx(Be,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function Gz(){const{stats:t,loading:n,error:a}=kd(),[o,c]=f.useState("all"),l=f.useMemo(()=>{if(!t)return 0;const v=t.tickets.total||0;return v===0?100:Math.round(t.tickets.closed/v*100)},[t]),d=f.useMemo(()=>o==="open"||o==="closed"?ii.filter(v=>v.category==="tickets"):o==="all"?ii:ii.filter(v=>v.category===o),[o]);if(n)return s.jsx(Hz,{});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"No stats available"})});const m=t.tickets.open,p=t.tickets.closed,g=t.tickets.total;return s.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Ze,{className:"overflow-hidden border-border bg-card",children:s.jsxs(Qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",s.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),s.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),s.jsx(ue,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:s.jsx(Jt,{to:"/transcripts",children:"Review"})})]}),s.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[s.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),s.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),s.jsx(Ze,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:s.jsxs(Qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),s.jsxs("ul",{className:"space-y-1.5 text-sm",children:[s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[g," total"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),s.jsx(Iz,{percent:l,size:120})]})})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),s.jsx(DS,{value:o,onValueChange:v=>c(v),children:s.jsxs(xx,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[s.jsx(Ys,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),s.jsx(Ys,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),s.jsx(Ys,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),YM.filter(v=>v.id!=="all").map(v=>s.jsx(Ys,{value:v.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:v.label},v.id))]})})]}),s.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:is,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:jd,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(v=>{const b=Kh(v.id,t.modules,v.description);return{id:v.id,title:v.title,subtitle:b.subtitle,icon:v.icon,href:v.href,status:b.status,meta:b.status==="done"?"View settings":"Configure"}})).map(v=>s.jsx(Bz,{title:v.title,subtitle:v.subtitle,icon:v.icon,href:v.href,status:v.status,meta:v.meta},v.id))})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),s.jsx(Jt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ii.slice(0,4).map(v=>{const b=Kh(v.id,t.modules);return s.jsx(Pz,{title:v.title,icon:v.icon,href:v.href,badge:c5[b.status],status:b.status},v.id)})})]})]}),s.jsx($z,{stats:t})]})}function Vz(){const{permissions:t}=qt();return Mn(t,"overview")?s.jsx(Gz,{}):s.jsx(ya,{to:mg(t),replace:!0})}function ga({permission:t,children:n}){const{loading:a,isAuthenticated:o,permissions:c}=qt();return a?s.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Mn(c,t)?s.jsx(s.Fragment,{children:n}):s.jsx(ya,{to:mg(c),replace:!0}):s.jsx(ya,{to:"/login",replace:!0})}function Fz(){const{hasPermission:t}=qt(),n=t("settings.update"),a=ao(),[o,c]=f.useState([]),[l,d]=f.useState(""),[m,p]=f.useState(!0),[g,v]=f.useState(""),[b,w]=f.useState(""),[y,C]=f.useState(null),S=f.useCallback(async()=>{p(!0),v("");try{const k=await Ne.getAddonsCatalog();k.data&&(c(k.data.addons),d(k.data.repository))}catch(k){v(k instanceof Error?k.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(k){if(n){C(k.id),w(""),v("");try{const N=await Ne.installAddon(k.id);w(N.message||`${k.name} installed.`),await S();const T=k.configFiles[0];T&&a(`/configs?file=${_l(T)}`)}catch(N){v(N instanceof Error?N.message:"Install failed")}finally{C(null)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),s.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:S,disabled:m,children:[s.jsx(ve,{icon:_2,size:16,className:pe("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,b?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:b})}):null,s.jsxs("section",{className:"space-y-4",children:[s.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"}),s.jsx(Be,{className:"h-40 rounded-xl"})]}):s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(k=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs(dt,{className:"flex items-center gap-2 text-lg",children:[s.jsx(ve,{icon:dg,size:20,className:"text-primary"}),k.name]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Fn,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:k.price===0||!k.price?"Free":`$${k.price}`}),k.installed?s.jsxs(Fn,{variant:"secondary",className:"shrink-0 gap-1",children:[s.jsx(ve,{icon:D8,size:14}),"Installed"]}):null]})]}),s.jsx(Ot,{children:k.description})]}),s.jsxs(Qe,{className:"space-y-2 text-xs text-muted-foreground",children:[k.is_external?s.jsxs("p",{children:["Available on: ",s.jsx("span",{className:"font-medium text-foreground",children:k.external_store||"External Store"})]}):null,k.configFiles&&k.configFiles.length>0?s.jsxs("p",{children:["Config:"," ",k.configFiles.map((N,T)=>s.jsxs("span",{children:[T>0?", ":null,s.jsx(Jt,{to:`/configs?file=${_l(N)}`,className:"font-mono text-primary hover:underline",children:N})]},N))]}):null]}),s.jsxs(Sx,{className:"flex flex-wrap gap-2",children:[k.is_external?s.jsx(ue,{variant:"outline",size:"sm",asChild:!0,children:s.jsx("a",{href:k.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,k.installed&&k.configFiles&&k.configFiles[0]?s.jsx(ue,{size:"sm",variant:"secondary",asChild:!0,children:s.jsx(Jt,{to:`/configs?file=${_l(k.configFiles[0])}`,children:"Edit config"})}):null,k.installed?s.jsx(ue,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):k.is_external?null:s.jsxs(ue,{size:"sm",disabled:!n||y===k.id,onClick:()=>E(k),children:[s.jsx(ve,{icon:Cd,size:14,className:"mr-1"}),y===k.id?"Installing…":"Install"]})]})]},k.id))})]})]})}function Yz(){const{permissions:t}=qt(),[n,a]=f.useState(!1),[o,c]=f.useState(!1),[l,d]=f.useState(""),[m,p]=f.useState(""),[g,v]=f.useState(""),[b,w]=f.useState("Administrator"),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState("General"),T=z2(t,"supportbot"),M=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Dt.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),c(!1);try{const _=await Ne.buildAddon({name:m.toLowerCase(),description:g||"A custom command",permission:b,embed:{title:y,description:S||"Hello from your custom command!",color:k}});c(!0),d(_.message||"Restart required."),Dt.success(`Addon ${m}.js created successfully!`)}catch(_){Dt.error(_ instanceof Error?_.message:"Failed to build addon")}finally{a(!1)}};return T?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),s.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?s.jsxs(Ye,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[s.jsx(x0,{className:"h-4 w-4"}),s.jsxs(qe,{className:"ml-2",children:["Successfully built ",s.jsxs("strong",{children:[m,".js"]}),"! ",l]})]}):null,s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ze,{children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Command Details"}),s.jsx(Ot,{children:"Configure how users trigger the command."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Command Name"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-muted-foreground",children:"/"}),s.jsx(De,{placeholder:"ping",value:m,onChange:_=>p(_.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Description"}),s.jsx(De,{placeholder:"Replies with a custom embed",value:g,onChange:_=>v(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Required Permission"}),s.jsxs(Ca,{value:b,onValueChange:w,children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"none",children:"@everyone"}),s.jsx(vt,{value:"Administrator",children:"Administrator"}),s.jsx(vt,{value:"ManageMessages",children:"Manage Messages"}),s.jsx(vt,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),s.jsxs(Ze,{children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Response Embed"}),s.jsx(Ot,{children:"What the bot will reply with."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Title (Optional)"}),s.jsx(De,{placeholder:"Hello!",value:y,onChange:_=>C(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Description"}),s.jsx(Jd,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:S,onChange:_=>E(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Embed Color"}),s.jsxs(Ca,{value:k,onValueChange:N,children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"General",children:"Theme General"}),s.jsx(vt,{value:"Success",children:"Theme Success"}),s.jsx(vt,{value:"Warning",children:"Theme Warning"}),s.jsx(vt,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs(Ze,{className:"sticky top-6 border-primary/20",children:[s.jsx(ut,{children:s.jsxs(dt,{className:"text-sm font-medium flex items-center gap-2",children:[s.jsx(ve,{icon:A8,size:16,className:"text-primary"}),"Live Preview"]})}),s.jsx(Qe,{children:s.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),s.jsxs("div",{className:"flex-1 space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),s.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[s.jsx(x0,{size:10})," BOT"]}),s.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),s.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[y&&s.jsx("div",{className:"mb-1 font-semibold text-white",children:y}),s.jsx("div",{className:"whitespace-pre-wrap",children:S||"Hello from your custom command!"})]})]})]})})}),s.jsx(Sx,{children:s.jsxs(ue,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:M,children:[s.jsx(ve,{icon:ds,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):s.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const Ex="supportbot-dashboard-accent",Pl="#45b46c",qz=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function Kz(t){const n=Ur(t,Pl),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,c=parseInt(n.slice(5,7),16)/255,l=Math.max(a,o,c),d=Math.min(a,o,c),m=(l+d)/2;let p=0,g=0;if(l!==d){const v=l-d;switch(g=m>.5?v/(2-l-d):v/(l+d),l){case a:p=((o-c)/v+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(t)})}function Jz({canEdit:t}){const[n,a]=f.useState(!1),[o,c]=f.useState(""),[l,d]=f.useState(!1);async function m(){if(t){a(!0),c("");try{const p=await Ne.resetDashboard();c(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){c(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return t?s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),s.jsxs(Qs,{open:l,onOpenChange:d,children:[s.jsx(TM,{asChild:!0,children:s.jsx(ue,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),s.jsxs(hs,{children:[s.jsxs(gs,{children:[s.jsx(xs,{children:"Are you absolutely sure?"}),s.jsx(vs,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&s.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),s.jsx(ue,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function eP({canEdit:t}){const{branding:n,setBrandingLocal:a}=Ed(),o=f.useRef(null),[c,l]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,g]=f.useState(!1),[v,b]=f.useState(!1),[w,y]=f.useState("");f.useEffect(()=>{l(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const C=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function S(){if(t){g(!0),y("");try{const T=await Ne.updateBranding({title:c,pageTitle:d});T.data&&a(T.data),y(T.message||"Branding saved.")}catch(T){y(T instanceof Error?T.message:"Save failed")}finally{g(!1)}}}async function E(T){if(!(!t||!T)){b(!0),y("");try{const M=await Qz(T),_=await Ne.uploadBrandingFavicon(M);_.data&&a(_.data),y(_.message||"Favicon uploaded.")}catch(M){y(M instanceof Error?M.message:"Upload failed")}finally{b(!1),o.current&&(o.current.value="")}}}async function k(){if(t){b(!0),y("");try{const T=await Ne.removeBrandingFavicon();T.data&&a(T.data),y(T.message||"Favicon removed.")}catch(T){y(T instanceof Error?T.message:"Remove failed")}finally{b(!1)}}}const N=c.trim()!==n.title||d.trim()!==n.pageTitle;return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"brand-title",children:"Sidebar title"}),s.jsx(De,{id:"brand-title",value:c,disabled:!t,maxLength:64,onChange:T=>l(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"brand-page-title",children:"Browser tab title"}),s.jsx(De,{id:"brand-page-title",value:d,disabled:!t,maxLength:80,onChange:T=>m(T.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),t?s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ue,{type:"button",disabled:p||!N,onClick:()=>void S(),children:p?"Saving…":"Save titles"}),w&&N?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]}):null]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:C?s.jsx("img",{src:C,alt:"Favicon preview",className:"size-full object-contain p-2"}):s.jsx(ve,{icon:y8,size:24,className:"text-muted-foreground/50"})}),s.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!t||v,onChange:T=>{var M;return void E(((M=T.target.files)==null?void 0:M[0])??null)}}),s.jsxs("div",{className:"flex flex-col gap-2",children:[t?s.jsxs("div",{className:"flex gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",disabled:v,onClick:()=>{var T;return(T=o.current)==null?void 0:T.click()},children:v?"Uploading…":"Upload Favicon"}),n.hasFavicon?s.jsx(ue,{type:"button",variant:"destructive",disabled:v,onClick:()=>void k(),children:"Remove"}):null]}):s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!N&&w?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]})]})]})]})}function tP(){var b,w,y,C,S,E,k,N,T,M,_;const{hasPermission:t}=qt(),n=t("settings.update"),[a,o]=f.useState(!0),[c,l]=f.useState(!1),[d,m]=f.useState(""),[p,g]=f.useState(null);f.useEffect(()=>{Ne.getConfigJson("api").then(R=>{R.data&&g(R.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function v(){var R,L,te,K,I,G,Y,ce,fe,se,P;if(!(!n||!p)){l(!0),m("");try{const Z={"api:API.Port":(R=p.API)==null?void 0:R.Port,"api:API.EmeraldAPIKey":(L=p.API)==null?void 0:L.EmeraldAPIKey,"api:API.TrustProxy":(te=p.API)==null?void 0:te.TrustProxy,"api:API.OAuth.Enabled":(I=(K=p.API)==null?void 0:K.OAuth)==null?void 0:I.Enabled,"api:API.OAuth.ClientId":(Y=(G=p.API)==null?void 0:G.OAuth)==null?void 0:Y.ClientId,"api:API.OAuth.ClientSecret":(fe=(ce=p.API)==null?void 0:ce.OAuth)==null?void 0:fe.ClientSecret,"api:API.OAuth.RedirectUri":(P=(se=p.API)==null?void 0:se.OAuth)==null?void 0:P.RedirectUri};await Ne.updateConfigFields(Z),m("API settings saved and backend restarted.")}catch(Z){m(Z instanceof Error?Z.message:"Save failed")}finally{l(!1)}}}return a?s.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"API Port"}),s.jsx(De,{type:"number",value:((b=p.API)==null?void 0:b.Port)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,Port:parseInt(R.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Emerald API Key"}),s.jsx(De,{type:"password",value:((w=p.API)==null?void 0:w.EmeraldAPIKey)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,EmeraldAPIKey:R.target.value}}),className:"border-border bg-secondary/30"})]})]}),s.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[s.jsx(kt,{checked:((y=p.API)==null?void 0:y.TrustProxy)||!1,disabled:!n,onCheckedChange:R=>g({...p,API:{...p.API,TrustProxy:R}})}),s.jsx(_e,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),s.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[s.jsx(kt,{checked:((S=(C=p.API)==null?void 0:C.OAuth)==null?void 0:S.Enabled)||!1,disabled:!n,onCheckedChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,Enabled:R}}})}}),s.jsx(_e,{className:"text-sm",children:"Enable OAuth"})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Client ID"}),s.jsx(De,{value:((k=(E=p.API)==null?void 0:E.OAuth)==null?void 0:k.ClientId)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientId:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Client Secret"}),s.jsx(De,{type:"password",value:((T=(N=p.API)==null?void 0:N.OAuth)==null?void 0:T.ClientSecret)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientSecret:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(_e,{children:"Redirect URI"}),s.jsx(De,{value:((_=(M=p.API)==null?void 0:M.OAuth)==null?void 0:_.RedirectUri)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,RedirectUri:R.target.value}}})},className:"border-border bg-secondary/30"}),s.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?s.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[s.jsx(ue,{type:"button",disabled:c,onClick:()=>void v(),children:c?"Saving…":"Save API Config"}),d?s.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function nP(){const{hasPermission:t}=qt(),n=t("settings.update"),[a,o]=f.useState(null),[c,l]=f.useState(!0),[d,m]=f.useState(!1),[p,g]=f.useState(""),[v,b]=f.useState(""),[w,y]=f.useState(()=>d5()??Pl),[C,S]=f.useState(""),[E,k]=f.useState("appearance"),N=f.useCallback(async()=>{l(!0),g("");try{const M=await Ne.checkForUpdates();M.data&&o(M.data)}catch(M){g(M instanceof Error?M.message:"Could not check for updates")}finally{l(!1)}},[]);f.useEffect(()=>{N()},[N]);async function T(M){if(M.updateAvailable){m(!0),g(""),b("");try{const _=await Ne.runUpdate(M.id,M.latest,M.zipUrl);b(_.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(_){g(_ instanceof Error?_.message:"Update failed")}finally{m(!1)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),s.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),s.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[s.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:s.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[s.jsx(ue,{variant:E==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("appearance"),children:"Appearance"}),s.jsx(ue,{variant:E==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("api"),children:"API Config"}),s.jsx(ue,{variant:E==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>k("updates"),children:"Update Checker"}),n&&s.jsx(ue,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${E==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>k("danger"),children:"Danger Zone"})]})}),s.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[E==="appearance"&&s.jsx("div",{className:"space-y-6",children:s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Dashboard appearance"}),s.jsx(Ot,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsx(eP,{canEdit:n}),s.jsxs("div",{className:"border-t border-border pt-4",children:[s.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),s.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(tf,{value:w,onChange:M=>{y(M),n2(M),S("Accent updated.")}}),s.jsx(De,{id:"accent-colour",value:w,onChange:M=>y(M.target.value),onBlur:()=>{const M=Ur(w,Pl);y(M),n2(M),S("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),s.jsx(ue,{type:"button",variant:"outline",onClick:()=>{Xz(),y(Pl),S("Reset to default purple.")},children:"Reset to default"})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[s.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),s.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),s.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),C?s.jsx("p",{className:"text-xs text-muted-foreground",children:C}):null]})]})]})}),E==="danger"&&n&&s.jsxs(Ze,{className:"border-destructive/50 bg-destructive/5",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg text-destructive",children:"Danger Zone"}),s.jsx(Ot,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),s.jsx(Qe,{children:s.jsx(Jz,{canEdit:n})})]}),E==="api"&&s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"API Configuration"}),s.jsx(Ot,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),s.jsx(Qe,{children:s.jsx(tP,{})})]}),E==="updates"&&s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Software updates"}),s.jsx(Ot,{children:"Manage updates for the bot and dashboard."})]}),s.jsxs(Qe,{className:"space-y-4",children:[c?s.jsx(Be,{className:"h-24 w-full"}):a&&a.length>0?s.jsx("div",{className:"space-y-4",children:a.map(M=>s.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("p",{className:"font-medium text-sm",children:[s.jsx("a",{href:M.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:M.name})," ","(",M.branch," branch)"]}),s.jsxs("div",{className:"flex gap-x-4 text-sm",children:[s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",M.current]})]}),s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",M.latest]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[M.updateAvailable?s.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):s.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),M.updateAvailable&&n?s.jsxs(ue,{type:"button",size:"sm",onClick:()=>void T(M),disabled:d,children:[d?s.jsx(ve,{icon:_2,size:16,className:"mr-2 animate-spin"}):s.jsx(ve,{icon:Cd,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,M.updateAvailable&&!n?s.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},M.id))}):null,p?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:p})}):null,v?s.jsx(Ye,{children:s.jsx(qe,{children:v})}):null,s.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:s.jsxs(ue,{type:"button",variant:"outline",onClick:N,disabled:c||d,children:[s.jsx(ve,{icon:ur,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function kx(t){const[n,a]=f.useState(!1),o=f.useRef(t);return o.current=t,f.useEffect(()=>{let c=null,l=null;const d=()=>{c=new EventSource("/api/stream"),c.onopen=()=>{a(!0)},c.addEventListener("connected",()=>{a(!0)}),c.addEventListener("metrics",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onMetrics)==null||g.call(p,v)}catch{}}),c.addEventListener("log",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onLog)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessage)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message_deleted",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessageDeleted)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_message_updated",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketMessageUpdated)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_created",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketCreated)==null||g.call(p,v)}catch{}}),c.addEventListener("ticket_closed",m=>{var p,g;try{const v=JSON.parse(m.data);(g=(p=o.current).onTicketClosed)==null||g.call(p,v)}catch{}}),c.onerror=()=>{a(!1),c==null||c.close(),l=window.setTimeout(d,4e3)}};return d(),()=>{l&&window.clearTimeout(l),c&&c.close()}},[]),{connected:n}}function Et({label:t,value:n,mono:a=!1}){return s.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("dt",{className:"text-sm text-muted-foreground",children:t}),s.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const rP={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function aP(t){return t==="ok"?"text-emerald-500":t==="offline"?"text-destructive":"text-amber-500"}function sP(){var E;const{stats:t,loading:n,error:a,refresh:o}=kd(),[c,l]=f.useState(null),[d,m]=f.useState(null),[p,g]=f.useState(!1),[v,b]=f.useState(null),{connected:w}=kx({onMetrics:k=>{b(k)}}),y=f.useCallback(async()=>{const[k,N]=await Promise.all([Ne.getGuildStatus().catch(()=>null),Ne.health().catch(()=>null)]);k!=null&&k.data&&l(k.data),N!=null&&N.success&&N.data&&m({dashboard:N.data.dashboard,botReady:N.data.botReady,oauthEnabled:N.data.oauthEnabled,setupComplete:N.data.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function C(){g(!0);try{await Promise.all([o(),y()])}finally{g(!1)}}if(n&&!t)return s.jsxs("div",{className:"space-y-6",children:[s.jsx(Be,{className:"h-10 w-64"}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-56 rounded-2xl"}),s.jsx(Be,{className:"h-56 rounded-2xl"})]})]});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"Could not load system details."})});const S=t.bot.ping<200;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ue,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:s.jsxs(Jt,{to:"/",children:[s.jsx(ve,{icon:T2,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),s.jsxs(ue,{type:"button",variant:"outline",disabled:p,onClick:()=>void C(),children:[s.jsx(ve,{icon:ur,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Discord bot"}),s.jsx(Ot,{children:"Connection and identity"})]}),s.jsxs(Qe,{children:[s.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[s.jsxs(bs,{className:"size-12",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{children:"SB"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:t.bot.username}),s.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:t.bot.id})]})]}),s.jsxs("dl",{children:[s.jsx(Et,{label:"Version",value:`v${t.bot.version}`,mono:!0}),s.jsx(Et,{label:"Gateway latency",value:s.jsxs("span",{className:S?"text-emerald-500":"text-amber-500",children:[t.bot.ping," ms"]})}),s.jsx(Et,{label:"Process uptime",value:fg(t.bot.uptime)}),s.jsx(Et,{label:"Connected servers",value:t.servers.toLocaleString()}),s.jsx(Et,{label:"Members tracked",value:t.users.toLocaleString()}),t.bot.inviteUrl?s.jsx(Et,{label:"Invite link",value:s.jsx("a",{href:t.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(dt,{className:"text-lg",children:"Host machine"}),s.jsx(Ot,{children:"Server resources running this instance"})]}),s.jsxs(Fn,{variant:w?"default":"outline",className:"text-xs",children:[s.jsx("span",{className:`mr-1.5 inline-block h-2 w-2 rounded-full ${w?"bg-emerald-500 animate-pulse":"bg-muted"}`}),w?"Live Stream":"Polling"]})]}),s.jsx(Qe,{children:s.jsxs("dl",{children:[s.jsx(Et,{label:"Memory used",value:v?`${(v.ram_used_mb/1024).toFixed(2)} GB / ${(v.ram_total_mb/1024).toFixed(2)} GB`:`${t.hosting.ram_used} / ${t.hosting.ram_total}`}),s.jsx(Et,{label:"Memory usage",value:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:(v?v.ram_percent:t.hosting.ram_percent)>85?"text-amber-500 font-bold":"text-foreground font-medium",children:[v?v.ram_percent:t.hosting.ram_percent,"%"]}),s.jsx("div",{className:"w-24 h-2 bg-secondary rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${v?v.ram_percent:t.hosting.ram_percent}%`}})})]})}),s.jsx(Et,{label:"CPU load (1 min avg)",value:v?String(v.cpu_load):t.hosting.cpu_load,mono:!0}),s.jsx(Et,{label:"Host uptime",value:t.hosting.uptime})]})})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Tickets"}),s.jsx(Ot,{children:"Database snapshot"})]}),s.jsx(Qe,{children:s.jsxs("dl",{children:[s.jsx(Et,{label:"Total tickets",value:t.tickets.total}),s.jsx(Et,{label:"Open",value:s.jsx("span",{className:"text-primary",children:t.tickets.open})}),s.jsx(Et,{label:"Closed",value:t.tickets.closed}),s.jsx(Et,{label:"Transcripts",value:s.jsx(Jt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Guild health"}),s.jsx(Ot,{children:"Configured server and membership"})]}),s.jsx(Qe,{children:c?s.jsxs("dl",{children:[s.jsx(Et,{label:"Status",value:s.jsx("span",{className:aP(c.status),children:rP[c.status]})}),s.jsx(Et,{label:"Configured guild ID",value:c.configuredGuildId||"Not set",mono:!0}),c.configuredGuild?s.jsx(Et,{label:"Configured server",value:`${c.configuredGuild.name} (${((E=c.configuredGuild.memberCount)==null?void 0:E.toLocaleString())??"?"} members)`}):null,c.message?s.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:c.message}):null,c.extraGuilds.length>0?s.jsxs("div",{className:"mt-3 space-y-2",children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),s.jsx("ul",{className:"space-y-1 text-sm",children:c.extraGuilds.map(k=>s.jsxs("li",{className:"font-mono text-xs",children:[k.name," · ",k.id]},k.id))})]}):null]}):s.jsx(Be,{className:"h-24 w-full"})})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Dashboard services"}),s.jsx(Ot,{children:"API and authentication"})]}),s.jsx(Qe,{children:d?s.jsxs("dl",{className:"max-w-xl",children:[s.jsx(Et,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),s.jsx(Et,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),s.jsx(Et,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),s.jsx(Et,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),s.jsx(Et,{label:"Software updates",value:s.jsx(Jt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),s.jsx(Et,{label:"Logs",value:s.jsx(Jt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):s.jsx(Be,{className:"h-32 w-full max-w-xl"})})]}),t.modules?s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-lg",children:"Module setup status"}),s.jsx(Ot,{children:"Which features are configured and active"})]}),s.jsx(Qe,{children:s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ii.map(k=>{const N=Kh(k.id,t.modules);return s.jsxs(Jt,{to:k.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-sm font-medium",children:k.title}),s.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:N.subtitle})]}),s.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:c5[N.status]})]},k.id)})})})]}):null]})}function oP(t){if(!t)return"—";const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const iP=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],lP=["Output","Warn","Error"],cP={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},uP={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},gd=2e3,dP=2e3;function Wh(t,n){return`${t.type}-${t.timestamp??"na"}-${n}-${t.message.slice(0,32)}`}function fP(t,n,a){const o=a?[]:t,c=new Set(o.map((m,p)=>Wh(m,p))),l=[];for(let m=0;mgd?d.slice(d.length-gd):d}function mP(){const[t,n]=f.useState([]),[a,o]=f.useState(!0),[c,l]=f.useState(""),[d,m]=f.useState(!1),[p,g]=f.useState(!0),[v,b]=f.useState("all"),[w,y]=f.useState(""),[C,S]=f.useState(!0),[E,k]=f.useState(""),N=f.useRef(null),T=f.useRef(null),M=f.useRef(d);M.current=d;const _=f.useMemo(()=>v==="all"?lP:[v],[v]),R=f.useCallback(I=>{M.current||v!=="all"&&I.type!==v||(n(G=>{const Y=[...G,I];return Y.length>gd?Y.slice(Y.length-gd):Y}),S(!0))},[v]);kx({onLog:R});const L=f.useCallback(async I=>{var ce,fe;const G=await Ne.getLogs({types:_,cursor:I?void 0:N.current??void 0,tail:I?500:0}),Y=((ce=G.data)==null?void 0:ce.entries)??[];return N.current=((fe=G.data)==null?void 0:fe.cursor)??{},n(se=>fP(se,Y,I)),Y.length},[_]),te=f.useCallback(async()=>{var I;o(!0),l(""),N.current=null;try{const ce=(((I=(await Ne.getLogsMeta()).data)==null?void 0:I.files)??[]).filter(fe=>fe.file).map(fe=>`${fe.type}: ${fe.file}`).join(" · ");k(ce||"No log files yet — output appears when the bot runs."),await L(!0),S(!0)}catch(G){l(G instanceof Error?G.message:"Failed to load logs"),S(!1)}finally{o(!1)}},[L]);f.useEffect(()=>{te()},[te]),f.useEffect(()=>{if(d||a)return;const I=window.setInterval(async()=>{if(!M.current)try{await L(!1),S(!0),l("")}catch(G){S(!1),l(G instanceof Error?G.message:"Live update failed")}},dP);return()=>window.clearInterval(I)},[d,a,L]),f.useEffect(()=>{if(!p||d)return;const I=T.current;I&&(I.scrollTop=I.scrollHeight)},[t,p,d]);const K=f.useMemo(()=>t.filter(I=>{var Y;if(v!=="all"&&I.type!==v)return!1;if(!w.trim())return!0;const G=w.toLowerCase();return I.message.toLowerCase().includes(G)||(((Y=I.timestamp)==null?void 0:Y.toLowerCase().includes(G))??!1)}),[t,v,w]);return s.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),E?s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:E}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:pe("size-2 rounded-full",C&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),s.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":C?"Live":"Disconnected"})]})]}),c?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:c})}):null,s.jsxs(Ze,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[s.jsxs(ut,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(dt,{className:"text-base font-medium",children:["Console",a?null:s.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[K.length," line",K.length===1?"":"s"]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[s.jsx(kt,{id:"auto-scroll",checked:p,onCheckedChange:g}),s.jsx(_e,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>m(I=>!I),children:[s.jsx(ve,{icon:d?k8:E8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),te()},disabled:a,children:[s.jsx(ve,{icon:ur,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[s.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:iP.map(I=>s.jsx(ue,{type:"button",variant:v===I.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>b(I.id),children:I.label},I.id))}),s.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[s.jsx(ve,{icon:ji,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Filter lines…",value:w,onChange:I=>y(I.target.value),className:"h-9 pl-9"})]})]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-0",children:a?s.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((I,G)=>s.jsx(Be,{className:"h-4 w-full"},G))}):s.jsx("div",{ref:T,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:K.length===0?s.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):s.jsx("ul",{className:"space-y-1",children:K.map((I,G)=>s.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[s.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:oP(I.timestamp)}),s.jsx("span",{className:pe("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",uP[I.type]),children:I.type}),s.jsx("span",{className:pe("min-w-0 flex-1 whitespace-pre-wrap break-words",cP[I.type]),children:I.message||" "})]},Wh(I,G)))})})})]})]})}const pP=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],hP=450;function gP(t,n){return n&&t!=="viewer"}function xP(){const{user:t,hasPermission:n}=qt(),a=!gP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState(!1),T=f.useRef(null),M=f.useCallback(async()=>{var K;p(!0),w(""),C("");try{const G=(await Ne.getTranscriptTemplate()).data??null;if(G){const Y={...G,Typography:{...G.Typography,FontFamily:kS((K=G.Typography)==null?void 0:K.FontFamily)}};c(Y),d(structuredClone(Y))}}catch(I){w(I instanceof Error?I.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{M()},[M]);const _=f.useCallback(async K=>{N(!0);try{const I=await Ne.previewTranscriptTemplate(K);E(I)}catch{E("

Preview failed to load.

")}finally{N(!1)}},[]);f.useEffect(()=>{if(o)return T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{_(o)},hP),()=>{T.current&&clearTimeout(T.current)}},[o,_]);function R(K,I){c(G=>G&&Gn(G,K,I))}async function L(){if(!(a||!o)){v(!0),w(""),C("");try{const K=await Ne.saveTranscriptTemplate(o);C(K.message||"Saved."),d(structuredClone(o))}catch(K){w(K instanceof Error?K.message:"Save failed")}finally{v(!1)}}}const te=o&&l&&JSON.stringify(o)!==JSON.stringify(l);return m?s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Be,{className:"h-96 rounded-xl"}),s.jsx(Be,{className:"h-96 rounded-xl"})]}):o?s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),s.jsxs("div",{className:"flex items-center gap-2",children:[te?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:L,disabled:g||!te,children:[s.jsx(ve,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save appearance"]})]})]}),b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[s.jsx(vP,{data:o,readOnly:a,onPatch:R}),s.jsxs(Ze,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(ut,{className:"pb-2",children:[s.jsx(dt,{className:"text-base",children:"Live preview"}),s.jsxs(Ot,{children:["Sample ticket with your current settings",k?" · updating…":""]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-4 pt-0",children:s.jsx("iframe",{title:"Transcript template preview",srcDoc:S,className:pe("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",k&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b||"Failed to load template"})})}function vP({data:t,readOnly:n,onPatch:a}){return s.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:pP.map(o=>s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{className:"pb-3",children:[s.jsx(dt,{className:"text-base",children:o.title}),o.description?s.jsx(Ot,{children:o.description}):null]}),s.jsx(Qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(c=>s.jsx("div",{className:c.type==="textarea"?"sm:col-span-2":"",children:s.jsx(pd,{field:c,value:Fr(t,c.path),readOnly:n,onChange:l=>a(c.path,l)})},c.path))})]},o.title))})}function bP(t,n){return n&&t!=="viewer"}function yP(){const{user:t,hasPermission:n}=qt(),a=!bP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(!0),[m,p]=f.useState(!1),[g,v]=f.useState(!1),[b,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{var N,T,M;d(!0),w(""),C("");try{const R=(await Ne.getTranscriptSettings()).data;R&&c({autoDelete:{enabled:!!((N=R.autoDelete)!=null&&N.enabled),afterDays:((T=R.autoDelete)==null?void 0:T.afterDays)??30},publicAccess:{enabled:!!((M=R.publicAccess)!=null&&M.enabled)}})}catch(_){w(_ instanceof Error?_.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);async function E(){if(!(!o||a)){p(!0),w(""),C("");try{const N=await Ne.updateTranscriptSettings(o);N.data&&c({autoDelete:{enabled:N.data.autoDelete.enabled,afterDays:N.data.autoDelete.afterDays},publicAccess:{enabled:N.data.publicAccess.enabled}}),C(N.message??"Settings saved.")}catch(N){w(N instanceof Error?N.message:"Failed to save settings")}finally{p(!1)}}}async function k(){var N,T;if(!a){v(!0),w(""),C("");try{const M=await Ne.purgeTranscripts();C(M.message??((N=M.data)!=null&&N.skipped?"Auto-delete is disabled.":`Removed ${((T=M.data)==null?void 0:T.deleted)??0} transcript(s).`))}catch(M){w(M instanceof Error?M.message:"Purge failed")}finally{v(!1)}}}return l?s.jsxs("div",{className:"space-y-4",children:[s.jsx(Be,{className:"h-40 w-full rounded-xl"}),s.jsx(Be,{className:"h-40 w-full rounded-xl"})]}):o?s.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?s.jsx(Ye,{children:s.jsx(qe,{children:"You have view-only access. An admin or editor can change these settings."})}):null,b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,y?s.jsx(Ye,{children:s.jsx(qe,{children:y})}):null,s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-base",children:"Auto-delete"}),s.jsx(Ot,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),s.jsxs(Qe,{className:"space-y-4",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:N=>c(T=>T&&{...T,autoDelete:{...T.autoDelete,enabled:N.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),s.jsx(De,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:N=>c(T=>T&&{...T,autoDelete:{...T.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(N.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",disabled:a||g,onClick:()=>void k(),children:[s.jsx(ve,{icon:ur,size:16,className:pe(g&&"animate-spin")}),"Run cleanup now"]})]})]}),s.jsxs(Ze,{className:"border-border bg-card",children:[s.jsxs(ut,{children:[s.jsx(dt,{className:"text-base",children:"Public transcripts"}),s.jsxs(Ot,{children:["When enabled, anyone with the link can view a transcript at"," ",s.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),s.jsx(Qe,{children:s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:N=>c(T=>T&&{...T,publicAccess:{enabled:N.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:s.jsxs(ue,{type:"button",disabled:m,onClick:()=>void E(),children:[s.jsx(ve,{icon:Sd,size:16}),m?"Saving…":"Save settings"]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:"Could not load transcript settings."})})}function wP(t,n){return n&&t!=="viewer"}function r2(t){return t==null?"":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function a2(t){const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function jP(){var $;const{user:t,hasPermission:n}=qt(),a=wP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState("browse"),[l,d]=f.useState([]),[m,p]=f.useState(null),[g,v]=f.useState(!0),[b,w]=f.useState(""),[y,C]=f.useState(""),[S,E]=f.useState(""),[k,N]=f.useState(0),[T,M]=f.useState(!1),[_,R]=f.useState(!1),[L,te]=f.useState(!1),[K,I]=f.useState(!1),G=f.useCallback(async()=>{v(!0),C("");try{const X=(await Ne.listTranscripts()).data??[];d(X),p(xe=>{var q;return xe&&X.some(ge=>ge.id===xe)?xe:((q=X[0])==null?void 0:q.id)??null})}catch(H){C(H instanceof Error?H.message:"Failed to load transcripts")}finally{v(!1)}},[]);f.useEffect(()=>{G()},[G]),f.useEffect(()=>{o==="browse"&&Ne.getTranscriptSettings().then(H=>{var X,xe;te(!!((xe=(X=H.data)==null?void 0:X.publicAccess)!=null&&xe.enabled))}).catch(()=>te(!1))},[o]);const Y=f.useMemo(()=>{if(!S.trim())return l;const H=S.toLowerCase();return l.filter(X=>X.id.includes(H)||X.filename.toLowerCase().includes(H)||X.ticketName&&X.ticketName.toLowerCase().includes(H))},[l,S]),ce=f.useMemo(()=>l.find(H=>H.id===m)??null,[l,m]),fe=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,P=m&&L?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function Z(H){w(""),p(H),N(X=>X+1)}function ae(){fe&&window.open(fe,"_blank","noopener,noreferrer")}function re(){P&&window.open(P,"_blank","noopener,noreferrer")}async function V(){if(P)try{await navigator.clipboard.writeText(P),I(!0),window.setTimeout(()=>I(!1),2e3)}catch{w("Could not copy link to clipboard.")}}async function O(){var X;if(!m||!a)return;const H=((X=ce==null?void 0:ce.ticketName)==null?void 0:X.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${H}? This cannot be undone.`)){R(!0),w("");try{await Ne.deleteTranscript(m),await G()}catch(xe){w(xe instanceof Error?xe.message:"Failed to delete transcript")}finally{R(!1)}}}async function D(){if(!(!se||!ce)){M(!0),w("");try{const H=await fetch(se,{credentials:"include"});if(!H.ok){const ge=await H.json().catch(()=>({}));throw new Error(ge.error||`Download failed (${H.status})`)}const X=await H.blob(),xe=URL.createObjectURL(X),q=document.createElement("a");q.href=xe,q.download=ce.filename,q.click(),URL.revokeObjectURL(xe)}catch(H){w(H instanceof Error?H.message:"Failed to download transcript")}finally{M(!1)}}}return s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("browse"),children:"Library"}),s.jsx(ue,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("appearance"),children:"Appearance"}),s.jsx(ue,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("settings"),children:"Settings"})]}),o==="browse"?s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>G(),disabled:g,children:[s.jsx(ve,{icon:ur,size:16,className:pe(g&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?s.jsx(xP,{}):o==="settings"?s.jsx(yP,{}):s.jsxs(s.Fragment,{children:[y?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[s.jsxs(Ze,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[s.jsxs(ut,{className:"space-y-3 pb-3",children:[s.jsxs(dt,{className:"text-base font-medium",children:["Saved transcripts",!g&&l.length>0?s.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",l.length,")"]}):null]}),s.jsxs("div",{className:"relative",children:[s.jsx(ve,{icon:ji,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search by ticket name or channel ID…",value:S,onChange:H=>E(H.target.value),className:"pl-9"})]})]}),s.jsx(Qe,{className:"min-h-0 flex-1 p-0 pb-4",children:s.jsx(fc,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:g?s.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((H,X)=>s.jsx(Be,{className:"h-16 w-full rounded-lg"},X))}):Y.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[s.jsx(ve,{icon:Ul,size:32,className:"opacity-40"}),s.jsx("p",{children:l.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):s.jsx("ul",{className:"space-y-1.5",children:Y.map(H=>{var q;const X=H.id===m,xe=((q=H.ticketName)==null?void 0:q.trim())||`Channel ${H.id}`;return s.jsx("li",{children:s.jsxs("button",{type:"button",onClick:()=>Z(H.id),className:pe("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",X?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[s.jsx("p",{className:"truncate text-sm font-medium",children:xe}),s.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[a2(H.createdAt),H.size!=null?` · ${r2(H.size)}`:""]})]})},H.id)})})})})]}),s.jsxs(Ze,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(ut,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx(dt,{className:"truncate text-base font-medium",children:ce?(($=ce.ticketName)==null?void 0:$.trim())||`Channel ${ce.id}`:"Preview"}),ce?s.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[a2(ce.createdAt),ce.size!=null?` · ${r2(ce.size)}`:""]}):null]}),s.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[P?s.jsxs(s.Fragment,{children:[s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>void V(),children:[s.jsx(ve,{icon:R2,size:16}),K?"Copied":"Copy link"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:re,children:[s.jsx(ve,{icon:Nd,size:16}),"Public page"]})]}):null,s.jsxs(ue,{variant:"outline",size:"sm",disabled:!fe,onClick:ae,children:[s.jsx(ve,{icon:p8,size:16}),"Open tab"]}),s.jsxs(ue,{variant:"outline",size:"sm",disabled:!se||T,onClick:()=>void D(),children:[s.jsx(ve,{icon:Cd,size:16}),T?"Saving…":"Download"]}),a?s.jsxs(ue,{variant:"outline",size:"sm",disabled:!m||_,className:"text-destructive hover:text-destructive",onClick:()=>void O(),children:[s.jsx(ve,{icon:wi,size:16}),_?"Deleting…":"Delete"]}):null]})]}),s.jsxs(Qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[b?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:b})}):null,ce&&fe?s.jsx("iframe",{title:`Transcript ${ce.id}`,src:fe,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},k):s.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[s.jsx(ve,{icon:Ul,size:40,className:"opacity-30"}),s.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function CP(){const[t,n]=f.useState([]),[a,o]=f.useState(""),[c,l]=f.useState(!0),[d,m]=f.useState(""),[p,g]=f.useState(!0);f.useEffect(()=>{try{Ne.getConfigJson("supportbot").then(W=>{if(W&&W.data&&typeof W.data=="object"){const oe=Fr(W.data,"Ticket.DepartmentSystem.Enabled");typeof oe=="boolean"&&g(oe)}}).catch(()=>{})}catch{}},[]);const[v,b]=f.useState("all"),[w,y]=f.useState("all"),[C,S]=f.useState(""),E=f.useMemo(()=>{const W=new Set;return Array.isArray(t)&&t.forEach(oe=>{if(oe&&oe.department&&typeof oe.department=="string"){const Se=oe.department.trim().toLowerCase();Se&&W.add(Se)}}),Array.from(W).sort()},[t]),k=f.useMemo(()=>Array.isArray(t)?t.filter(W=>{var oe,Se,ye,Re,nt,mt;if(!W||p&&v!=="all"&&((oe=W.department)==null?void 0:oe.toLowerCase())!==v.toLowerCase()||w!=="all"&&((Se=W.priority)==null?void 0:Se.toLowerCase())!==w.toLowerCase())return!1;if(C.trim()){const bt=C.toLowerCase().trim(),Rr=(ye=W.subject)==null?void 0:ye.toLowerCase().includes(bt),xn=(Re=W.ticket_id)==null?void 0:Re.toLowerCase().includes(bt),mn=(nt=W.user_id)==null?void 0:nt.toLowerCase().includes(bt),Wr=p&&((mt=W.department)==null?void 0:mt.toLowerCase().includes(bt));if(!Rr&&!xn&&!mn&&!Wr)return!1}return!0}):[],[t,p,v,w,C]),[N,T]=f.useState(null),[M,_]=f.useState(!1),[R,L]=f.useState(!1),[te,K]=f.useState([]),[I,G]=f.useState(!1),[Y,ce]=f.useState(""),[fe,se]=f.useState([]),[P,Z]=f.useState(!1),[ae,re]=f.useState(null),[V,O]=f.useState(!1),[D,$]=f.useState(""),[H,X]=f.useState(null),[xe,q]=f.useState(""),[ge,me]=f.useState(!1),[B,ie]=f.useState(null),[we,Ce]=f.useState(""),[ze,Ke]=f.useState(null),[ft,Pt]=f.useState(!1),[gn,Yr]=f.useState("general"),[_n,wn]=f.useState(""),[Xn,Zn]=f.useState(""),[It,po]=f.useState(!1),nn=async()=>{if(!_n.trim()){Dt.error("Please enter a subject or reason for the ticket.");return}po(!0);try{const W=await Ne.createTicket({department:gn,subject:_n.trim(),userId:Xn.trim()||void 0});Dt.success(W.message||"Ticket opened successfully!"),Pt(!1),wn(""),Zn(""),qr()}catch(W){Dt.error(W instanceof Error?W.message:"Failed to open ticket.")}finally{po(!1)}},Dn=W=>{ie(W),Ce("Closed via Web Dashboard"),me(!0)},Da=async()=>{if(!B)return;const W=B.ticket_id;Ke(W);try{await Ne.closeTicket(W,we||"Closed via Web Dashboard"),Dt.success("Ticket closed and transcript saved."),n(oe=>oe.filter(Se=>Se.ticket_id!==W)),(N==null?void 0:N.ticket_id)===W&&(_(!1),L(!1),T(null)),me(!1),ie(null)}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to close ticket.")}finally{Ke(null)}},ho=f.useRef(null),Qn=f.useRef(null),Es=()=>{var W;(W=ho.current)==null||W.scrollIntoView({behavior:"smooth"})},qr=f.useCallback(async()=>{l(!0),m("");try{const W=await Ne.listOpenTickets();W.data&&(o(W.data.guildId),n(W.data.tickets.sort((oe,Se)=>Se.created_at-oe.created_at)))}catch(W){m(W instanceof Error?W.message:"Failed to load open tickets")}finally{l(!1)}},[]);f.useEffect(()=>{qr()},[qr]),f.useEffect(()=>{Ne.getGuildResources().then(W=>{W.data&&re(W.data)}).catch(()=>{})},[]);const gr=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&(K(oe=>oe.some(Se=>Se.id===W.message.id)?oe:[...oe,W.message]),setTimeout(Es,100))},[N]),Tt=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&K(oe=>oe.filter(Se=>Se.id!==W.messageId))},[N]),On=f.useCallback(W=>{N&&W.ticketId===N.ticket_id&&K(oe=>oe.map(Se=>Se.id===W.messageId?{...Se,content:W.content}:Se))},[N]),Mt=f.useCallback(W=>{n(oe=>oe.some(Se=>Se.ticket_id===W.ticket_id)?oe:[W,...oe]),Dt.info("New Ticket Created",{description:`#${W.ticket_id} - ${W.subject||"No Subject"}`})},[]),Oi=f.useCallback(W=>{n(oe=>oe.filter(Se=>Se.ticket_id!==W.ticket_id)),(N==null?void 0:N.ticket_id)===W.ticket_id&&Dt.warning("Active ticket was closed in Discord.")},[N]);kx({onTicketMessage:gr,onTicketMessageDeleted:Tt,onTicketMessageUpdated:On,onTicketCreated:Mt,onTicketClosed:Oi});const Li=async W=>{var oe;T(W),_(!0),G(!0),K([]),se([]),X(null);try{const Se=await Ne.getTicketMessages(W.ticket_id);(oe=Se.data)!=null&&oe.messages&&(K(Se.data.messages),setTimeout(Es,150))}catch(Se){Dt.error(Se instanceof Error?Se.message:"Failed to fetch messages")}finally{G(!1)}},go=W=>{const oe=Array.from(W.target.files||[]);oe.length&&(oe.forEach(Se=>{const ye=new FileReader;ye.onload=Re=>{var mt;const nt=(mt=Re.target)==null?void 0:mt.result;se(bt=>[...bt,{filename:Se.name,data:nt,previewUrl:Se.type.startsWith("image/")?nt:void 0,sizeMb:(Se.size/1024/1024).toFixed(2)}])},ye.readAsDataURL(Se)}),Qn.current&&(Qn.current.value=""))},Kr=W=>{se(oe=>oe.filter((Se,ye)=>ye!==W))},Oa=async W=>{var ye;if(W.preventDefault(),!Y.trim()&&!fe.length||!N||P)return;const oe=Y.trim(),Se=[...fe];Z(!0),ce(""),se([]),O(!1);try{const Re=await Ne.me().catch(()=>null),nt=((ye=Re==null?void 0:Re.data)==null?void 0:ye.username)||"Staff",mt=await Ne.sendTicketReply(N.ticket_id,oe,nt,Se.map(bt=>({filename:bt.filename,data:bt.data})));mt.data&&(K(bt=>bt.some(Rr=>Rr.id===mt.data.id)?bt:[...bt,{id:mt.data.id,author:mt.data.author,content:mt.data.content,attachments:mt.data.attachments||[],createdAt:mt.data.createdAt}]),setTimeout(Es,100))}catch(Re){Dt.error(Re instanceof Error?Re.message:"Failed to send reply to Discord."),ce(oe),se(Se)}finally{Z(!1)}},Mr=async W=>{if(N)try{await Ne.deleteTicketMessage(N.ticket_id,W),K(oe=>oe.filter(Se=>Se.id!==W)),Dt.success("Message deleted in Discord.")}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to delete message.")}},Kt=W=>{X(W.id),q(W.content)},La=()=>{X(null),q("")},Oe=async W=>{if(!(!N||!xe.trim()))try{await Ne.editTicketMessage(N.ticket_id,W,xe.trim()),K(oe=>oe.map(Se=>Se.id===W?{...Se,content:xe.trim()}:Se)),X(null),Dt.success("Message updated in Discord.")}catch(oe){Dt.error(oe instanceof Error?oe.message:"Failed to edit message.")}},tt=W=>{const oe=W.target.value;ce(oe);const Se=W.target.selectionStart||oe.length,ye=oe.slice(0,Se),Re=ye.lastIndexOf("@");if(Re!==-1&&!ye.slice(Re).includes(" ")){const nt=ye.slice(Re+1).toLowerCase();$(nt),O(!0)}else O(!1)},it=(W,oe,Se)=>{const ye=Y.lastIndexOf("@"),Re=Y.slice(0,ye),nt=Se?`<@&${oe}>`:`<@${oe}>`;ce(`${Re}${nt} `),O(!1)},rn=W=>{const oe=Math.floor((Date.now()-W)/1e3);return fg(oe)},Ft=W=>new Date(W).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),Rt=W=>{if(!W)return null;const oe=/(```[\s\S]*?```|`[^`]+`|\*\*\*[\s\S]+?\*\*\*|\*\*[\s\S]+?\*\*|__[\s\S]+?__|~~[\s\S]+?~~|\|\|[\s\S]+?\|\||<@!?&?\d+>|^###\s[^\n]+|^##\s[^\n]+|^-#\s[^\n]+|\[[^\]]+\]\(https?:\/\/[^\s)]+\)|https?:\/\/[^\s]+)/gm;return W.split(oe).map((ye,Re)=>{var Rr;if(!ye)return null;if(ye.startsWith("-# "))return s.jsx("span",{className:"text-xs text-muted-foreground font-medium block my-0.5 opacity-80",children:Rt(ye.slice(3))},Re);if(ye.startsWith("## "))return s.jsx("span",{className:"text-base font-bold text-foreground block my-1 tracking-tight",children:Rt(ye.slice(3))},Re);if(ye.startsWith("### "))return s.jsx("span",{className:"text-sm font-bold text-foreground block my-0.5",children:Rt(ye.slice(4))},Re);if(ye.startsWith("```")&&ye.endsWith("```")&&ye.length>=6){const xn=ye.slice(3,-3).replace(/^[a-z0-9_-]+\n/i,"");return s.jsx("pre",{className:"bg-black/60 p-2.5 rounded-lg text-xs font-mono my-1.5 border border-border overflow-x-auto text-emerald-400 font-mono",children:s.jsx("code",{children:xn})},Re)}if(ye.startsWith("`")&&ye.endsWith("`")&&ye.length>2)return s.jsx("code",{className:"bg-black/50 px-1.5 py-0.5 rounded text-xs font-mono text-emerald-300 border border-border/40",children:ye.slice(1,-1)},Re);if(ye.startsWith("***")&&ye.endsWith("***")&&ye.length>6)return s.jsx("strong",{className:"font-bold italic",children:Rt(ye.slice(3,-3))},Re);if(ye.startsWith("**")&&ye.endsWith("**")&&ye.length>4)return s.jsx("strong",{className:"font-bold",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("__")&&ye.endsWith("__")&&ye.length>4)return s.jsx("span",{className:"underline underline-offset-2",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("~~")&&ye.endsWith("~~")&&ye.length>4)return s.jsx("span",{className:"line-through opacity-80",children:Rt(ye.slice(2,-2))},Re);if(ye.startsWith("||")&&ye.endsWith("||")&&ye.length>4)return s.jsx("span",{className:"bg-secondary text-transparent hover:text-foreground hover:bg-secondary/50 px-1.5 py-0.5 rounded transition-all cursor-pointer select-none border border-border/30",title:"Click to reveal spoiler",children:ye.slice(2,-2)},Re);const nt=ye.match(/^<@!?(\d+)>$/);if(nt){const xn=nt[1],mn=new Map;N&&mn.set(N.user_id,"Ticket Author"),te.forEach(xr=>{var Xr;(Xr=xr.author)!=null&&Xr.id&&mn.set(xr.author.id,xr.author.globalName||xr.author.username)});const Wr=mn.get(xn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-primary/20 text-primary mx-0.5",title:`User ID: ${xn}`,children:["@",Wr||"User"]},Re)}const mt=ye.match(/^<@&(\d+)>$/);if(mt){const xn=mt[1],mn=(Rr=ae==null?void 0:ae.roles)==null?void 0:Rr.find(Wr=>Wr.id===xn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-amber-500/20 text-amber-400 mx-0.5",children:["@",mn?mn.name:`Role (${xn})`]},Re)}const bt=ye.match(/^\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)$/);if(bt){const xn=bt[1],mn=bt[2];return s.jsx("a",{href:mn,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:xn},Re)}return/^https?:\/\/[^\s]+$/i.test(ye)?/\.(gif|jpe?g|png|webp)(\?[^\s]*)?$/i.test(ye)||/cdn\.discordapp\.com\/(emojis|attachments)\//i.test(ye)||/images\.discordapp\.net\//i.test(ye)||/media\d*\.giphy\.com\//i.test(ye)?s.jsx("span",{className:"block my-1",children:s.jsx("img",{src:ye,alt:"GIF/Image",className:"max-h-64 rounded-lg border border-border object-contain hover:opacity-95 transition-opacity",loading:"lazy"})},Re):s.jsx("a",{href:ye,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:ye},Re):ye})},Jn=W=>!W||W.length===0?null:s.jsx("div",{className:"space-y-2 mt-1",children:W.map(oe=>{var nt,mt,bt;const Se=((nt=oe.contentType)==null?void 0:nt.startsWith("image/"))||/\.(png|jpe?g|gif|webp|svg)$/i.test(oe.name),ye=((mt=oe.contentType)==null?void 0:mt.startsWith("video/"))||/\.(mp4|webm|mov|mkv)$/i.test(oe.name),Re=((bt=oe.contentType)==null?void 0:bt.startsWith("audio/"))||/\.(mp3|wav|ogg|m4a)$/i.test(oe.name);return Se?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black/40",children:s.jsx("a",{href:oe.url,target:"_blank",rel:"noreferrer",children:s.jsx("img",{src:oe.url,alt:oe.name,className:"max-h-80 max-w-full object-contain hover:opacity-95 transition-opacity",loading:"lazy"})})},oe.id):ye?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black",children:s.jsx("video",{src:oe.url,controls:!0,className:"max-h-80 max-w-full"})},oe.id):Re?s.jsx("div",{className:"p-2 border border-border rounded-lg bg-secondary/20",children:s.jsx("audio",{src:oe.url,controls:!0,className:"w-full h-8"})},oe.id):s.jsxs("div",{className:"p-2.5 rounded-lg border border-border bg-secondary/20 flex items-center justify-between text-xs gap-3",children:[s.jsxs("div",{className:"flex items-center gap-2 truncate",children:[s.jsx(ve,{icon:Uy,size:16,className:"text-primary shrink-0"}),s.jsx("span",{className:"truncate font-medium",children:oe.name})]}),s.jsx(ue,{variant:"ghost",size:"sm",asChild:!0,className:"h-7 px-2 text-xs",children:s.jsx("a",{href:oe.url,target:"_blank",rel:"noreferrer",download:!0,children:"Download"})})]},oe.id)})}),fn=W=>!W||W.length===0?null:s.jsx("div",{className:"space-y-3 mt-1.5 w-full",children:W.map((oe,Se)=>{var ye,Re,nt,mt;return s.jsxs("div",{className:"rounded-lg border border-border/60 bg-secondary/30 p-3.5 text-xs space-y-2 border-l-4 shadow-sm relative overflow-hidden max-w-xl",style:{borderLeftColor:oe.color||"#5865F2"},children:[oe.author&&s.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-foreground",children:[oe.author.iconURL&&s.jsx("img",{src:oe.author.iconURL,alt:"",className:"h-4 w-4 rounded-full"}),s.jsx("span",{children:oe.author.name})]}),((ye=oe.thumbnail)==null?void 0:ye.url)&&s.jsx("img",{src:oe.thumbnail.url,alt:"",className:"h-12 w-12 rounded object-cover absolute top-3 right-3 border border-border"}),oe.title&&s.jsx("h4",{className:"font-bold text-sm text-foreground tracking-tight pr-12",children:Rt(oe.title)}),oe.description&&s.jsx("div",{className:"text-muted-foreground whitespace-pre-wrap leading-relaxed pr-12",children:Rt(oe.description)}),oe.fields&&oe.fields.length>0&&s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2.5 pt-2 border-t border-border/30",children:oe.fields.map((bt,Rr)=>s.jsxs("div",{className:`space-y-0.5 ${bt.inline?"":"sm:col-span-2"}`,children:[s.jsx("p",{className:"font-semibold text-foreground text-[11px] uppercase tracking-wider",children:bt.name}),s.jsx("p",{className:"text-muted-foreground whitespace-pre-wrap",children:Rt(bt.value)})]},Rr))}),((Re=oe.image)==null?void 0:Re.url)&&s.jsx("div",{className:"rounded-md overflow-hidden border border-border mt-2",children:s.jsx("img",{src:oe.image.url,alt:"",className:"max-h-64 w-full object-cover"})}),(oe.footer||oe.timestamp)&&s.jsxs("div",{className:"flex items-center gap-2 pt-1 border-t border-border/20 text-[10px] text-muted-foreground",children:[((nt=oe.footer)==null?void 0:nt.iconURL)&&s.jsx("img",{src:oe.footer.iconURL,alt:"",className:"h-3.5 w-3.5 rounded-full"}),((mt=oe.footer)==null?void 0:mt.text)&&s.jsx("span",{children:oe.footer.text}),oe.timestamp&&s.jsxs("span",{children:[new Date(oe.timestamp).toLocaleDateString()," ",new Date(oe.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]},Se)})}),Ln=W=>{if(!W||W.length===0)return null;const oe=W.map(Se=>({...Se,components:(Se.components||[]).filter(ye=>ye.customId||ye.url||ye.type===2||ye.type===3||ye.type==="BUTTON"||ye.type==="STRING_SELECT")})).filter(Se=>Se.components&&Se.components.length>0);return oe.length===0?null:s.jsx("div",{className:"space-y-2 mt-2.5 w-full",children:oe.map((Se,ye)=>{var Re;return s.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:(Re=Se.components)==null?void 0:Re.map((nt,mt)=>s.jsxs("div",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-secondary/80 text-secondary-foreground text-xs font-semibold border border-border/80 shadow-sm hover:bg-secondary transition-colors cursor-pointer",children:[nt.emoji&&s.jsx("span",{children:nt.emoji}),s.jsx("span",{children:nt.label||nt.customId||"Button"})]},mt))},ye)})})},xo=()=>s.jsx(fc,{className:"flex-1 p-4 sm:p-6",children:s.jsxs("div",{className:"max-w-4xl mx-auto w-full space-y-4",children:[I?s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(Be,{className:"h-10 w-3/4"}),s.jsx(Be,{className:"h-10 w-1/2 ml-auto"}),s.jsx(Be,{className:"h-10 w-2/3"})]}):te.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground text-sm",children:"No recent messages in this ticket channel."}):te.map(W=>{var oe;return s.jsxs("div",{className:`group flex items-start gap-3 ${W.author.isDashboard?"flex-row-reverse":""}`,children:[s.jsxs(bs,{className:"h-8 w-8 shrink-0",children:[s.jsx(eo,{src:W.author.avatar,alt:W.author.username}),s.jsx(ys,{children:s.jsx(ve,{icon:L8,size:16})})]}),s.jsxs("div",{className:`flex flex-col space-y-1 max-w-[80%] ${W.author.isDashboard?"items-end":"items-start"}`,children:[s.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[s.jsx("span",{className:"font-semibold text-foreground",children:W.author.globalName||W.author.username}),W.author.bot&&s.jsx(Fn,{variant:"secondary",className:"px-1 py-0 text-[10px]",children:"BOT"}),W.author.isDashboard&&s.jsx(Fn,{variant:"default",className:"px-1 py-0 text-[10px]",children:"STAFF"}),s.jsx("span",{children:Ft(W.createdAt)}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity ml-1",children:[s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-foreground",onClick:()=>Kt(W),title:"Edit Message",children:s.jsx(ve,{icon:D2,size:12})}),s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-destructive",onClick:()=>Mr(W.id),title:"Delete Message",children:s.jsx(ve,{icon:wi,size:12})})]})]}),H===W.id?s.jsxs("div",{className:"flex items-center gap-2 w-full mt-1",children:[s.jsx(De,{value:xe,onChange:Se=>q(Se.target.value),className:"h-8 text-sm",autoFocus:!0}),s.jsx(ue,{size:"sm",className:"h-8 px-2 bg-primary",onClick:()=>Oe(W.id),children:s.jsx(ve,{icon:_8,size:14})}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-8 px-2",onClick:La,children:s.jsx(ve,{icon:va,size:14})})]}):W.content?s.jsx("div",{className:`rounded-lg px-3.5 py-2.5 text-sm whitespace-pre-wrap ${W.author.isDashboard?"bg-primary text-primary-foreground":"bg-secondary/40 text-secondary-foreground border border-border/50"}`,style:W.containerColor||W.author.bot&&!((oe=W.embeds)!=null&&oe.length)?{borderLeftWidth:"4px",borderLeftColor:W.containerColor||"#5865F2"}:void 0,children:Rt(W.content)}):null,Jn(W.attachments),fn(W.embeds),Ln(W.components)]})]},W.id)}),s.jsx("div",{ref:ho})]})}),vo=()=>{var W;return s.jsxs("div",{className:"p-4 border-t border-border bg-secondary/10 flex flex-col gap-2 relative",children:[fe.length>0&&s.jsx("div",{className:"max-w-4xl mx-auto w-full flex items-center gap-2 flex-wrap mb-1",children:fe.map((oe,Se)=>s.jsxs("div",{className:"flex items-center gap-2 p-1.5 px-3 rounded-lg border border-border bg-secondary text-xs",children:[oe.previewUrl?s.jsx("img",{src:oe.previewUrl,alt:"",className:"h-6 w-6 rounded object-cover"}):s.jsx(ve,{icon:Uy,size:14,className:"text-primary"}),s.jsx("span",{className:"font-medium max-w-[120px] truncate",children:oe.filename}),s.jsxs("span",{className:"text-muted-foreground text-[10px]",children:[oe.sizeMb,"MB"]}),s.jsx("button",{type:"button",onClick:()=>Kr(Se),className:"text-muted-foreground hover:text-destructive ml-1",children:s.jsx(ve,{icon:va,size:12})})]},Se))}),V&&s.jsxs("div",{className:"max-w-4xl mx-auto w-full absolute bottom-full mb-2 z-50 bg-popover text-popover-foreground border border-border rounded-xl shadow-xl overflow-hidden max-h-48 overflow-y-auto",children:[s.jsx("div",{className:"p-2 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider border-b",children:"Mentions (@)"}),N&&s.jsxs("button",{type:"button",onClick:()=>it("Ticket Author",N.user_id,!1),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(bs,{className:"h-5 w-5",children:s.jsx(ys,{children:"U"})}),s.jsx("span",{className:"font-medium",children:"Ticket Author"})]}),s.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["@",N.user_id]})]}),(W=ae==null?void 0:ae.roles)==null?void 0:W.filter(oe=>oe.name.toLowerCase().includes(D)).slice(0,5).map(oe=>s.jsxs("button",{type:"button",onClick:()=>it(oe.name,oe.id,!0),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("span",{className:"font-medium text-amber-400",children:["@",oe.name]}),s.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"Role"})]},oe.id))]}),s.jsxs("form",{onSubmit:Oa,className:"max-w-4xl mx-auto w-full flex items-center gap-2",children:[s.jsx("input",{type:"file",ref:Qn,multiple:!0,onChange:go,className:"hidden",accept:"image/*,video/*,audio/*,.pdf,.zip,.txt,.json"}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{var oe;return(oe=Qn.current)==null?void 0:oe.click()},title:"Attach files or media",className:"h-9 px-2.5",children:s.jsx(ve,{icon:b8,size:16})}),s.jsx(De,{value:Y,onChange:tt,placeholder:"Type a reply... Use @ to tag roles or users",disabled:P||I,className:"flex-1"}),s.jsx(ue,{type:"submit",size:"sm",disabled:P||!Y.trim()&&!fe.length||I,children:P?s.jsx(ve,{icon:ur,size:16,className:"animate-spin"}):s.jsxs(s.Fragment,{children:[s.jsx(ve,{icon:R8,size:16,className:"mr-1.5"}),"Send"]})})]})]})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),s.jsx("p",{className:"text-muted-foreground",children:"Manage open support tickets & reply live to Discord channels from the web dashboard."})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(ue,{onClick:()=>Pt(!0),className:"gap-2 bg-primary font-semibold text-xs h-9",children:[s.jsx(ve,{icon:is,size:15})," Open Ticket"]}),s.jsxs(ue,{onClick:()=>void qr(),disabled:c,variant:"outline",size:"sm",children:[s.jsx(ve,{icon:ur,size:16,className:c?"animate-spin mr-2":"mr-2"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between gap-3 bg-card/60 p-3.5 rounded-xl border border-border/80 shadow-sm",children:[s.jsxs("div",{className:"relative w-full md:w-80",children:[s.jsx(ve,{icon:ji,size:15,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(De,{placeholder:"Search tickets by ID, user, subject...",value:C,onChange:W=>S(W.target.value),className:"pl-9 text-xs h-9 bg-secondary/30 border-border"})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2.5 w-full md:w-auto justify-end",children:[p&&s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Department:"}),s.jsxs(Ca,{value:v,onValueChange:b,children:[s.jsx(Br,{className:"text-xs h-9 w-[160px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Departments"})}),s.jsxs($r,{children:[s.jsx(vt,{value:"all",children:"All Departments"}),E.map(W=>s.jsx(vt,{value:W,className:"capitalize",children:W},W))]})]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Priority:"}),s.jsxs(Ca,{value:w,onValueChange:y,children:[s.jsx(Br,{className:"text-xs h-9 w-[140px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Priorities"})}),s.jsxs($r,{children:[s.jsx(vt,{value:"all",children:"All Priorities"}),s.jsx(vt,{value:"low",children:"Low"}),s.jsx(vt,{value:"medium",children:"Medium / Normal"}),s.jsx(vt,{value:"high",children:"High"}),s.jsx(vt,{value:"urgent",children:"Urgent"})]})]})]}),(v!=="all"||w!=="all"||C.trim())&&s.jsx(ue,{variant:"ghost",size:"sm",onClick:()=>{b("all"),y("all"),S("")},className:"h-9 text-xs text-muted-foreground hover:text-foreground px-2",children:"Reset"})]})]}),s.jsx(Ze,{className:"border-border bg-card",children:s.jsx(Qe,{className:"p-0",children:c?s.jsxs("div",{className:"space-y-4 p-6",children:[s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"}),s.jsx(Be,{className:"h-12 w-full"})]}):d?s.jsx("div",{className:"p-6",children:s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:d})})}):k.length===0?s.jsxs("div",{className:"p-12 text-center text-muted-foreground space-y-2",children:[s.jsx("p",{children:"No open tickets found matching your filter criteria."}),(v!=="all"||w!=="all"||C.trim())&&s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>{b("all"),y("all"),S("")},className:"text-xs mt-2",children:"Clear Filters"})]}):s.jsx("div",{className:"divide-y divide-border",children:k.map(W=>s.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("p",{className:"font-medium text-primary",children:W.subject||"Untitled Ticket"}),s.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",W.ticket_id]}),p&&W.department&&s.jsx(Fn,{variant:"outline",className:"text-xs capitalize",children:W.department}),s.jsxs(Fn,{variant:W.priority==="high"?"destructive":W.priority==="medium"?"secondary":"outline",className:"text-xs capitalize",children:[W.priority," priority"]})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",s.jsx("span",{className:"font-mono",children:W.user_id}),W.description&&` • ${W.description}`]})]}),s.jsxs("div",{className:"flex items-center gap-3 w-full sm:w-auto justify-end",children:[s.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap mr-2",children:[s.jsx(ve,{icon:h8,size:14,className:"mr-1.5"}),rn(W.created_at)]}),s.jsxs(ue,{variant:"default",size:"sm",onClick:()=>Li(W),className:"bg-primary text-primary-foreground hover:bg-primary/90",children:[s.jsx(ve,{icon:g8,size:16,className:"mr-2"}),"Live Chat"]}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(W),disabled:ze===W.ticket_id,children:[ze===W.ticket_id?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Close"]}),a&&s.jsx(ue,{variant:"secondary",size:"sm",asChild:!0,children:s.jsx("a",{href:`https://discord.com/channels/${a}/${W.ticket_id}`,target:"_blank",rel:"noreferrer",children:s.jsx(ve,{icon:Nd,size:16})})})]})]},W.ticket_id))})})}),M&&R&&s.jsx("div",{className:"fixed inset-0 z-50 bg-black/65 backdrop-blur-sm flex items-center justify-center p-4 sm:p-6 lg:p-8 animate-in fade-in-0",onClick:W=>{W.target===W.currentTarget&&L(!1)},children:s.jsxs("div",{className:"bg-card text-card-foreground border border-border rounded-2xl shadow-2xl flex flex-col w-full max-w-5xl h-[88vh] overflow-hidden animate-in zoom-in-95",children:[s.jsxs("div",{className:"p-4 border-b border-border bg-secondary/20 flex flex-col space-y-1",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx("h2",{className:"text-lg font-bold tracking-tight truncate",children:(N==null?void 0:N.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",N==null?void 0:N.ticket_id]}),(N==null?void 0:N.department)&&s.jsx(Fn,{variant:"secondary",className:"text-xs capitalize shrink-0",children:N.department})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[N&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(N),disabled:ze===N.ticket_id,className:"h-8 px-2.5 text-xs",children:[ze===N.ticket_id?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Close Ticket"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>L(!1),className:"h-8 px-3 text-xs flex items-center gap-1.5",children:[s.jsx(ve,{icon:S8,size:14}),s.jsx("span",{children:"Collapse"})]}),s.jsx(ue,{variant:"ghost",size:"icon",onClick:()=>{_(!1),L(!1)},className:"h-8 w-8 text-muted-foreground hover:text-foreground",children:s.jsx(ve,{icon:va,size:18})})]})]}),(N==null?void 0:N.description)&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:N.description})]}),xo(),vo()]})}),M&&!R&&s.jsx(Yj,{open:M,onOpenChange:_,children:s.jsxs(Hg,{side:"right",className:"w-full sm:max-w-xl p-0 flex flex-col h-full bg-card",children:[s.jsxs(Gg,{className:"p-4 border-b border-border space-y-1 bg-secondary/20",children:[s.jsxs("div",{className:"flex items-center justify-between pr-8",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx(Vg,{className:"text-base font-bold truncate",children:(N==null?void 0:N.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",N==null?void 0:N.ticket_id]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[N&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Dn(N),disabled:ze===N.ticket_id,className:"h-7 px-2 text-xs",children:[ze===N.ticket_id?s.jsx(ve,{icon:ur,size:13,className:"animate-spin mr-1"}):s.jsx(ve,{icon:va,size:13,className:"mr-1"}),"Close"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>L(!0),className:"h-7 px-2 text-xs flex items-center gap-1",title:"Open in Full View",children:[s.jsx(ve,{icon:C8,size:13}),s.jsx("span",{children:"Full View"})]})]})]}),(N==null?void 0:N.description)&&s.jsx(Fg,{className:"text-xs text-muted-foreground truncate",children:N.description})]}),xo(),vo()]})}),s.jsx(Qs,{open:ge,onOpenChange:me,children:s.jsxs(hs,{className:"sm:max-w-md bg-card border-border rounded-xl",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-lg font-bold flex items-center gap-2",children:[s.jsx(ve,{icon:va,className:"text-destructive",size:20}),"Close Ticket #",B==null?void 0:B.ticket_id]}),s.jsx(vs,{className:"text-xs text-muted-foreground pt-1",children:"Are you sure you want to close this ticket? A transcript will be created and the channel will be deleted in Discord."})]}),s.jsxs("div",{className:"space-y-2 py-2",children:[s.jsx("label",{className:"text-xs font-semibold text-foreground",children:"Reason for closing (Optional)"}),s.jsx(De,{value:we,onChange:W=>Ce(W.target.value),placeholder:"e.g. Issue resolved by support team",className:"text-sm"})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0 mt-2",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>me(!1),disabled:!!ze,children:"Cancel"}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:Da,disabled:!!ze,children:[ze?s.jsx(ve,{icon:ur,size:14,className:"animate-spin mr-1.5"}):s.jsx(ve,{icon:va,size:14,className:"mr-1.5"}),"Confirm Close"]})]})]})}),s.jsx(Qs,{open:ft,onOpenChange:Pt,children:s.jsxs(hs,{className:"sm:max-w-[450px]",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-base flex items-center gap-2",children:[s.jsx(ve,{icon:is,size:18,className:"text-primary"}),"Open Direct Ticket"]}),s.jsx(vs,{className:"text-xs",children:"Select a support department to create a new ticket channel in Discord immediately."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Department"}),s.jsxs(Ca,{value:gn,onValueChange:Yr,children:[s.jsx(Br,{className:"text-xs border-border bg-secondary/30",children:s.jsx(Sa,{})}),s.jsxs($r,{children:[s.jsx(vt,{value:"general",children:"🎫 General Support"}),s.jsx(vt,{value:"purchase",children:"💳 Purchase & Billing Support"}),s.jsx(vt,{value:"reports",children:"🚨 Player Report"}),s.jsx(vt,{value:"appeals",children:"⚖️ Ban Appeals"})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Ticket Subject / Reason"}),s.jsx(De,{value:_n,onChange:W=>wn(W.target.value),placeholder:"e.g. Assistance with server permissions",className:"text-xs border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(_e,{className:"text-xs font-semibold",children:"Discord User ID (Optional)"}),s.jsx(De,{value:Xn,onChange:W=>Zn(W.target.value),placeholder:"e.g. 123456789012345678 (Leave blank for yourself)",className:"text-xs font-mono border-border bg-secondary/30"}),s.jsx("p",{className:"text-[11px] text-muted-foreground",children:"If specified, the ticket channel will be created for this user."})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>Pt(!1),disabled:It,className:"text-xs",children:"Cancel"}),s.jsxs(ue,{size:"sm",onClick:nn,disabled:It||!_n.trim(),className:"gap-1.5 text-xs bg-primary font-semibold",children:[It?s.jsx(ve,{icon:ur,size:14,className:"animate-spin"}):s.jsx(ve,{icon:is,size:14}),It?"Opening Ticket...":"Open Ticket"]})]})]})})]})}const SP=["admin","moderator","editor","viewer","custom"];function NP(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:ls("viewer"),yamlOwner:!1}}function EP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(kt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(kt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(kt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(kt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(kt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var v;const g=((v=t.configs)==null?void 0:v[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(kt,{checked:g.view,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,view:b}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(kt,{checked:g.edit,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,edit:b,view:b?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(kt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function kP(t){return t.permissions.users.manage?"Full + user management":t.permissions.settings.update?"Configs + settings updates":Object.values(t.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function TP(){const{user:t,hasPermission:n}=qt(),a=n("users.manage"),[o,c]=f.useState([]),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,v]=f.useState(""),[b,w]=f.useState(null),[y,C]=f.useState(!1),S=f.useCallback(async()=>{p(!0),v("");try{const[R,L]=await Promise.all([Ne.listDashboardUsers(),Ne.listGroups().catch(()=>({data:{groups:[]}}))]);R.data&&c(R.data.users),L.data&&d(L.data.groups)}catch(R){v(R instanceof Error?R.message:"Failed to load users")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);const E=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function k(){w(NP())}function N(R){w({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:ls(R.role),yamlOwner:R.yamlOwner})}function T(R){b&&w({...b,role:R,permissions:ls(R,b.permissions)})}async function M(){if(!(!b||!a)){C(!0),v("");try{b.mode==="add"?await Ne.addDashboardUser({id:b.id.trim(),role:b.role,username:b.username||void 0,globalName:b.globalName||void 0,enabled:b.enabled,permissions:b.role==="custom"?b.permissions:void 0}):await Ne.updateDashboardUser(b.id,{role:b.yamlOwner?void 0:b.role,enabled:b.enabled,username:b.username||void 0,globalName:b.globalName||void 0,permissions:b.role==="custom"?b.permissions:void 0}),w(null),await S()}catch(R){v(R instanceof Error?R.message:"Could not save user")}finally{C(!1)}}}async function _(R){if(a&&window.confirm("Remove this user from the dashboard?")){v("");try{await Ne.removeDashboardUser(R),await S()}catch(L){v(L instanceof Error?L.message:"Could not remove user")}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),s.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",s.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?s.jsxs(ue,{onClick:k,children:[s.jsx(ve,{icon:sg,size:16,className:"mr-2"}),"Add user"]}):null]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,s.jsx(Ze,{className:"border-border bg-card overflow-hidden",children:s.jsx(Qe,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):E.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:"No users found."}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"User"}),s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Access Summary"}),s.jsx("th",{className:"px-4 py-2.5",children:"Status"}),a&&s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:E.map(R=>{const L=l.find(I=>I.id===R.groupId||I.id===R.role),te=(L==null?void 0:L.color)||"#10B981",K=(L==null?void 0:L.name)||$y[R.yamlOwner?"owner":R.role]||R.role;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs(bs,{className:"size-7",children:[s.jsx(eo,{src:R.avatar,alt:R.username}),s.jsx(ys,{className:"text-[10px]",children:(R.username||R.id).slice(0,2).toUpperCase()})]}),s.jsxs("div",{className:"min-w-0 leading-tight",children:[s.jsxs("p",{className:"truncate font-semibold text-foreground text-xs",children:[P2(R),R.id===(t==null?void 0:t.id)?s.jsx("span",{className:"text-[11px] text-primary font-normal ml-1",children:"(you)"}):""]}),s.jsx("p",{className:"truncate text-[10px] text-muted-foreground font-mono",children:R.id})]})]})}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:te}}),s.jsx("span",{className:"font-medium text-xs text-foreground",children:K}),R.yamlOwner&&s.jsx("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Config Owner"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:kP(R)}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:R.enabled?s.jsx(Fn,{className:"text-[10px] px-2 py-0.5 bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15 border-emerald-500/20",children:"Active"}):s.jsx(Fn,{variant:"outline",className:"text-[10px] px-2 py-0.5",children:"Disabled"})}),a&&s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>N(R),children:[s.jsx(ve,{icon:v8,size:13}),"Edit"]}),!R.yamlOwner&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>_(R.id),children:[s.jsx(ve,{icon:wi,size:13}),"Remove"]})]})})]},R.id)})})]})})})}),s.jsx(Qs,{open:!!b,onOpenChange:R=>!R&&w(null),children:s.jsxs(hs,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:(b==null?void 0:b.mode)==="add"?"Add dashboard user":"Edit user"}),s.jsx(vs,{children:b!=null&&b.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":P8[(b==null?void 0:b.role)??"viewer"]})]}),b?s.jsxs("div",{className:"space-y-4",children:[b.mode==="add"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"discord-id",children:"Discord user ID"}),s.jsx(De,{id:"discord-id",value:b.id,onChange:R=>w({...b,id:R.target.value}),placeholder:"829112572816130058"})]}):null,s.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Display name (optional)"}),s.jsx(De,{value:b.globalName,onChange:R=>w({...b,globalName:R.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Username (optional)"}),s.jsx(De,{value:b.username,onChange:R=>w({...b,username:R.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{children:"Permission Group"}),s.jsxs(Ca,{value:b.role,disabled:b.yamlOwner,onValueChange:R=>{const L=l.find(te=>te.id===R);L?w({...b,role:R,permissions:L.permissions}):T(R)},children:[s.jsx(Br,{children:s.jsx(Sa,{})}),s.jsx($r,{children:b.yamlOwner?s.jsx(vt,{value:"owner",children:"Owner"}):l.length>0?l.map(R=>s.jsx(vt,{value:R.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2.5 rounded-full shrink-0",style:{backgroundColor:R.color||"#10B981"}}),s.jsx("span",{children:R.name})]})},R.id)):SP.map(R=>s.jsx(vt,{value:R,children:$y[R]},R))})]})]}),s.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[s.jsx("span",{className:"text-sm",children:"Account enabled"}),s.jsx(kt,{checked:b.enabled,disabled:b.yamlOwner,onCheckedChange:R=>w({...b,enabled:R})})]}),b.role==="custom"&&!b.yamlOwner?s.jsx(EP,{permissions:b.permissions,onChange:R=>w({...b,permissions:R})}):null]}):null,s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>w(null),children:"Cancel"}),s.jsx(ue,{disabled:y||!a||(b==null?void 0:b.mode)==="add"&&!/^\d{17,20}$/.test(b.id.trim()),onClick:()=>void M(),children:y?"Saving…":"Save"})]})]})})]})}const MP=[{name:"Emerald",hex:"#10B981"},{name:"Blue",hex:"#3B82F6"},{name:"Purple",hex:"#8B5CF6"},{name:"Amber",hex:"#F59E0B"},{name:"Red",hex:"#EF4444"},{name:"Cyan",hex:"#06B6D4"},{name:"Gray",hex:"#6B7280"}];function RP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(kt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(kt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(kt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(kt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(kt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var v;const g=((v=t.configs)==null?void 0:v[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(kt,{checked:g.view,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,view:b}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(kt,{checked:g.edit,disabled:a,onCheckedChange:b=>o({configs:{...t.configs,[d]:{...g,edit:b,view:b?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(kt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function AP(){const{permissions:t,impersonateGroup:n,impersonatedGroup:a,stopImpersonation:o}=qt(),c=Mn(t,"users.manage"),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,v]=f.useState(null),[b,w]=f.useState(null),[y,C]=f.useState(!1),[S,E]=f.useState("add"),[k,N]=f.useState(!1),[T,M]=f.useState(""),[_,R]=f.useState(""),[L,te]=f.useState(""),[K,I]=f.useState("#10B981"),[G,Y]=f.useState(""),[ce,fe]=f.useState(ls("viewer")),se=async()=>{var V;p(!0),v(null);try{const O=await Ne.listGroups();d(((V=O.data)==null?void 0:V.groups)||[])}catch(O){v(O instanceof Error?O.message:"Failed to load groups")}finally{p(!1)}};f.useEffect(()=>{se()},[]);const P=()=>{E("add"),M(""),R(""),te(""),I("#10B981"),Y(""),fe(ls("viewer")),C(!0)},Z=V=>{E("edit"),M(V.id),R(V.name),te(V.description||""),I(V.color||"#10B981"),Y(V.discordRoleId||""),fe(V.permissions||ls("viewer")),C(!0)},ae=async()=>{if(!_.trim()){v("Group name is required");return}N(!0),v(null);try{S==="add"?(await Ne.createGroup({name:_.trim(),description:L.trim(),color:K,discordRoleId:G.trim()||null,permissions:ce}),w(`Group "${_}" created successfully.`)):(await Ne.updateGroup(T,{name:_.trim(),description:L.trim(),color:K,discordRoleId:G.trim()||null,permissions:ce}),w(`Group "${_}" updated successfully.`)),C(!1),await se()}catch(V){v(V instanceof Error?V.message:"Failed to save group")}finally{N(!1)}},re=async V=>{if(!V.isSystem&&confirm(`Are you sure you want to delete the group "${V.name}"?`))try{await Ne.deleteGroup(V.id),w(`Group "${V.name}" deleted.`),await se()}catch(O){v(O instanceof Error?O.message:"Failed to delete group")}};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Permission Groups"}),s.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create custom permission groups, assign staff members, and optionally sync with Discord Role IDs."})]}),c&&s.jsxs(ue,{onClick:P,className:"shrink-0 gap-2 bg-primary",children:[s.jsx(ve,{icon:sg,size:18}),"Create Group"]})]}),g&&s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}),b&&s.jsx(Ye,{className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-500",children:s.jsxs(qe,{className:"flex items-center justify-between",children:[s.jsx("span",{children:b}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>w(null),children:"Dismiss"})]})}),s.jsx(Ze,{className:"border-border bg-card overflow-hidden",children:s.jsx(Qe,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Be,{className:"h-8 w-full rounded-md"}),s.jsx(Be,{className:"h-8 w-full rounded-md"})]}):l.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:'No permission groups found. Click "Create Group" to add one.'}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Description"}),s.jsx("th",{className:"px-4 py-2.5",children:"Discord Role ID"}),s.jsx("th",{className:"px-4 py-2.5",children:"Enabled Permissions"}),s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:l.map(V=>{var O,D,$,H,X,xe,q;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"size-2.5 rounded-full shrink-0 shadow-sm",style:{backgroundColor:V.color||"#10B981"}}),s.jsx("span",{className:"text-foreground font-semibold text-xs",children:V.name}),V.isSystem&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-secondary text-secondary-foreground border border-border/80",children:[s.jsx(ve,{icon:qu,size:10}),"System"]})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:V.description||"—"}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:V.discordRoleId?s.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-muted-foreground font-mono bg-secondary/50 px-2 py-0.5 rounded border border-border/50",children:[s.jsx(ve,{icon:qu,size:12,className:"text-primary"}),V.discordRoleId]}):s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"—"})}),s.jsx("td",{className:"px-4 py-2.5",children:s.jsxs("div",{className:"flex flex-wrap gap-1 max-w-md",children:[((O=V.permissions)==null?void 0:O.overview)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Overview"}),(((D=V.permissions)==null?void 0:D.tickets)??(($=V.permissions)==null?void 0:$.overview))&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:"Tickets"}),((H=V.permissions)==null?void 0:H.transcripts)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-purple-500/10 text-purple-400 border border-purple-500/20",children:"Transcripts"}),((X=V.permissions)==null?void 0:X.logs)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-blue-500/10 text-blue-400 border border-blue-500/20",children:"Logs"}),((q=(xe=V.permissions)==null?void 0:xe.users)==null?void 0:q.manage)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20",children:"User Mgmt"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:`h-7 px-2 text-xs gap-1 ${(a==null?void 0:a.id)===V.id?"text-amber-400 font-bold bg-amber-500/15 border border-amber-500/30":"text-amber-400 hover:text-amber-300 hover:bg-amber-500/10"}`,onClick:()=>(a==null?void 0:a.id)===V.id?o():n(V.id),children:[s.jsx(ve,{icon:qu,size:13}),(a==null?void 0:a.id)===V.id?"Active Preview":"View as Group"]}),c&&V.id!=="owner"&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>Z(V),children:[s.jsx(ve,{icon:D2,size:13}),"Edit"]}),c&&!V.isSystem&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>re(V),children:[s.jsx(ve,{icon:wi,size:13}),"Delete"]})]})})]},V.id)})})]})})})}),s.jsx(Qs,{open:y,onOpenChange:C,children:s.jsxs(hs,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:S==="add"?"Create Permission Group":`Edit Group: ${_}`}),s.jsx(vs,{children:"Configure group metadata, custom color badge, Discord role sync, and permission rules."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-name",children:"Group Name"}),s.jsx(De,{id:"group-name",placeholder:"e.g. Support Staff",value:_,onChange:V=>R(V.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-color",children:"Color Badge"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(tf,{value:K,onChange:I}),s.jsx(De,{value:K,onChange:V=>I(V.target.value),placeholder:"#10B981",className:"w-28 font-mono text-sm uppercase"}),s.jsx("div",{className:"flex flex-wrap gap-1 ml-auto",children:MP.map(V=>s.jsx("button",{type:"button",className:"size-6 rounded-full border border-white/20 transition-transform hover:scale-110",style:{backgroundColor:V.hex},onClick:()=>I(V.hex),title:V.name},V.hex))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(_e,{htmlFor:"group-desc",children:"Description"}),s.jsx(De,{id:"group-desc",placeholder:"Brief description of what members in this group can access...",value:L,onChange:V=>te(V.target.value)})]}),s.jsx(TS,{id:"discord-role-id",label:"Discord Role ID (Optional Auto-Sync)",description:"If provided, Discord users with this Role ID will automatically inherit this group upon login.",kind:"role",value:G,onChange:V=>Y(String(V??""))}),s.jsxs("div",{className:"pt-2",children:[s.jsx("h4",{className:"text-sm font-semibold mb-3",children:"Group Permission Matrix"}),s.jsx(RP,{permissions:ce,onChange:fe})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",onClick:()=>C(!1),disabled:k,children:"Cancel"}),s.jsx(ue,{onClick:ae,disabled:k,className:"bg-primary",children:k?"Saving...":S==="add"?"Create Group":"Save Changes"})]})]})})]})}function _P({children:t}){const{isAuthenticated:n,loading:a}=qt();return a?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?s.jsx(s.Fragment,{children:t}):s.jsx(ya,{to:"/login",replace:!0})}function DP(){const{complete:t,loading:n}=fS(),a=Kn();return n?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):t?a.pathname==="/setup"?s.jsx(ya,{to:"/login",replace:!0}):s.jsxs(Py,{children:[s.jsx(cn,{path:"/login",element:s.jsx(bz,{})}),s.jsxs(cn,{element:s.jsx(_P,{children:s.jsx(TA,{})}),children:[s.jsx(cn,{index:!0,element:s.jsx(Vz,{})}),s.jsx(cn,{path:"system",element:s.jsx(ga,{permission:"overview",children:s.jsx(sP,{})})}),s.jsx(cn,{path:"settings",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(nP,{})})}),s.jsx(cn,{path:"configs",element:s.jsx(gz,{})}),s.jsx(cn,{path:"logs",element:s.jsx(ga,{permission:"logs",children:s.jsx(mP,{})})}),s.jsx(cn,{path:"tickets",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(CP,{})})}),s.jsx(cn,{path:"transcripts",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(jP,{})})}),s.jsx(cn,{path:"users",element:s.jsx(ga,{permission:"users.view",children:s.jsx(TP,{})})}),s.jsx(cn,{path:"groups",element:s.jsx(ga,{permission:"users.view",children:s.jsx(AP,{})})}),s.jsx(cn,{path:"addons",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(Fz,{})})}),s.jsx(cn,{path:"addons/builder",element:s.jsx(ga,{permission:"settings.update",children:s.jsx(Yz,{})})})]}),s.jsx(cn,{path:"*",element:s.jsx(ya,{to:"/",replace:!0})})]}):s.jsxs(Py,{children:[s.jsx(cn,{path:"/setup",element:s.jsx(Lz,{})}),s.jsx(cn,{path:"*",element:s.jsx(ya,{to:"/setup",replace:!0})})]})}function OP({...t}){return s.jsx(KO,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...t})}Zz();_3.createRoot(document.getElementById("root")).render(s.jsx(f.StrictMode,{children:s.jsx(a8,{children:s.jsx(aC,{children:s.jsx(B8,{children:s.jsx(MA,{children:s.jsxs(U8,{children:[s.jsx(DP,{}),s.jsx(OP,{})]})})})})})})); + `},e2=SL(TL)(t5),ML={config:EL},RL=function(){for(var n=arguments.length,a=new Array(n),o=0;o{o.current=!1}:t,n)}var Yn=XL;function zl(){}function si(t,n,a,o){return ZL(t,o)||QL(t,n,a,o)}function ZL(t,n){return t.editor.getModel(l5(t,n))}function QL(t,n,a,o){return t.editor.createModel(n,a,o?l5(t,o):void 0)}function l5(t,n){return t.Uri.parse(n)}function JL({original:t,modified:n,language:a,originalLanguage:o,modifiedLanguage:c,originalModelPath:l,modifiedModelPath:d,keepCurrentOriginalModel:m=!1,keepCurrentModifiedModel:p=!1,theme:g="light",loading:b="Loading...",options:v={},height:w="100%",width:y="100%",className:C,wrapperProps:S={},beforeMount:N=zl,onMount:E=zl}){let[T,M]=f.useState(!1),[k,_]=f.useState(!0),R=f.useRef(null),L=f.useRef(null),ne=f.useRef(null),X=f.useRef(E),I=f.useRef(N),H=f.useRef(!1);i5(()=>{let se=s5.init();return se.then(P=>(L.current=P)&&_(!1)).catch(P=>(P==null?void 0:P.type)!=="cancelation"&&console.error("Monaco initialization: error:",P)),()=>R.current?de():se.cancel()}),Yn(()=>{if(R.current&&L.current){let se=R.current.getOriginalEditor(),P=si(L.current,t||"",o||a||"text",l||"");P!==se.getModel()&&se.setModel(P)}},[l],T),Yn(()=>{if(R.current&&L.current){let se=R.current.getModifiedEditor(),P=si(L.current,n||"",c||a||"text",d||"");P!==se.getModel()&&se.setModel(P)}},[d],T),Yn(()=>{let se=R.current.getModifiedEditor();se.getOption(L.current.editor.EditorOption.readOnly)?se.setValue(n||""):n!==se.getValue()&&(se.executeEdits("",[{range:se.getModel().getFullModelRange(),text:n||"",forceMoveMarkers:!0}]),se.pushUndoStop())},[n],T),Yn(()=>{var se,P;(P=(se=R.current)==null?void 0:se.getModel())==null||P.original.setValue(t||"")},[t],T),Yn(()=>{let{original:se,modified:P}=R.current.getModel();L.current.editor.setModelLanguage(se,o||a||"text"),L.current.editor.setModelLanguage(P,c||a||"text")},[a,o,c],T),Yn(()=>{var se;(se=L.current)==null||se.editor.setTheme(g)},[g],T),Yn(()=>{var se;(se=R.current)==null||se.updateOptions(v)},[v],T);let q=f.useCallback(()=>{var W;if(!L.current)return;I.current(L.current);let se=si(L.current,t||"",o||a||"text",l||""),P=si(L.current,n||"",c||a||"text",d||"");(W=R.current)==null||W.setModel({original:se,modified:P})},[a,n,c,t,o,l,d]),ce=f.useCallback(()=>{var se;!H.current&&ne.current&&(R.current=L.current.editor.createDiffEditor(ne.current,{automaticLayout:!0,...v}),q(),(se=L.current)==null||se.editor.setTheme(g),M(!0),H.current=!0)},[v,g,q]);f.useEffect(()=>{T&&X.current(R.current,L.current)},[T]),f.useEffect(()=>{!k&&!T&&ce()},[k,T,ce]);function de(){var P,W,oe,ae;let se=(P=R.current)==null?void 0:P.getModel();m||((W=se==null?void 0:se.original)==null||W.dispose()),p||((oe=se==null?void 0:se.modified)==null||oe.dispose()),(ae=R.current)==null||ae.dispose()}return ve.createElement(o5,{width:y,height:w,isEditorReady:T,loading:b,_ref:ne,className:C,wrapperProps:S})}var ez=JL;f.memo(ez);function tz(t){let n=f.useRef();return f.useEffect(()=>{n.current=t},[t]),n.current}var nz=tz,Vu=new Map;function rz({defaultValue:t,defaultLanguage:n,defaultPath:a,value:o,language:c,path:l,theme:d="light",line:m,loading:p="Loading...",options:g={},overrideServices:b={},saveViewState:v=!0,keepCurrentModel:w=!1,width:y="100%",height:C="100%",className:S,wrapperProps:N={},beforeMount:E=zl,onMount:T=zl,onChange:M,onValidate:k=zl}){let[_,R]=f.useState(!1),[L,ne]=f.useState(!0),X=f.useRef(null),I=f.useRef(null),H=f.useRef(null),q=f.useRef(T),ce=f.useRef(E),de=f.useRef(),se=f.useRef(o),P=nz(l),W=f.useRef(!1),oe=f.useRef(!1);i5(()=>{let O=s5.init();return O.then(D=>(X.current=D)&&ne(!1)).catch(D=>(D==null?void 0:D.type)!=="cancelation"&&console.error("Monaco initialization: error:",D)),()=>I.current?G():O.cancel()}),Yn(()=>{var D,B,V,Z;let O=si(X.current,t||o||"",n||c||"",l||a||"");O!==((D=I.current)==null?void 0:D.getModel())&&(v&&Vu.set(P,(B=I.current)==null?void 0:B.saveViewState()),(V=I.current)==null||V.setModel(O),v&&((Z=I.current)==null||Z.restoreViewState(Vu.get(l))))},[l],_),Yn(()=>{var O;(O=I.current)==null||O.updateOptions(g)},[g],_),Yn(()=>{!I.current||o===void 0||(I.current.getOption(X.current.editor.EditorOption.readOnly)?I.current.setValue(o):o!==I.current.getValue()&&(oe.current=!0,I.current.executeEdits("",[{range:I.current.getModel().getFullModelRange(),text:o,forceMoveMarkers:!0}]),I.current.pushUndoStop(),oe.current=!1))},[o],_),Yn(()=>{var D,B;let O=(D=I.current)==null?void 0:D.getModel();O&&c&&((B=X.current)==null||B.editor.setModelLanguage(O,c))},[c],_),Yn(()=>{var O;m!==void 0&&((O=I.current)==null||O.revealLine(m))},[m],_),Yn(()=>{var O;(O=X.current)==null||O.editor.setTheme(d)},[d],_);let ae=f.useCallback(()=>{var O;if(!(!H.current||!X.current)&&!W.current){ce.current(X.current);let D=l||a,B=si(X.current,o||t||"",n||c||"",D||"");I.current=(O=X.current)==null?void 0:O.editor.create(H.current,{model:B,automaticLayout:!0,...g},b),v&&I.current.restoreViewState(Vu.get(D)),X.current.editor.setTheme(d),m!==void 0&&I.current.revealLine(m),R(!0),W.current=!0}},[t,n,a,o,c,l,g,b,v,d,m]);f.useEffect(()=>{_&&q.current(I.current,X.current)},[_]),f.useEffect(()=>{!L&&!_&&ae()},[L,_,ae]),se.current=o,f.useEffect(()=>{var O,D;_&&M&&((O=de.current)==null||O.dispose(),de.current=(D=I.current)==null?void 0:D.onDidChangeModelContent(B=>{oe.current||M(I.current.getValue(),B)}))},[_,M]),f.useEffect(()=>{if(_){let O=X.current.editor.onDidChangeMarkers(D=>{var V;let B=(V=I.current.getModel())==null?void 0:V.uri;if(B&&D.find(Z=>Z.path===B.path)){let Z=X.current.editor.getModelMarkers({resource:B});k==null||k(Z)}});return()=>{O==null||O.dispose()}}return()=>{}},[_,k]);function G(){var O,D;(O=de.current)==null||O.dispose(),w?v&&Vu.set(l,I.current.saveViewState()):(D=I.current.getModel())==null||D.dispose(),I.current.dispose()}return ve.createElement(o5,{width:y,height:C,isEditorReady:_,loading:p,_ref:H,className:S,wrapperProps:N})}var az=rz,sz=f.memo(az),oz=sz;function iz(t){return t!==null&&typeof t=="object"&&"Command"in t}function lz(t){return Object.entries(t).filter(([,n])=>iz(n)).map(([n,a])=>({key:n,...a}))}function cz({data:t,onChange:n}){const a=lz(t);function o(c,l){const d=t[c];n({...t,[c]:{...d,...l}})}return a.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(c=>s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:s.jsx(xe,{icon:ds,size:18})}),s.jsx(ft,{className:"text-base",children:c.key})]}),s.jsxs(et,{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(Ae,{htmlFor:`${c.key}-enabled`,children:"Enabled"}),s.jsx(Mt,{id:`${c.key}-enabled`,checked:c.Enabled!==!1,onCheckedChange:l=>o(c.key,{Enabled:l})})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(Ae,{children:"Slash command"}),s.jsx(_e,{value:c.Command??"",onChange:l=>o(c.key,{Command:l.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(Ae,{children:"Description"}),s.jsx(_e,{value:c.Description??"",onChange:l=>o(c.key,{Description:l.target.value}),className:"border-border bg-secondary/30"})]})]})]},c.key))})}function uz(t,n){let a=structuredClone(n);if(t==="supportbot"){const o=kr(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Gn(a,"General.Token","BOT_TOKEN"))}if(t==="supportbot-ai"){const o=kr(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Gn(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function dz(t,n,a,o){const c={};for(const l of n)for(const d of l.fields){const m=kr(a,d.path),p=kr(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(p)&&(c[`${t}:${d.path}`]=m)}return c}function fz(t,n){const a=new Map,o=[];for(const l of t){const d=l.path.split(".");if(d.length>=5&&d[1]==="DepartmentSystem"&&d[2]==="Departments"){const m=d[3],p=a.get(m)??[];p.push(l),a.set(m,p)}else if(d.length>=3){const m=d[1],p=a.get(m)??[];p.push(l),a.set(m,p)}else o.push(l)}if(a.size===0)return{standalone:t,groups:[]};const c=[...a.entries()].map(([l,d])=>{const m=["enabled","name","description","emoji","category","role","channelprefix","defaultpriority","questions"];d.sort((b,v)=>{var N,E;const w=((N=b.path.split(".").pop())==null?void 0:N.toLowerCase())||"",y=((E=v.path.split(".").pop())==null?void 0:E.toLowerCase())||"",C=m.indexOf(w),S=m.indexOf(y);return C!==-1&&S!==-1?C-S:C!==-1?-1:S!==-1?1:w.localeCompare(y)});const p=d.find(b=>b.path.toLowerCase().endsWith(".name")||b.path.toLowerCase().endsWith(".title"));let g="";if(p&&n){const b=kr(n,p.path);typeof b=="string"&&b.trim()&&(g=b.trim())}return g||(g=l.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,b=>b.toUpperCase())),{key:l,name:g,fields:d}});return{standalone:o,groups:c}}function mz({configFile:t}){const{permissions:n,canEditConfig:a}=Yt(),o=Rn(n,"configs.raw_yaml"),c=!a(t),[l,d]=f.useState(null),[m,p]=f.useState(null),[g,b]=f.useState(!0),[v,w]=f.useState(!1),[y,C]=f.useState(""),[S,N]=f.useState(""),[E,T]=f.useState("visual");f.useEffect(()=>{!o&&E==="yaml"&&T("visual")},[o,E]);const[M,k]=f.useState(""),[_,R]=f.useState(""),[L]=wd(),[ne,X]=f.useState(()=>L.get("tab")||null),[I,H]=f.useState(!1),[q,ce]=f.useState(""),[de,se]=f.useState(""),P=()=>{const K=q.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"");if(!K||!l)return;const ge=de.trim()||K,me=`Ticket.DepartmentSystem.Departments.${K}`,$={...l};Gn($,`${me}.Name`,ge),Gn($,`${me}.Description`,`Open a ${ge} ticket`),Gn($,`${me}.Emoji`,"🎫"),Gn($,`${me}.Category`,"CATEGORY_ID"),Gn($,`${me}.Role`,"ROLE_ID"),Gn($,`${me}.ChannelPrefix`,`${K}-`),Gn($,`${me}.DefaultPriority`,"normal"),Gn($,`${me}.Questions`,["What do you need assistance with?"]),d($),H(!1),ce(""),se("")},W=K=>{if(!l)return;const ge=`Ticket.DepartmentSystem.Departments.${K}`,me=JSON.parse(JSON.stringify(l));if(Object.keys(me).forEach($=>{($.startsWith(ge)||$===ge)&&delete me[$]}),me.Ticket&&typeof me.Ticket=="object"){const $=me.Ticket.DepartmentSystem;$&&typeof $=="object"&&$.Departments&&typeof $.Departments=="object"&&delete $.Departments[K]}d(me)},oe=FM(t),ae=f.useMemo(()=>!oe||oe==="commands"||!l?oe:ZO(oe,l),[oe,l]);f.useEffect(()=>{var K;if(ae&&ae!=="commands"){const ge=L.get("tab");if(ge&&ae.find(me=>me.title.toLowerCase()===ge.toLowerCase())){const me=ae.find($=>$.title.toLowerCase()===ge.toLowerCase());me&&me.title!==ne&&X(me.title)}else(!ne||!ae.find(me=>me.title===ne))&&X(((K=ae[0])==null?void 0:K.title)||null)}},[ae,ne,L]);const G=f.useCallback(async()=>{b(!0),C(""),N("");try{const ge=(await Ne.getConfigJson(t)).data??{},me=uz(t,ge);d(me),p(me);const ie=(await Ne.getConfigRaw(t)).data??"",ye=z8(ie,t);k(ye),R(ye)}catch(K){C(K instanceof Error?K.message:"Failed to load config")}finally{b(!1)}},[t]);f.useEffect(()=>{G()},[G]);function O(K,ge){d(me=>me&&Gn(me,K,ge))}async function D(){if(!(c||M===_)){w(!0),C(""),N("");try{const K=await nd(()=>Ne.saveConfigRaw(t,M));N(K.message||"Config saved."),await G()}catch(K){C(K instanceof Error?K.message:"Save failed")}finally{w(!1)}}}async function B(){if(!(c||!l||!m)){if(E==="yaml"){await D();return}w(!0),C(""),N("");try{if(oe==="commands"){const K={};for(const me of Object.keys(l))JSON.stringify(l[me])!==JSON.stringify(m[me])&&(K[`${t}:${me}`]=l[me]);if(Object.keys(K).length===0){N("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(K));N(ge.message||"")}else if(ae&&ae!=="commands"){const K=dz(t,ae,l,m);if(Object.keys(K).length===0){N("No changes to save.");return}const ge=await nd(()=>Ne.updateConfigFields(K));N(ge.message||"")}await G()}catch(K){C(K instanceof Error?K.message:"Save failed")}finally{w(!1)}}}if(oe===null)return s.jsx(Ye,{children:s.jsx(qe,{children:"No visual editor available for this file."})});if(g)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(Ue,{className:"h-24 w-full rounded-xl"}),s.jsx(Ue,{className:"h-48 w-full rounded-xl"})]});if(!l)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y||"Failed to load"})});const V=m&&JSON.stringify(l)!==JSON.stringify(m),be=E==="yaml"?M!==_:V;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[o?s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:E==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>T("visual"),children:"Visual"}),s.jsx(ue,{type:"button",variant:E==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>T("yaml"),children:"YAML"})]}):null,s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[be?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,s.jsx(ue,{variant:"outline",size:"sm",onClick:G,disabled:g||v,children:"Reload"}),c?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:B,disabled:v||!be,children:[s.jsx(xe,{icon:Sd,size:16,className:"mr-1.5"}),v?"Saving…":"Save"]})]})]}),y?s.jsxs(Ye,{variant:"destructive",children:[s.jsx(xe,{icon:ig,size:18}),s.jsx(qe,{children:y})]}):null,S?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:S})}):null,E==="yaml"?s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"pb-3",children:[s.jsx(ft,{className:"text-base",children:"Raw YAML"}),s.jsx(Ot,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),s.jsx(et,{className:"h-[min(520px,60vh)] overflow-hidden rounded-b-xl border-t border-border p-0",children:s.jsx(oz,{height:"100%",language:"yaml",theme:"vs-dark",value:M,onChange:K=>k(K||""),options:{readOnly:c,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,padding:{top:16},tabSize:2}})})]}):oe==="commands"?s.jsx(cz,{data:l,onChange:K=>d(K)}):ae&&ae!=="commands"?s.jsxs("div",{className:"grid gap-6 lg:grid-cols-[200px_1fr]",children:[s.jsx("nav",{className:"flex flex-col gap-1",children:ae.map(K=>s.jsx("button",{onClick:()=>X(K.title),className:pe("text-left px-3 py-2 text-sm rounded-md transition-colors",ne===K.title?"bg-primary text-primary-foreground font-medium":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:K.title},K.title))}),s.jsx("div",{className:"min-w-0",children:ae.filter(K=>K.title===ne).map(K=>s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"pb-3 flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(ft,{className:"text-base",children:K.title}),K.description?s.jsx(Ot,{children:K.description}):null]}),K.title==="Ticket Departments"&&!c&&s.jsxs(ue,{type:"button",size:"sm",variant:"outline",onClick:()=>H(!0),className:"gap-1.5 text-xs h-8 shrink-0",children:[s.jsx(xe,{icon:sg,size:14})," Add Department"]})]}),s.jsx(et,{className:"space-y-6",children:(()=>{const{standalone:ge,groups:me}=fz(K.fields,l);return s.jsxs(s.Fragment,{children:[ge.length>0&&s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:ge.map($=>s.jsx("div",{className:$.type==="textarea"||$.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:$,value:kr(l,$.path),readOnly:c,onChange:ie=>O($.path,ie)})},$.path))}),me.map($=>s.jsxs("div",{className:"rounded-xl border border-border bg-card/60 p-4 space-y-4 shadow-sm transition-all hover:border-primary/40",children:[s.jsxs("div",{className:"flex items-center justify-between border-b border-border/60 pb-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-semibold text-base text-foreground",children:$.name}),s.jsx("span",{className:"text-xs font-mono px-2.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20 font-medium",children:K.title==="Ticket Departments"?`Ticket.${$.key}`:$.key})]}),K.title==="Ticket Departments"&&$.key!=="DepartmentSystem"&&!c&&s.jsx(ue,{type:"button",size:"sm",variant:"ghost",onClick:()=>W($.key),className:"h-7 w-7 p-0 text-muted-foreground hover:text-destructive",title:"Delete Department",children:s.jsx(xe,{icon:bi,size:14})})]}),s.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:$.fields.map(ie=>s.jsx("div",{className:ie.type==="textarea"||ie.type==="stringList"?"sm:col-span-2":"",children:s.jsx(pd,{field:ie,value:kr(l,ie.path),readOnly:c,onChange:ye=>O(ie.path,ye)})},ie.path))})]},$.key))]})})()})]},K.title))})]}):null,s.jsx(Qs,{open:I,onOpenChange:H,children:s.jsxs(hs,{className:"sm:max-w-[400px]",children:[s.jsxs(gs,{children:[s.jsx(xs,{className:"text-base",children:"Add Ticket Department"}),s.jsx(bs,{className:"text-xs",children:"Create a new support department for ticket creation."})]}),s.jsxs("div",{className:"space-y-3 py-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(Ae,{className:"text-xs font-semibold",children:"Department Key (Internal ID)"}),s.jsx(_e,{placeholder:"billing",value:q,onChange:K=>ce(K.target.value.toLowerCase().replace(/[^a-z0-9_-]/g,"")),className:"text-xs font-mono border-border bg-secondary/30"}),s.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["e.g. ",s.jsx("code",{children:"billing"}),", ",s.jsx("code",{children:"technical"}),", ",s.jsx("code",{children:"sales"})]})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(Ae,{className:"text-xs font-semibold",children:"Department Display Name"}),s.jsx(_e,{placeholder:"Billing & Sales Support",value:de,onChange:K=>se(K.target.value),className:"text-xs border-border bg-secondary/30"})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>H(!1),className:"text-xs",children:"Cancel"}),s.jsx(ue,{size:"sm",onClick:P,disabled:!q.trim(),className:"text-xs bg-primary font-semibold",children:"Create Department"})]})]})})]})}const pz=Ne.listConfigs(),hz={supportbot:"Bot config","ticket-panel":"Ticket panel",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function gz(){var M,k;const{permissions:t,canViewConfig:n}=Yt(),{files:a}=$2(),[o,c]=wd(),l=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>pz.filter(_=>n(_)),[n]),p=f.useMemo(()=>d?a:[],[d,a]),g=f.useMemo(()=>[...m,...p.map(_=>_l(_))],[m,p]),b=g[0]??"",[v,w]=f.useState(()=>l&&g.includes(l)?l:b);if(f.useEffect(()=>{l&&g.includes(l)?w(l):g.includes(v)||(w(b),b&&c({file:b}))},[l,g,v,b,c]),g.length===0)return s.jsx(ya,{to:mg(t),replace:!0});const y=H8(v),C=(y==null?void 0:y.type)==="addon",S=C?y.file:null,N=C?H2(S):hz[v]??"Configuration",E=C?!!((M=t==null?void 0:t.configs.supportbot)!=null&&M.edit):t?!!((k=t.configs[v])!=null&&k.edit):!1,T=C?S:`${v}.yml`;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:N}),s.jsx("p",{className:"text-muted-foreground",children:E?`Edit ${T} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${T} — you do not have permission to save changes.`})]}),s.jsx("div",{className:"mt-6",children:C&&S?s.jsx(WO,{filename:S},S):s.jsx(mz,{configFile:v},v)})]})}const xz={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function bz(t){return t?xz[t]||"Sign-in failed. Please try again.":""}function vz(){const{branding:t}=Ed(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Yt(),[c]=wd(),l=f.useMemo(()=>bz(c.get("error")),[c]);return!a&&n?s.jsx(ya,{to:"/",replace:!0}):s.jsx("div",{className:"relative flex min-h-svh items-center justify-center bg-[#0c0c10] p-4 overflow-hidden",children:s.jsxs(Je,{className:"relative z-10 w-full max-w-md overflow-hidden rounded-3xl border border-white/10 bg-card/30 p-2 shadow-2xl backdrop-blur-2xl",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-white/5 to-transparent pointer-events-none"}),s.jsxs(dt,{className:"space-y-6 pt-10 pb-4 text-center",children:[s.jsx("div",{className:"mx-auto flex size-28 items-center justify-center overflow-hidden rounded-3xl bg-white/5 p-4 shadow-inner ring-1 ring-white/10 transition-transform duration-500 hover:scale-105",children:s.jsx("img",{src:"/logo.png",alt:"SupportBot Logo",className:"h-full w-full object-contain drop-shadow-xl"})}),s.jsxs("div",{children:[s.jsx(ft,{className:"bg-gradient-to-br from-white to-white/50 bg-clip-text text-3xl font-extrabold tracking-tight text-transparent",children:t.title||"SupportBot"}),s.jsx(Ot,{className:"mt-2 text-base font-medium text-white/50",children:"Sign in to your dashboard"})]})]}),s.jsxs(et,{className:"space-y-6 pb-10",children:[s.jsxs("div",{className:"text-center space-y-1",children:[s.jsx("p",{className:"text-sm font-medium text-white/50",children:"Securely authenticate using your Discord account."}),s.jsxs("p",{className:"text-xs text-white/30",children:["Credentials are configured in ",s.jsx("code",{className:"rounded bg-white/5 px-1 py-0.5 text-white/40",children:"Configs/api.yml"})]})]}),l?s.jsx(Ye,{variant:"destructive",className:"border-red-500/50 bg-red-500/10 text-red-200 backdrop-blur-md",children:s.jsx(qe,{className:"font-medium",children:l})}):null,s.jsxs(ue,{type:"button",className:"group relative w-full overflow-hidden rounded-2xl bg-primary px-8 py-6 text-base font-bold text-primary-foreground shadow-[0_0_20px_rgba(var(--primary),0.3)] transition-all duration-300 hover:scale-[1.02] hover:shadow-[0_0_30px_rgba(var(--primary),0.5)] active:scale-95",disabled:a,onClick:o,children:[s.jsx("div",{className:"absolute inset-0 translate-x-[-100%] bg-gradient-to-r from-transparent via-white/20 to-transparent transition-transform duration-1000 group-hover:translate-x-[100%]"}),s.jsxs("span",{className:"relative flex items-center justify-center gap-2",children:[s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"22",height:"22",viewBox:"0 0 127.14 96.36",fill:"currentColor",children:s.jsx("path",{d:"M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1,105.25,105.25,0,0,0,32.19-16.14c2.64-27.38-4.51-51.11-19.32-72.15ZM42.68,68.22c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C52.34,63.32,48.09,68.22,42.68,68.22Zm41.76,0c-5.28,0-9.66-4.9-9.66-10.89s4.29-10.89,9.66-10.89c5.41,0,9.75,4.9,9.66,10.89C84.44,63.32,80.19,68.22,84.44,68.22Z"})}),a?"Authenticating...":"Continue with Discord"]})]})]})]})})}const ui=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:cg},{id:"database",title:"Database",subtitle:"SQLite or MySQL engine",icon:x8},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M8},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:By},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:Nd},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:rh},{id:"emeraldApi",title:"Emerald API",subtitle:"One-click addons",icon:By}];function yz(t){return t==="oauth"?"oauth":t==="owners"?"owners":t}function wz({brandingTitle:t,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:c}){return s.jsx("div",{className:"min-h-svh bg-background",children:s.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[s.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?s.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):s.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:s.jsx(xe,{icon:cg,size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),s.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:t})]})]}),c]})})}function jz({currentIndex:t,validation:n}){const a=(t+1)/ui.length*100;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[s.jsxs("span",{children:["Step ",t+1," of ",ui.length]}),s.jsxs("span",{children:[Math.round(a),"%"]})]}),s.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),s.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:ui.map((o,c)=>{var g;const l=yz(o.id),d=(g=n[l])==null?void 0:g.ok,m=c===t,p=cs.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx(xe,{icon:jd,size:14}),o.globalName||o.username,s.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!t.bot&&!((a=t.users)!=null&&a.length)?s.jsx("p",{children:t.warning||"Verified successfully."}):null]})}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:t.error})}):null}function Sz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",s.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",s.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"botToken",children:"Bot token"}),s.jsx(_e,{id:"botToken",type:"password",autoComplete:"off",value:t.botToken,onChange:l=>n({...t,botToken:l.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.botToken}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.botToken,onClick:c,children:o?"Checking with Discord…":"Verify bot token"})})]})}function Nz({values:t,setValues:n,validation:a,validating:o,onValidate:c,onGenerate:l}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"secretKey",children:"Session secret"}),s.jsx(_e,{id:"secretKey",type:"password",autoComplete:"off",value:t.secretKey,onChange:d=>n({...t,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.secretKey}),s.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[s.jsx(ue,{type:"button",variant:"outline",onClick:l,children:"Generate secure secret"}),s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.secretKey,onClick:c,children:o?"Checking…":"Validate"})]})]})}function Ez({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",s.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(Ae,{htmlFor:"clientId",children:"Client ID"}),s.jsx(_e,{id:"clientId",value:t.clientId,onChange:l=>n({...t,clientId:l.target.value}),className:"h-11 font-mono text-sm"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(Ae,{htmlFor:"clientSecret",children:"Client Secret"}),s.jsx(_e,{id:"clientSecret",type:"password",autoComplete:"off",value:t.clientSecret,onChange:l=>n({...t,clientSecret:l.target.value}),className:"h-11 font-mono text-sm"})]})]}),s.jsx(mo,{result:a.oauth}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.clientId||!t.clientSecret,onClick:c,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function kz({values:t,setValues:n,validation:a}){async function o(){if(t.redirectUri)try{await navigator.clipboard.writeText(t.redirectUri)}catch{}}return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",s.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"redirectUri",children:"Redirect URI"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(_e,{id:"redirectUri",value:t.redirectUri,onChange:c=>n({...t,redirectUri:c.target.value}),className:"h-11 flex-1 font-mono text-xs"}),s.jsx(ue,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:s.jsx(xe,{icon:R2,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?s.jsx(mo,{result:a.redirectUri}):s.jsx(Ye,{className:"border-border bg-secondary",children:s.jsx(qe,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function Tz({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",s.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",s.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"owners",children:"Owner user IDs"}),s.jsx(Jd,{id:"owners",value:t.ownerUserIds,onChange:l=>n({...t,ownerUserIds:l.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),s.jsx(mo,{result:a.owners}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o||!t.ownerUserIds.trim(),onClick:c,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function Mz({onContinue:t}){return s.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:s.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[s.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:s.jsx(xe,{icon:jd,size:40})}),s.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),s.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",s.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),s.jsx(Ye,{className:"mt-6 text-left",children:s.jsx(qe,{children:"After restarting, sign in with Discord to open the dashboard."})}),s.jsx(ue,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:t,children:"Continue to sign in"})]})})}function Rz({currentIndex:t,validating:n,saving:a,onBack:o,onNext:c,onFinish:l}){const d=t===ui.length-1;return s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(ue,{type:"button",variant:"ghost",disabled:t===0||a,onClick:o,children:[s.jsx(xe,{icon:T2,size:18,className:"mr-1"}),"Back"]}),s.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?s.jsx(ue,{type:"button",size:"lg",disabled:a||n,onClick:l,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):s.jsxs(ue,{type:"button",size:"lg",disabled:n||a,onClick:c,children:["Continue",s.jsx(xe,{icon:lg,size:18,className:"ml-1"})]})})]})}function Az({values:t,setValues:n,validation:a,validating:o,onValidate:c}){return s.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["An Emerald Services API key is optional, but required to use the one-click addon installer in the dashboard. You can get yours from the"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Emerald Services Marketplace"}),"."]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"emeraldApiKey",children:"Emerald API key (Optional)"}),s.jsx(_e,{id:"emeraldApiKey",type:"password",autoComplete:"off",value:t.emeraldApiKey,onChange:l=>n({...t,emeraldApiKey:l.target.value}),placeholder:"em_...",className:"h-11 font-mono text-sm"})]}),s.jsx(mo,{result:a.emeraldApi}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Checking…":t.emeraldApiKey?"Verify key":"Skip step"})})]})}function _z({values:t,setValues:n,validation:a,validating:o,onValidate:c}){const l=a.database,d=t.dbDriver==="mysql";return s.jsxs("div",{className:"flex flex-1 flex-col gap-6",children:[s.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Choose your database storage engine. Select ",s.jsx("strong",{children:"SQLite"})," for instant zero-config local storage, or ",s.jsx("strong",{children:"MySQL / MariaDB"})," for external host databases."]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"sqlite"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="sqlite"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"SQLite"}),s.jsx("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-xs font-medium text-emerald-500",children:"Zero Config"})]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["Single-file SQL database stored locally at ",s.jsx("code",{className:"font-mono",children:"./Data/supportbot.db"}),". Zero extra setup required."]})]}),s.jsxs("div",{onClick:()=>n(m=>({...m,dbDriver:"mysql"})),className:pe("cursor-pointer rounded-xl border p-4 transition-all hover:border-primary",t.dbDriver==="mysql"?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border bg-card"),children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("span",{className:"font-semibold text-foreground",children:"MySQL / MariaDB"}),s.jsx("span",{className:"rounded-full bg-blue-500/10 px-2.5 py-0.5 text-xs font-medium text-blue-500",children:"External Database"})]}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Connect to a remote or local MySQL database server."})]})]}),d&&s.jsxs("div",{className:"space-y-4 rounded-xl border border-border bg-card/50 p-4",children:[s.jsx("h4",{className:"text-sm font-semibold text-foreground",children:"MySQL Connection Settings"}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(Ae,{htmlFor:"dbHost",children:"Database Host"}),s.jsx(_e,{id:"dbHost",placeholder:"127.0.0.1 or localhost",value:t.dbHost,onChange:m=>n(p=>({...p,dbHost:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"dbPort",children:"Port"}),s.jsx(_e,{id:"dbPort",placeholder:"3306",value:t.dbPort,onChange:m=>n(p=>({...p,dbPort:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"dbDatabase",children:"Database Name"}),s.jsx(_e,{id:"dbDatabase",placeholder:"supportbot",value:t.dbDatabase,onChange:m=>n(p=>({...p,dbDatabase:m.target.value})),className:"h-11 text-sm"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"dbUser",children:"Database User"}),s.jsx(_e,{id:"dbUser",placeholder:"root",value:t.dbUser,onChange:m=>n(p=>({...p,dbUser:m.target.value})),className:"h-11 text-sm font-mono"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"dbPassword",children:"Password"}),s.jsx(_e,{id:"dbPassword",type:"password",placeholder:"••••••••••••",value:t.dbPassword,onChange:m=>n(p=>({...p,dbPassword:m.target.value})),className:"h-11 text-sm font-mono"})]})]})]}),s.jsx(mo,{result:l}),s.jsx("div",{className:"mt-auto",children:s.jsx(ue,{type:"button",variant:"secondary",disabled:o,onClick:c,children:o?"Testing Connection...":"Test Connection & Validate"})})]})}function Dz(){const t=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return t+n}function Oz(t){return t.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function t2(t){return t==="oauth"?"oauth":t==="owners"?"owners":t==="database"?"database":t==="emeraldApi"?"emeraldApi":t}function Lz(){const t=ao(),{branding:n}=Ed(),{loading:a,error:o,refresh:c,status:l}=fS(),[d,m]=f.useState(0),[p,g]=f.useState({botToken:"",dbDriver:"sqlite",dbHost:"127.0.0.1",dbPort:"3306",dbUser:"",dbPassword:"",dbDatabase:"supportbot",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:"",emeraldApiKey:""}),[b,v]=f.useState({}),[w,y]=f.useState(!1),[C,S]=f.useState(!1),[N,E]=f.useState(""),[T,M]=f.useState(!1),k=ui[d];f.useEffect(()=>{l!=null&&l.suggestedRedirectUri&&!p.redirectUri&&g(H=>({...H,redirectUri:l.suggestedRedirectUri}))},[l==null?void 0:l.suggestedRedirectUri,p.redirectUri]);const _=f.useMemo(()=>({botToken:p.botToken,dbDriver:p.dbDriver,dbHost:p.dbHost,dbPort:p.dbPort,dbUser:p.dbUser,dbPassword:p.dbPassword,dbDatabase:p.dbDatabase,secretKey:p.secretKey,clientId:p.clientId,clientSecret:p.clientSecret,redirectUri:p.redirectUri,ownerUserIds:Oz(p.ownerUserIds),emeraldApiKey:p.emeraldApiKey}),[p]);async function R(){y(!0),E("");try{const H=await Ne.validateSetup(_);return v(q=>{var ce;return{...q,...(ce=H.data)==null?void 0:ce.results}}),H.data}catch(H){return E(H instanceof Error?H.message:"Validation failed"),null}finally{y(!1)}}async function L(){var ce,de;const H=t2(k.id),q=await R();return!!((de=(ce=q==null?void 0:q.results)==null?void 0:ce[H])!=null&&de.ok)}async function ne(){const H=t2(k.id),q=b[H];!(q!=null&&q.ok)&&!await L()||m(ce=>Math.min(ce+1,ui.length-1))}async function X(){S(!0),E("");try{const H=await R();if(!(H!=null&&H.ok)){E("Fix the steps marked with errors before finishing.");return}await Ne.completeSetup(_),M(!0)}catch(H){E(H instanceof Error?H.message:"Could not save setup")}finally{S(!1)}}function I(){const H={values:p,setValues:g,validation:b,validating:w};switch(k.id){case"botToken":return s.jsx(Sz,{...H,onValidate:()=>void L()});case"database":return s.jsx(_z,{...H,onValidate:()=>void L()});case"secretKey":return s.jsx(Nz,{...H,onGenerate:()=>g(q=>({...q,secretKey:Dz()})),onValidate:()=>void L()});case"oauth":return s.jsx(Ez,{...H,onValidate:()=>void L()});case"redirectUri":return s.jsx(kz,{values:p,setValues:g,validation:b});case"owners":return s.jsx(Tz,{...H,onValidate:()=>void L()});case"emeraldApi":return s.jsx(Az,{...H,onValidate:()=>void L()})}}return a?s.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:s.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[s.jsx(Ue,{className:"h-14 w-64"}),s.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[s.jsx(Ue,{className:"hidden h-80 lg:block"}),s.jsx(Ue,{className:"h-[520px] rounded-2xl"})]})]})}):s.jsxs(wz,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt??void 0,hasFavicon:n.hasFavicon,children:[o?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:o})}):null,N?s.jsx(Ye,{variant:"destructive",className:"mb-6",children:s.jsx(qe,{children:N})}):null,T?s.jsx(Mz,{onContinue:async()=>{await c(),t("/login",{replace:!0})}}):s.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[s.jsx(jz,{currentIndex:d,validation:b}),s.jsx(Cz,{step:k,footer:s.jsx(Rz,{currentIndex:d,validating:w,saving:C,onBack:()=>m(H=>Math.max(0,H-1)),onNext:()=>void ne(),onFinish:()=>void X()}),children:I()})]})]})}const zz={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function Pz({title:t,icon:n,href:a,badge:o="Configured",status:c="done"}){return s.jsxs(en,{to:a,className:pe("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[s.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:s.jsx(xe,{icon:n,size:20})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate font-semibold",children:t}),s.jsx("span",{className:pe("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",zz[c]),children:o})]})]})}function Iz({percent:t,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:c="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,t)),p=d-m/100*d;return s.jsxs("div",{className:pe("relative inline-flex",a),children:[s.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),s.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:p,className:c})]}),s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[s.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),s.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const Uz={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function Bz({title:t,subtitle:n,icon:a,href:o,status:c,meta:l="Open in dashboard"}){const d=Uz[c];return s.jsxs(en,{to:o,className:pe("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsx("span",{className:pe("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),s.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:t}),s.jsx("span",{className:pe("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),s.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(xe,{icon:a,size:16})}),s.jsx("span",{className:"text-xs text-muted-foreground",children:l})]}),s.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[s.jsx(xe,{icon:Nd,size:14,className:"opacity-60"}),s.jsx(xe,{icon:qs,size:14,className:"opacity-60 group-hover:text-primary"}),s.jsx(xe,{icon:lg,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function $z({stats:t}){const n=[{id:"ping",label:"Gateway latency",detail:`${t.bot.ping}ms`,badge:t.bot.ping<200?"Good":"High",badgeClass:t.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:fg(t.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${t.hosting.ram_used} / ${t.hosting.ram_total}`,badge:`${t.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return s.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[s.jsxs(ft,{className:"text-sm font-semibold",children:["Connected servers (",t.servers,")"]}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),s.jsxs(et,{className:"pt-0",children:[s.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,t.servers)}).map((a,o)=>s.jsxs(vs,{className:"size-9 border-2 border-card ring-0",children:[s.jsx(eo,{src:t.bot.avatar,alt:""}),s.jsx(ys,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),t.servers>6?s.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",t.servers-6]}):null]}),s.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[t.users.toLocaleString()," members across your guilds"]})]})]}),s.jsx(Je,{className:"overflow-hidden border-border bg-secondary",children:s.jsx(et,{className:"p-5",children:s.jsxs("div",{className:"space-y-3",children:[s.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:s.jsx(xe,{icon:T8,size:22})}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),s.jsx(ue,{asChild:!0,size:"sm",className:"w-full",children:s.jsxs(en,{to:"/settings",children:[s.jsx(xe,{icon:Cd,size:16,className:"mr-2"}),"Open settings"]})})]})})}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[s.jsx(ft,{className:"text-sm font-semibold",children:"System activity"}),s.jsx(ue,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:s.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),s.jsxs(et,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>s.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[s.jsxs(vs,{className:"size-9",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{className:"bg-secondary text-xs",children:"SB"})]}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),s.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),s.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),s.jsx(ue,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:s.jsxs(en,{to:"/system",children:["All system details",s.jsx(xe,{icon:lg,size:14})]})})]})]}),s.jsx(Je,{className:"border-border bg-card",children:s.jsxs(et,{className:"flex items-center gap-3 p-4",children:[s.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:s.jsx(xe,{icon:qs,size:18})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("p",{className:"text-sm font-medium",children:["v",t.bot.version]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",t.hosting.cpu_load]})]})]})})]})}const c5={todo:"Needs setup",progress:"In progress",done:"Active"};function Kh(t,n,a="Configure module"){const o=n==null?void 0:n[t];return o||{status:"todo",subtitle:a}}function Hz(){return s.jsxs("div",{className:"flex gap-6",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Ue,{className:"h-44 rounded-2xl"}),s.jsx(Ue,{className:"h-44 rounded-2xl"})]}),s.jsx(Ue,{className:"h-8 w-48"}),s.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((t,n)=>s.jsx(Ue,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),s.jsx(Ue,{className:"h-8 w-56"}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((t,n)=>s.jsx(Ue,{className:"h-20 rounded-2xl"},n))})]}),s.jsx(Ue,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function Gz(){const{stats:t,loading:n,error:a}=kd(),[o,c]=f.useState("all"),l=f.useMemo(()=>{if(!t)return 0;const b=t.tickets.total||0;return b===0?100:Math.round(t.tickets.closed/b*100)},[t]),d=f.useMemo(()=>o==="open"||o==="closed"?ai.filter(b=>b.category==="tickets"):o==="all"?ai:ai.filter(b=>b.category===o),[o]);if(n)return s.jsx(Hz,{});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"No stats available"})});const m=t.tickets.open,p=t.tickets.closed,g=t.tickets.total;return s.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[s.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Je,{className:"overflow-hidden border-border bg-card",children:s.jsxs(et,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",s.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),s.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),s.jsx(ue,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:s.jsx(en,{to:"/transcripts",children:"Review"})})]}),s.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[s.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),s.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),s.jsx(Je,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:s.jsxs(et,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),s.jsxs("ul",{className:"space-y-1.5 text-sm",children:[s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[g," total"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[p," closed"]})]}),s.jsxs("li",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),s.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),s.jsx(Iz,{percent:l,size:120})]})})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),s.jsx(DS,{value:o,onValueChange:b=>c(b),children:s.jsxs(xx,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[s.jsx(Ys,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),s.jsx(Ys,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),s.jsx(Ys,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),YM.filter(b=>b.id!=="all").map(b=>s.jsx(Ys,{value:b.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:b.label},b.id))]})})]}),s.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:is,href:"/tickets",status:"done",meta:"View live tickets"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${p} resolved`,icon:jd,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(b=>{const v=Kh(b.id,t.modules,b.description);return{id:b.id,title:b.title,subtitle:v.subtitle,icon:b.icon,href:b.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(b=>s.jsx(Bz,{title:b.title,subtitle:b.subtitle,icon:b.icon,href:b.href,status:b.status,meta:b.meta},b.id))})]}),s.jsxs("section",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),s.jsx(en,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ai.slice(0,4).map(b=>{const v=Kh(b.id,t.modules);return s.jsx(Pz,{title:b.title,icon:b.icon,href:b.href,badge:c5[v.status],status:v.status},b.id)})})]})]}),s.jsx($z,{stats:t})]})}function Vz(){const{permissions:t}=Yt();return Rn(t,"overview")?s.jsx(Gz,{}):s.jsx(ya,{to:mg(t),replace:!0})}function ga({permission:t,children:n}){const{loading:a,isAuthenticated:o,permissions:c}=Yt();return a?s.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Rn(c,t)?s.jsx(s.Fragment,{children:n}):s.jsx(ya,{to:mg(c),replace:!0}):s.jsx(ya,{to:"/login",replace:!0})}function Fz(){const{hasPermission:t}=Yt(),n=t("settings.update"),a=ao(),[o,c]=f.useState([]),[l,d]=f.useState(""),[m,p]=f.useState(!0),[g,b]=f.useState(""),[v,w]=f.useState(""),[y,C]=f.useState(null),S=f.useCallback(async()=>{p(!0),b("");try{const E=await Ne.getAddonsCatalog();E.data&&(c(E.data.addons),d(E.data.repository))}catch(E){b(E instanceof Error?E.message:"Failed to load addons")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);async function N(E){if(n){C(E.id),w(""),b("");try{const T=await Ne.installAddon(E.id);w(T.message||`${E.name} installed.`),await S();const M=E.configFiles[0];M&&a(`/configs?file=${_l(M)}`)}catch(T){b(T instanceof Error?T.message:"Install failed")}finally{C(null)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),s.jsxs("p",{className:"text-muted-foreground",children:["Requires an API key from"," ",s.jsx("a",{href:"https://emeraldsrv.dev",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"emeraldsrv.dev"})," ","to browse and install addons. Configs will appear in the sidebar once installed."]})]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:S,disabled:m,children:[s.jsx(xe,{icon:_2,size:16,className:pe("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,v?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:v})}):null,s.jsxs("section",{className:"space-y-4",children:[s.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[s.jsx(Ue,{className:"h-40 rounded-xl"}),s.jsx(Ue,{className:"h-40 rounded-xl"}),s.jsx(Ue,{className:"h-40 rounded-xl"})]}):s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"pb-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs(ft,{className:"flex items-center gap-2 text-lg",children:[s.jsx(xe,{icon:dg,size:20,className:"text-primary"}),E.name]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(Fn,{variant:"outline",className:"shrink-0 uppercase tracking-widest text-[10px]",children:E.price===0||!E.price?"Free":`$${E.price}`}),E.installed?s.jsxs(Fn,{variant:"secondary",className:"shrink-0 gap-1",children:[s.jsx(xe,{icon:D8,size:14}),"Installed"]}):null]})]}),s.jsx(Ot,{children:E.description})]}),s.jsxs(et,{className:"space-y-2 text-xs text-muted-foreground",children:[E.is_external?s.jsxs("p",{children:["Available on: ",s.jsx("span",{className:"font-medium text-foreground",children:E.external_store||"External Store"})]}):null,E.configFiles&&E.configFiles.length>0?s.jsxs("p",{children:["Config:"," ",E.configFiles.map((T,M)=>s.jsxs("span",{children:[M>0?", ":null,s.jsx(en,{to:`/configs?file=${_l(T)}`,className:"font-mono text-primary hover:underline",children:T})]},T))]}):null]}),s.jsxs(Sx,{className:"flex flex-wrap gap-2",children:[E.is_external?s.jsx(ue,{variant:"outline",size:"sm",asChild:!0,children:s.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View Store"})}):null,E.installed&&E.configFiles&&E.configFiles[0]?s.jsx(ue,{size:"sm",variant:"secondary",asChild:!0,children:s.jsx(en,{to:`/configs?file=${_l(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?s.jsx(ue,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):E.is_external?null:s.jsxs(ue,{size:"sm",disabled:!n||y===E.id,onClick:()=>N(E),children:[s.jsx(xe,{icon:Cd,size:14,className:"mr-1"}),y===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function Yz(){const{permissions:t}=Yt(),[n,a]=f.useState(!1),[o,c]=f.useState(!1),[l,d]=f.useState(""),[m,p]=f.useState(""),[g,b]=f.useState(""),[v,w]=f.useState("Administrator"),[y,C]=f.useState(""),[S,N]=f.useState(""),[E,T]=f.useState("General"),M=z2(t,"supportbot"),k=async()=>{if(!m.match(/^[a-z0-9_-]+$/i)){Dt.error("Command name can only contain letters, numbers, underscores and dashes.");return}a(!0),c(!1);try{const _=await Ne.buildAddon({name:m.toLowerCase(),description:g||"A custom command",permission:v,embed:{title:y,description:S||"Hello from your custom command!",color:E}});c(!0),d(_.message||"Restart required."),Dt.success(`Addon ${m}.js created successfully!`)}catch(_){Dt.error(_ instanceof Error?_.message:"Failed to build addon")}finally{a(!1)}};return M?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addon Builder"}),s.jsx("p",{className:"text-muted-foreground",children:"Visually scaffold a custom slash command addon for your bot."})]}),o?s.jsxs(Ye,{className:"border-green-500/20 bg-green-500/10 text-green-600 dark:text-green-400",children:[s.jsx(x0,{className:"h-4 w-4"}),s.jsxs(qe,{className:"ml-2",children:["Successfully built ",s.jsxs("strong",{children:[m,".js"]}),"! ",l]})]}):null,s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Je,{children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Command Details"}),s.jsx(Ot,{children:"Configure how users trigger the command."})]}),s.jsxs(et,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Command Name"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-muted-foreground",children:"/"}),s.jsx(_e,{placeholder:"ping",value:m,onChange:_=>p(_.target.value.replace(/[^a-z0-9_-]/gi,"").toLowerCase())})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Description"}),s.jsx(_e,{placeholder:"Replies with a custom embed",value:g,onChange:_=>b(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Required Permission"}),s.jsxs(Ca,{value:v,onValueChange:w,children:[s.jsx(Hr,{children:s.jsx(Sa,{})}),s.jsxs(Gr,{children:[s.jsx(Et,{value:"none",children:"@everyone"}),s.jsx(Et,{value:"Administrator",children:"Administrator"}),s.jsx(Et,{value:"ManageMessages",children:"Manage Messages"}),s.jsx(Et,{value:"ManageGuild",children:"Manage Server"})]})]})]})]})]}),s.jsxs(Je,{children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Response Embed"}),s.jsx(Ot,{children:"What the bot will reply with."})]}),s.jsxs(et,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Embed Title (Optional)"}),s.jsx(_e,{placeholder:"Hello!",value:y,onChange:_=>C(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Embed Description"}),s.jsx(Jd,{placeholder:"Type your message here...",className:"resize-none",rows:4,value:S,onChange:_=>N(_.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Embed Color"}),s.jsxs(Ca,{value:E,onValueChange:T,children:[s.jsx(Hr,{children:s.jsx(Sa,{})}),s.jsxs(Gr,{children:[s.jsx(Et,{value:"General",children:"Theme General"}),s.jsx(Et,{value:"Success",children:"Theme Success"}),s.jsx(Et,{value:"Warning",children:"Theme Warning"}),s.jsx(Et,{value:"Error",children:"Theme Error"})]})]})]})]})]})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs(Je,{className:"sticky top-6 border-primary/20",children:[s.jsx(dt,{children:s.jsxs(ft,{className:"text-sm font-medium flex items-center gap-2",children:[s.jsx(xe,{icon:A8,size:16,className:"text-primary"}),"Live Preview"]})}),s.jsx(et,{children:s.jsx("div",{className:"rounded-md border bg-[#313338] p-4 font-sans text-sm text-[#dbdee1]",children:s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"size-10 shrink-0 rounded-full bg-indigo-500 flex items-center justify-center font-bold text-white",children:"B"}),s.jsxs("div",{className:"flex-1 space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-medium text-white",children:"SupportBot"}),s.jsxs("span",{className:"text-[10px] text-white font-medium uppercase px-1.5 py-0.5 rounded bg-[#5865F2] flex items-center gap-1",children:[s.jsx(x0,{size:10})," BOT"]}),s.jsx("span",{className:"text-xs text-[#949ba4]",children:"Today at 12:00 PM"})]}),s.jsxs("div",{className:"mt-2 rounded bg-[#2b2d31] border-l-4 border-l-[#5865F2] px-4 py-3 max-w-[432px]",children:[y&&s.jsx("div",{className:"mb-1 font-semibold text-white",children:y}),s.jsx("div",{className:"whitespace-pre-wrap",children:S||"Hello from your custom command!"})]})]})]})})}),s.jsx(Sx,{children:s.jsxs(ue,{className:"w-full gap-2",size:"lg",disabled:!m||n,onClick:k,children:[s.jsx(xe,{icon:ds,size:18}),n?"Building...":"Generate Addon"]})})]})})]})]}):s.jsx("div",{className:"flex h-[50vh] items-center justify-center text-muted-foreground",children:"You don't have permission to build addons."})}const Ex="supportbot-dashboard-accent",Pl="#45b46c",qz=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function Kz(t){const n=$r(t,Pl),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,c=parseInt(n.slice(5,7),16)/255,l=Math.max(a,o,c),d=Math.min(a,o,c),m=(l+d)/2;let p=0,g=0;if(l!==d){const b=l-d;switch(g=m>.5?b/(2-l-d):b/(l+d),l){case a:p=((o-c)/b+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(t)})}function Jz({canEdit:t}){const[n,a]=f.useState(!1),[o,c]=f.useState(""),[l,d]=f.useState(!1);async function m(){if(t){a(!0),c("");try{const p=await Ne.resetDashboard();c(p.message||"Dashboard reset successfully."),setTimeout(()=>{window.location.href="/setup"},1500)}catch(p){c(p instanceof Error?p.message:"Reset failed"),a(!1)}}}return t?s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Reset the dashboard to factory settings. This clears the configuration and returns you to the initial setup screen."}),s.jsxs(Qs,{open:l,onOpenChange:d,children:[s.jsx(TM,{asChild:!0,children:s.jsx(ue,{type:"button",variant:"destructive",children:"Reset Dashboard"})}),s.jsxs(hs,{children:[s.jsxs(gs,{children:[s.jsx(xs,{children:"Are you absolutely sure?"}),s.jsx(bs,{children:"This action cannot be undone. This will reset the dashboard to setup mode. You will need to reconnect the Discord OAuth and reconfigure the dashboard owners."})]}),o&&s.jsx("p",{className:"text-sm font-medium text-destructive",children:o}),s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>d(!1),disabled:n,children:"Cancel"}),s.jsx(ue,{variant:"destructive",onClick:()=>void m(),disabled:n,children:n?"Resetting...":"Yes, reset dashboard"})]})]})]})]}):null}function eP({canEdit:t}){const{branding:n,setBrandingLocal:a}=Ed(),o=f.useRef(null),[c,l]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[p,g]=f.useState(!1),[b,v]=f.useState(!1),[w,y]=f.useState("");f.useEffect(()=>{l(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const C=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function S(){if(t){g(!0),y("");try{const M=await Ne.updateBranding({title:c,pageTitle:d});M.data&&a(M.data),y(M.message||"Branding saved.")}catch(M){y(M instanceof Error?M.message:"Save failed")}finally{g(!1)}}}async function N(M){if(!(!t||!M)){v(!0),y("");try{const k=await Qz(M),_=await Ne.uploadBrandingFavicon(k);_.data&&a(_.data),y(_.message||"Favicon uploaded.")}catch(k){y(k instanceof Error?k.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(t){v(!0),y("");try{const M=await Ne.removeBrandingFavicon();M.data&&a(M.data),y(M.message||"Favicon removed.")}catch(M){y(M instanceof Error?M.message:"Remove failed")}finally{v(!1)}}}const T=c.trim()!==n.title||d.trim()!==n.pageTitle;return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Branding Text"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title and browser tab title — saved on the server for everyone using this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"brand-title",children:"Sidebar title"}),s.jsx(_e,{id:"brand-title",value:c,disabled:!t,maxLength:64,onChange:M=>l(M.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"brand-page-title",children:"Browser tab title"}),s.jsx(_e,{id:"brand-page-title",value:d,disabled:!t,maxLength:80,onChange:M=>m(M.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),t?s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ue,{type:"button",disabled:p||!T,onClick:()=>void S(),children:p?"Saving…":"Save titles"}),w&&T?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]}):null]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Favicon"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsx("div",{className:"flex size-16 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:C?s.jsx("img",{src:C,alt:"Favicon preview",className:"size-full object-contain p-2"}):s.jsx(xe,{icon:y8,size:24,className:"text-muted-foreground/50"})}),s.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!t||b,onChange:M=>{var k;return void N(((k=M.target.files)==null?void 0:k[0])??null)}}),s.jsxs("div",{className:"flex flex-col gap-2",children:[t?s.jsxs("div",{className:"flex gap-2",children:[s.jsx(ue,{type:"button",variant:"secondary",disabled:b,onClick:()=>{var M;return(M=o.current)==null?void 0:M.click()},children:b?"Uploading…":"Upload Favicon"}),n.hasFavicon?s.jsx(ue,{type:"button",variant:"destructive",disabled:b,onClick:()=>void E(),children:"Remove"}):null]}):s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}),!T&&w?s.jsx("span",{className:"text-xs text-muted-foreground",children:w}):null]})]})]})]})}function tP(){var v,w,y,C,S,N,E,T,M,k,_;const{hasPermission:t}=Yt(),n=t("settings.update"),[a,o]=f.useState(!0),[c,l]=f.useState(!1),[d,m]=f.useState(""),[p,g]=f.useState(null);f.useEffect(()=>{Ne.getConfigJson("api").then(R=>{R.data&&g(R.data)}).catch(()=>m("Failed to load API config")).finally(()=>o(!1))},[]);async function b(){var R,L,ne,X,I,H,q,ce,de,se,P;if(!(!n||!p)){l(!0),m("");try{const W={"api:API.Port":(R=p.API)==null?void 0:R.Port,"api:API.EmeraldAPIKey":(L=p.API)==null?void 0:L.EmeraldAPIKey,"api:API.TrustProxy":(ne=p.API)==null?void 0:ne.TrustProxy,"api:API.OAuth.Enabled":(I=(X=p.API)==null?void 0:X.OAuth)==null?void 0:I.Enabled,"api:API.OAuth.ClientId":(q=(H=p.API)==null?void 0:H.OAuth)==null?void 0:q.ClientId,"api:API.OAuth.ClientSecret":(de=(ce=p.API)==null?void 0:ce.OAuth)==null?void 0:de.ClientSecret,"api:API.OAuth.RedirectUri":(P=(se=p.API)==null?void 0:se.OAuth)==null?void 0:P.RedirectUri};await Ne.updateConfigFields(W),m("API settings saved and backend restarted.")}catch(W){m(W instanceof Error?W.message:"Save failed")}finally{l(!1)}}}return a?s.jsx("div",{className:"animate-pulse h-32 bg-secondary/20 rounded-md"}):p?s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"Core API Settings"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Configure the internal API that powers this dashboard."})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"API Port"}),s.jsx(_e,{type:"number",value:((v=p.API)==null?void 0:v.Port)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,Port:parseInt(R.target.value)||3e3}}),className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Emerald API Key"}),s.jsx(_e,{type:"password",value:((w=p.API)==null?void 0:w.EmeraldAPIKey)||"",disabled:!n,onChange:R=>g({...p,API:{...p.API,EmeraldAPIKey:R.target.value}}),className:"border-border bg-secondary/30"})]})]}),s.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[s.jsx(Mt,{checked:((y=p.API)==null?void 0:y.TrustProxy)||!1,disabled:!n,onCheckedChange:R=>g({...p,API:{...p.API,TrustProxy:R}})}),s.jsx(Ae,{className:"text-sm",children:"Trust Proxy (Enable if using Cloudflare/Nginx)"})]})]}),s.jsxs("div",{className:"space-y-4 border-t border-border pt-6",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-medium",children:"OAuth Authentication"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Discord application credentials for dashboard login."})]}),s.jsxs("div",{className:"flex items-center gap-2 pb-2",children:[s.jsx(Mt,{checked:((S=(C=p.API)==null?void 0:C.OAuth)==null?void 0:S.Enabled)||!1,disabled:!n,onCheckedChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,Enabled:R}}})}}),s.jsx(Ae,{className:"text-sm",children:"Enable OAuth"})]}),s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Client ID"}),s.jsx(_e,{value:((E=(N=p.API)==null?void 0:N.OAuth)==null?void 0:E.ClientId)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientId:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Client Secret"}),s.jsx(_e,{type:"password",value:((M=(T=p.API)==null?void 0:T.OAuth)==null?void 0:M.ClientSecret)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,ClientSecret:R.target.value}}})},className:"border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[s.jsx(Ae,{children:"Redirect URI"}),s.jsx(_e,{value:((_=(k=p.API)==null?void 0:k.OAuth)==null?void 0:_.RedirectUri)||"",disabled:!n,onChange:R=>{var L;return g({...p,API:{...p.API,OAuth:{...(L=p.API)==null?void 0:L.OAuth,RedirectUri:R.target.value}}})},className:"border-border bg-secondary/30"}),s.jsx("p",{className:"text-[10px] text-muted-foreground mt-1",children:"Must match the OAuth2 callback URL registered in the Discord Developer Portal exactly."})]})]})]}),n?s.jsxs("div",{className:"flex items-center gap-2 border-t border-border pt-6",children:[s.jsx(ue,{type:"button",disabled:c,onClick:()=>void b(),children:c?"Saving…":"Save API Config"}),d?s.jsx("span",{className:"text-xs text-muted-foreground",children:d}):null]}):null]}):null}function nP(){const{hasPermission:t}=Yt(),n=t("settings.update"),[a,o]=f.useState(null),[c,l]=f.useState(!0),[d,m]=f.useState(!1),[p,g]=f.useState(""),[b,v]=f.useState(""),[w,y]=f.useState(()=>d5()??Pl),[C,S]=f.useState(""),[N,E]=f.useState("appearance"),T=f.useCallback(async()=>{l(!0),g("");try{const k=await Ne.checkForUpdates();k.data&&o(k.data)}catch(k){g(k instanceof Error?k.message:"Could not check for updates")}finally{l(!1)}},[]);f.useEffect(()=>{T()},[T]);async function M(k){if(k.updateAvailable){m(!0),g(""),v("");try{const _=await Ne.runUpdate(k.id,k.latest,k.zipUrl);v(_.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await T()}catch(_){g(_ instanceof Error?_.message:"Update failed")}finally{m(!1)}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),s.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),s.jsxs("div",{className:"flex flex-col md:flex-row gap-8 items-start",children:[s.jsx("aside",{className:"w-full md:w-56 shrink-0 sticky top-6",children:s.jsxs("nav",{className:"flex flex-row md:flex-col overflow-x-auto space-x-2 md:space-x-0 md:space-y-1 pb-2 md:pb-0",children:[s.jsx(ue,{variant:N==="appearance"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("appearance"),children:"Appearance"}),s.jsx(ue,{variant:N==="api"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("api"),children:"API Config"}),s.jsx(ue,{variant:N==="updates"?"secondary":"ghost",className:"justify-start w-full",onClick:()=>E("updates"),children:"Update Checker"}),n&&s.jsx(ue,{variant:"ghost",className:`justify-start w-full text-destructive hover:bg-destructive/10 hover:text-destructive ${N==="danger"?"bg-destructive/10 border-l-2 border-destructive rounded-l-none":""}`,onClick:()=>E("danger"),children:"Danger Zone"})]})}),s.jsxs("main",{className:"flex-1 w-full max-w-4xl space-y-6",children:[N==="appearance"&&s.jsx("div",{className:"space-y-6",children:s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Dashboard appearance"}),s.jsx(Ot,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),s.jsxs(et,{className:"space-y-4",children:[s.jsx(eP,{canEdit:n}),s.jsxs("div",{className:"border-t border-border pt-4",children:[s.jsx("p",{className:"mb-1 text-sm font-medium",children:"Accent colour"}),s.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),s.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(tf,{value:w,onChange:k=>{y(k),n2(k),S("Accent updated.")}}),s.jsx(_e,{id:"accent-colour",value:w,onChange:k=>y(k.target.value),onBlur:()=>{const k=$r(w,Pl);y(k),n2(k),S("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]}),s.jsx(ue,{type:"button",variant:"outline",onClick:()=>{Xz(),y(Pl),S("Reset to default purple.")},children:"Reset to default"})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 text-sm mt-5",children:[s.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),s.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),s.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),C?s.jsx("p",{className:"text-xs text-muted-foreground",children:C}):null]})]})]})}),N==="danger"&&n&&s.jsxs(Je,{className:"border-destructive/50 bg-destructive/5",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg text-destructive",children:"Danger Zone"}),s.jsx(Ot,{className:"text-destructive/80",children:"Destructive actions that reset or permanently alter your dashboard."})]}),s.jsx(et,{children:s.jsx(Jz,{canEdit:n})})]}),N==="api"&&s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"API Configuration"}),s.jsx(Ot,{children:"Configure the internal API settings, Emerald API key, and OAuth."})]}),s.jsx(et,{children:s.jsx(tP,{})})]}),N==="updates"&&s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Software updates"}),s.jsx(Ot,{children:"Manage updates for the bot and dashboard."})]}),s.jsxs(et,{className:"space-y-4",children:[c?s.jsx(Ue,{className:"h-24 w-full"}):a&&a.length>0?s.jsx("div",{className:"space-y-4",children:a.map(k=>s.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("p",{className:"font-medium text-sm",children:[s.jsx("a",{href:k.repository,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:k.name})," ","(",k.branch," branch)"]}),s.jsxs("div",{className:"flex gap-x-4 text-sm",children:[s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",k.current]})]}),s.jsxs("p",{children:[s.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),s.jsxs("span",{className:"font-mono font-medium",children:["v",k.latest]})]})]})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[k.updateAvailable?s.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads files while keeping your Configs and Data."}):s.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."}),k.updateAvailable&&n?s.jsxs(ue,{type:"button",size:"sm",onClick:()=>void M(k),disabled:d,children:[d?s.jsx(xe,{icon:_2,size:16,className:"mr-2 animate-spin"}):s.jsx(xe,{icon:Cd,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,k.updateAvailable&&!n?s.jsx("p",{className:"text-xs text-muted-foreground",children:"You cannot install updates with your role."}):null]})]},k.id))}):null,p?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:p})}):null,b?s.jsx(Ye,{children:s.jsx(qe,{children:b})}):null,s.jsx("div",{className:"flex flex-wrap gap-2 pt-2",children:s.jsxs(ue,{type:"button",variant:"outline",onClick:T,disabled:c||d,children:[s.jsx(xe,{icon:fr,size:16,className:"mr-2"}),"Check again"]})})]})]})]})]})]})}function kx(t){const[n,a]=f.useState(!1),o=f.useRef(t);return o.current=t,f.useEffect(()=>{let c=null,l=null;const d=()=>{c=new EventSource("/api/stream"),c.onopen=()=>{a(!0)},c.addEventListener("connected",()=>{a(!0)}),c.addEventListener("metrics",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onMetrics)==null||g.call(p,b)}catch{}}),c.addEventListener("log",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onLog)==null||g.call(p,b)}catch{}}),c.addEventListener("ticket_message",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onTicketMessage)==null||g.call(p,b)}catch{}}),c.addEventListener("ticket_message_deleted",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onTicketMessageDeleted)==null||g.call(p,b)}catch{}}),c.addEventListener("ticket_message_updated",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onTicketMessageUpdated)==null||g.call(p,b)}catch{}}),c.addEventListener("ticket_created",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onTicketCreated)==null||g.call(p,b)}catch{}}),c.addEventListener("ticket_closed",m=>{var p,g;try{const b=JSON.parse(m.data);(g=(p=o.current).onTicketClosed)==null||g.call(p,b)}catch{}}),c.onerror=()=>{a(!1),c==null||c.close(),l=window.setTimeout(d,4e3)}};return d(),()=>{l&&window.clearTimeout(l),c&&c.close()}},[]),{connected:n}}function Tt({label:t,value:n,mono:a=!1}){return s.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[s.jsx("dt",{className:"text-sm text-muted-foreground",children:t}),s.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const rP={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function aP(t){return t==="ok"?"text-emerald-500":t==="offline"?"text-destructive":"text-amber-500"}function sP(){var N;const{stats:t,loading:n,error:a,refresh:o}=kd(),[c,l]=f.useState(null),[d,m]=f.useState(null),[p,g]=f.useState(!1),[b,v]=f.useState(null),{connected:w}=kx({onMetrics:E=>{v(E)}}),y=f.useCallback(async()=>{const[E,T]=await Promise.all([Ne.getGuildStatus().catch(()=>null),Ne.health().catch(()=>null)]);E!=null&&E.data&&l(E.data),T!=null&&T.success&&T.data&&m({dashboard:T.data.dashboard,botReady:T.data.botReady,oauthEnabled:T.data.oauthEnabled,setupComplete:T.data.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function C(){g(!0);try{await Promise.all([o(),y()])}finally{g(!1)}}if(n&&!t)return s.jsxs("div",{className:"space-y-6",children:[s.jsx(Ue,{className:"h-10 w-64"}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Ue,{className:"h-56 rounded-2xl"}),s.jsx(Ue,{className:"h-56 rounded-2xl"})]})]});if(a||!t)return s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:a||"Could not load system details."})});const S=t.bot.ping<200;return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(ue,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:s.jsxs(en,{to:"/",children:[s.jsx(xe,{icon:T2,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),s.jsxs(ue,{type:"button",variant:"outline",disabled:p,onClick:()=>void C(),children:[s.jsx(xe,{icon:fr,size:16,className:"mr-2"}),p?"Refreshing…":"Refresh now"]})]}),s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Discord bot"}),s.jsx(Ot,{children:"Connection and identity"})]}),s.jsxs(et,{children:[s.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[s.jsxs(vs,{className:"size-12",children:[s.jsx(eo,{src:t.bot.avatar,alt:t.bot.username}),s.jsx(ys,{children:"SB"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"font-semibold",children:t.bot.username}),s.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:t.bot.id})]})]}),s.jsxs("dl",{children:[s.jsx(Tt,{label:"Version",value:`v${t.bot.version}`,mono:!0}),s.jsx(Tt,{label:"Gateway latency",value:s.jsxs("span",{className:S?"text-emerald-500":"text-amber-500",children:[t.bot.ping," ms"]})}),s.jsx(Tt,{label:"Process uptime",value:fg(t.bot.uptime)}),s.jsx(Tt,{label:"Connected servers",value:t.servers.toLocaleString()}),s.jsx(Tt,{label:"Members tracked",value:t.users.toLocaleString()}),t.bot.inviteUrl?s.jsx(Tt,{label:"Invite link",value:s.jsx("a",{href:t.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsx(ft,{className:"text-lg",children:"Host machine"}),s.jsx(Ot,{children:"Server resources running this instance"})]}),s.jsxs(Fn,{variant:w?"default":"outline",className:"text-xs",children:[s.jsx("span",{className:`mr-1.5 inline-block h-2 w-2 rounded-full ${w?"bg-emerald-500 animate-pulse":"bg-muted"}`}),w?"Live Stream":"Polling"]})]}),s.jsx(et,{children:s.jsxs("dl",{children:[s.jsx(Tt,{label:"Memory used",value:b?`${(b.ram_used_mb/1024).toFixed(2)} GB / ${(b.ram_total_mb/1024).toFixed(2)} GB`:`${t.hosting.ram_used} / ${t.hosting.ram_total}`}),s.jsx(Tt,{label:"Memory usage",value:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:(b?b.ram_percent:t.hosting.ram_percent)>85?"text-amber-500 font-bold":"text-foreground font-medium",children:[b?b.ram_percent:t.hosting.ram_percent,"%"]}),s.jsx("div",{className:"w-24 h-2 bg-secondary rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${b?b.ram_percent:t.hosting.ram_percent}%`}})})]})}),s.jsx(Tt,{label:"CPU load (1 min avg)",value:b?String(b.cpu_load):t.hosting.cpu_load,mono:!0}),s.jsx(Tt,{label:"Host uptime",value:t.hosting.uptime})]})})]}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Tickets"}),s.jsx(Ot,{children:"Database snapshot"})]}),s.jsx(et,{children:s.jsxs("dl",{children:[s.jsx(Tt,{label:"Total tickets",value:t.tickets.total}),s.jsx(Tt,{label:"Open",value:s.jsx("span",{className:"text-primary",children:t.tickets.open})}),s.jsx(Tt,{label:"Closed",value:t.tickets.closed}),s.jsx(Tt,{label:"Transcripts",value:s.jsx(en,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Guild health"}),s.jsx(Ot,{children:"Configured server and membership"})]}),s.jsx(et,{children:c?s.jsxs("dl",{children:[s.jsx(Tt,{label:"Status",value:s.jsx("span",{className:aP(c.status),children:rP[c.status]})}),s.jsx(Tt,{label:"Configured guild ID",value:c.configuredGuildId||"Not set",mono:!0}),c.configuredGuild?s.jsx(Tt,{label:"Configured server",value:`${c.configuredGuild.name} (${((N=c.configuredGuild.memberCount)==null?void 0:N.toLocaleString())??"?"} members)`}):null,c.message?s.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:c.message}):null,c.extraGuilds.length>0?s.jsxs("div",{className:"mt-3 space-y-2",children:[s.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),s.jsx("ul",{className:"space-y-1 text-sm",children:c.extraGuilds.map(E=>s.jsxs("li",{className:"font-mono text-xs",children:[E.name," · ",E.id]},E.id))})]}):null]}):s.jsx(Ue,{className:"h-24 w-full"})})]})]}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Dashboard services"}),s.jsx(Ot,{children:"API and authentication"})]}),s.jsx(et,{children:d?s.jsxs("dl",{className:"max-w-xl",children:[s.jsx(Tt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),s.jsx(Tt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),s.jsx(Tt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),s.jsx(Tt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),s.jsx(Tt,{label:"Software updates",value:s.jsx(en,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),s.jsx(Tt,{label:"Logs",value:s.jsx(en,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):s.jsx(Ue,{className:"h-32 w-full max-w-xl"})})]}),t.modules?s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-lg",children:"Module setup status"}),s.jsx(Ot,{children:"Which features are configured and active"})]}),s.jsx(et,{children:s.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ai.map(E=>{const T=Kh(E.id,t.modules);return s.jsxs(en,{to:E.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-sm font-medium",children:E.title}),s.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:T.subtitle})]}),s.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:c5[T.status]})]},E.id)})})})]}):null]})}function oP(t){if(!t)return"—";const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const iP=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],lP=["Output","Warn","Error"],cP={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},uP={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},gd=2e3,dP=2e3;function Wh(t,n){return`${t.type}-${t.timestamp??"na"}-${n}-${t.message.slice(0,32)}`}function fP(t,n,a){const o=a?[]:t,c=new Set(o.map((m,p)=>Wh(m,p))),l=[];for(let m=0;mgd?d.slice(d.length-gd):d}function mP(){const[t,n]=f.useState([]),[a,o]=f.useState(!0),[c,l]=f.useState(""),[d,m]=f.useState(!1),[p,g]=f.useState(!0),[b,v]=f.useState("all"),[w,y]=f.useState(""),[C,S]=f.useState(!0),[N,E]=f.useState(""),T=f.useRef(null),M=f.useRef(null),k=f.useRef(d);k.current=d;const _=f.useMemo(()=>b==="all"?lP:[b],[b]),R=f.useCallback(I=>{k.current||b!=="all"&&I.type!==b||(n(H=>{const q=[...H,I];return q.length>gd?q.slice(q.length-gd):q}),S(!0))},[b]);kx({onLog:R});const L=f.useCallback(async I=>{var ce,de;const H=await Ne.getLogs({types:_,cursor:I?void 0:T.current??void 0,tail:I?500:0}),q=((ce=H.data)==null?void 0:ce.entries)??[];return T.current=((de=H.data)==null?void 0:de.cursor)??{},n(se=>fP(se,q,I)),q.length},[_]),ne=f.useCallback(async()=>{var I;o(!0),l(""),T.current=null;try{const ce=(((I=(await Ne.getLogsMeta()).data)==null?void 0:I.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(ce||"No log files yet — output appears when the bot runs."),await L(!0),S(!0)}catch(H){l(H instanceof Error?H.message:"Failed to load logs"),S(!1)}finally{o(!1)}},[L]);f.useEffect(()=>{ne()},[ne]),f.useEffect(()=>{if(d||a)return;const I=window.setInterval(async()=>{if(!k.current)try{await L(!1),S(!0),l("")}catch(H){S(!1),l(H instanceof Error?H.message:"Live update failed")}},dP);return()=>window.clearInterval(I)},[d,a,L]),f.useEffect(()=>{if(!p||d)return;const I=M.current;I&&(I.scrollTop=I.scrollHeight)},[t,p,d]);const X=f.useMemo(()=>t.filter(I=>{var q;if(b!=="all"&&I.type!==b)return!1;if(!w.trim())return!0;const H=w.toLowerCase();return I.message.toLowerCase().includes(H)||(((q=I.timestamp)==null?void 0:q.toLowerCase().includes(H))??!1)}),[t,b,w]);return s.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),s.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?s.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:pe("size-2 rounded-full",C&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),s.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":C?"Live":"Disconnected"})]})]}),c?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:c})}):null,s.jsxs(Je,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[s.jsxs(dt,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[s.jsxs(ft,{className:"text-base font-medium",children:["Console",a?null:s.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[X.length," line",X.length===1?"":"s"]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[s.jsx(Mt,{id:"auto-scroll",checked:p,onCheckedChange:g}),s.jsx(Ae,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>m(I=>!I),children:[s.jsx(xe,{icon:d?k8:E8,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),ne()},disabled:a,children:[s.jsx(xe,{icon:fr,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[s.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:iP.map(I=>s.jsx(ue,{type:"button",variant:b===I.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(I.id),children:I.label},I.id))}),s.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[s.jsx(xe,{icon:vi,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(_e,{placeholder:"Filter lines…",value:w,onChange:I=>y(I.target.value),className:"h-9 pl-9"})]})]})]}),s.jsx(et,{className:"min-h-0 flex-1 p-0",children:a?s.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((I,H)=>s.jsx(Ue,{className:"h-4 w-full"},H))}):s.jsx("div",{ref:M,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:X.length===0?s.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):s.jsx("ul",{className:"space-y-1",children:X.map((I,H)=>s.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[s.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:oP(I.timestamp)}),s.jsx("span",{className:pe("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",uP[I.type]),children:I.type}),s.jsx("span",{className:pe("min-w-0 flex-1 whitespace-pre-wrap break-words",cP[I.type]),children:I.message||" "})]},Wh(I,H)))})})})]})]})}const pP=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],hP=450;function gP(t,n){return n&&t!=="viewer"}function xP(){const{user:t,hasPermission:n}=Yt(),a=!gP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(null),[m,p]=f.useState(!0),[g,b]=f.useState(!1),[v,w]=f.useState(""),[y,C]=f.useState(""),[S,N]=f.useState(""),[E,T]=f.useState(!1),M=f.useRef(null),k=f.useCallback(async()=>{var X;p(!0),w(""),C("");try{const H=(await Ne.getTranscriptTemplate()).data??null;if(H){const q={...H,Typography:{...H.Typography,FontFamily:kS((X=H.Typography)==null?void 0:X.FontFamily)}};c(q),d(structuredClone(q))}}catch(I){w(I instanceof Error?I.message:"Failed to load template")}finally{p(!1)}},[]);f.useEffect(()=>{k()},[k]);const _=f.useCallback(async X=>{T(!0);try{const I=await Ne.previewTranscriptTemplate(X);N(I)}catch{N("

Preview failed to load.

")}finally{T(!1)}},[]);f.useEffect(()=>{if(o)return M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{_(o)},hP),()=>{M.current&&clearTimeout(M.current)}},[o,_]);function R(X,I){c(H=>H&&Gn(H,X,I))}async function L(){if(!(a||!o)){b(!0),w(""),C("");try{const X=await Ne.saveTranscriptTemplate(o);C(X.message||"Saved."),d(structuredClone(o))}catch(X){w(X instanceof Error?X.message:"Save failed")}finally{b(!1)}}}const ne=o&&l&&JSON.stringify(o)!==JSON.stringify(l);return m?s.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[s.jsx(Ue,{className:"h-96 rounded-xl"}),s.jsx(Ue,{className:"h-96 rounded-xl"})]}):o?s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),s.jsxs("div",{className:"flex items-center gap-2",children:[ne?s.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?s.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):s.jsxs(ue,{size:"sm",onClick:L,disabled:g||!ne,children:[s.jsx(xe,{icon:Sd,size:16,className:"mr-1.5"}),g?"Saving…":"Save appearance"]})]})]}),v?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:v})}):null,y?s.jsx(Ye,{className:"border-primary/30 bg-primary/10 text-primary",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[s.jsx(bP,{data:o,readOnly:a,onPatch:R}),s.jsxs(Je,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(dt,{className:"pb-2",children:[s.jsx(ft,{className:"text-base",children:"Live preview"}),s.jsxs(Ot,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),s.jsx(et,{className:"min-h-0 flex-1 p-4 pt-0",children:s.jsx("iframe",{title:"Transcript template preview",srcDoc:S,className:pe("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:v||"Failed to load template"})})}function bP({data:t,readOnly:n,onPatch:a}){return s.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:pP.map(o=>s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{className:"pb-3",children:[s.jsx(ft,{className:"text-base",children:o.title}),o.description?s.jsx(Ot,{children:o.description}):null]}),s.jsx(et,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(c=>s.jsx("div",{className:c.type==="textarea"?"sm:col-span-2":"",children:s.jsx(pd,{field:c,value:kr(t,c.path),readOnly:n,onChange:l=>a(c.path,l)})},c.path))})]},o.title))})}function vP(t,n){return n&&t!=="viewer"}function yP(){const{user:t,hasPermission:n}=Yt(),a=!vP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState(null),[l,d]=f.useState(!0),[m,p]=f.useState(!1),[g,b]=f.useState(!1),[v,w]=f.useState(""),[y,C]=f.useState(""),S=f.useCallback(async()=>{var T,M,k;d(!0),w(""),C("");try{const R=(await Ne.getTranscriptSettings()).data;R&&c({autoDelete:{enabled:!!((T=R.autoDelete)!=null&&T.enabled),afterDays:((M=R.autoDelete)==null?void 0:M.afterDays)??30},publicAccess:{enabled:!!((k=R.publicAccess)!=null&&k.enabled)}})}catch(_){w(_ instanceof Error?_.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);async function N(){if(!(!o||a)){p(!0),w(""),C("");try{const T=await Ne.updateTranscriptSettings(o);T.data&&c({autoDelete:{enabled:T.data.autoDelete.enabled,afterDays:T.data.autoDelete.afterDays},publicAccess:{enabled:T.data.publicAccess.enabled}}),C(T.message??"Settings saved.")}catch(T){w(T instanceof Error?T.message:"Failed to save settings")}finally{p(!1)}}}async function E(){var T,M;if(!a){b(!0),w(""),C("");try{const k=await Ne.purgeTranscripts();C(k.message??((T=k.data)!=null&&T.skipped?"Auto-delete is disabled.":`Removed ${((M=k.data)==null?void 0:M.deleted)??0} transcript(s).`))}catch(k){w(k instanceof Error?k.message:"Purge failed")}finally{b(!1)}}}return l?s.jsxs("div",{className:"space-y-4",children:[s.jsx(Ue,{className:"h-40 w-full rounded-xl"}),s.jsx(Ue,{className:"h-40 w-full rounded-xl"})]}):o?s.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?s.jsx(Ye,{children:s.jsx(qe,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:v})}):null,y?s.jsx(Ye,{children:s.jsx(qe,{children:y})}):null,s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-base",children:"Auto-delete"}),s.jsx(Ot,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),s.jsxs(et,{className:"space-y-4",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:T=>c(M=>M&&{...M,autoDelete:{...M.autoDelete,enabled:T.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),s.jsx(_e,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:T=>c(M=>M&&{...M,autoDelete:{...M.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(T.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),s.jsxs(ue,{type:"button",variant:"outline",size:"sm",disabled:a||g,onClick:()=>void E(),children:[s.jsx(xe,{icon:fr,size:16,className:pe(g&&"animate-spin")}),"Run cleanup now"]})]})]}),s.jsxs(Je,{className:"border-border bg-card",children:[s.jsxs(dt,{children:[s.jsx(ft,{className:"text-base",children:"Public transcripts"}),s.jsxs(Ot,{children:["When enabled, anyone with the link can view a transcript at"," ",s.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),s.jsx(et,{children:s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:T=>c(M=>M&&{...M,publicAccess:{enabled:T.target.checked}})}),s.jsxs("span",{className:"text-sm",children:[s.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),s.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:s.jsxs(ue,{type:"button",disabled:m,onClick:()=>void N(),children:[s.jsx(xe,{icon:Sd,size:16}),m?"Saving…":"Save settings"]})]}):s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:"Could not load transcript settings."})})}function wP(t,n){return n&&t!=="viewer"}function r2(t){return t==null?"":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function a2(t){const n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function jP(){var B;const{user:t,hasPermission:n}=Yt(),a=wP(t==null?void 0:t.role,n("transcripts")),[o,c]=f.useState("browse"),[l,d]=f.useState([]),[m,p]=f.useState(null),[g,b]=f.useState(!0),[v,w]=f.useState(""),[y,C]=f.useState(""),[S,N]=f.useState(""),[E,T]=f.useState(0),[M,k]=f.useState(!1),[_,R]=f.useState(!1),[L,ne]=f.useState(!1),[X,I]=f.useState(!1),H=f.useCallback(async()=>{b(!0),C("");try{const Z=(await Ne.listTranscripts()).data??[];d(Z),p(be=>{var K;return be&&Z.some(ge=>ge.id===be)?be:((K=Z[0])==null?void 0:K.id)??null})}catch(V){C(V instanceof Error?V.message:"Failed to load transcripts")}finally{b(!1)}},[]);f.useEffect(()=>{H()},[H]),f.useEffect(()=>{o==="browse"&&Ne.getTranscriptSettings().then(V=>{var Z,be;ne(!!((be=(Z=V.data)==null?void 0:Z.publicAccess)!=null&&be.enabled))}).catch(()=>ne(!1))},[o]);const q=f.useMemo(()=>{if(!S.trim())return l;const V=S.toLowerCase();return l.filter(Z=>Z.id.includes(V)||Z.filename.toLowerCase().includes(V)||Z.ticketName&&Z.ticketName.toLowerCase().includes(V))},[l,S]),ce=f.useMemo(()=>l.find(V=>V.id===m)??null,[l,m]),de=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,se=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,P=m&&L?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function W(V){w(""),p(V),T(Z=>Z+1)}function oe(){de&&window.open(de,"_blank","noopener,noreferrer")}function ae(){P&&window.open(P,"_blank","noopener,noreferrer")}async function G(){if(P)try{await navigator.clipboard.writeText(P),I(!0),window.setTimeout(()=>I(!1),2e3)}catch{w("Could not copy link to clipboard.")}}async function O(){var Z;if(!m||!a)return;const V=((Z=ce==null?void 0:ce.ticketName)==null?void 0:Z.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${V}? This cannot be undone.`)){R(!0),w("");try{await Ne.deleteTranscript(m),await H()}catch(be){w(be instanceof Error?be.message:"Failed to delete transcript")}finally{R(!1)}}}async function D(){if(!(!se||!ce)){k(!0),w("");try{const V=await fetch(se,{credentials:"include"});if(!V.ok){const ge=await V.json().catch(()=>({}));throw new Error(ge.error||`Download failed (${V.status})`)}const Z=await V.blob(),be=URL.createObjectURL(Z),K=document.createElement("a");K.href=be,K.download=ce.filename,K.click(),URL.revokeObjectURL(be)}catch(V){w(V instanceof Error?V.message:"Failed to download transcript")}finally{k(!1)}}}return s.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[s.jsx(ue,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("browse"),children:"Library"}),s.jsx(ue,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("appearance"),children:"Appearance"}),s.jsx(ue,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>c("settings"),children:"Settings"})]}),o==="browse"?s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>H(),disabled:g,children:[s.jsx(xe,{icon:fr,size:16,className:pe(g&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?s.jsx(xP,{}):o==="settings"?s.jsx(yP,{}):s.jsxs(s.Fragment,{children:[y?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:y})}):null,s.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[s.jsxs(Je,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[s.jsxs(dt,{className:"space-y-3 pb-3",children:[s.jsxs(ft,{className:"text-base font-medium",children:["Saved transcripts",!g&&l.length>0?s.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",l.length,")"]}):null]}),s.jsxs("div",{className:"relative",children:[s.jsx(xe,{icon:vi,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(_e,{placeholder:"Search by ticket name or channel ID…",value:S,onChange:V=>N(V.target.value),className:"pl-9"})]})]}),s.jsx(et,{className:"min-h-0 flex-1 p-0 pb-4",children:s.jsx(fc,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:g?s.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((V,Z)=>s.jsx(Ue,{className:"h-16 w-full rounded-lg"},Z))}):q.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[s.jsx(xe,{icon:Ul,size:32,className:"opacity-40"}),s.jsx("p",{children:l.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):s.jsx("ul",{className:"space-y-1.5",children:q.map(V=>{var K;const Z=V.id===m,be=((K=V.ticketName)==null?void 0:K.trim())||`Channel ${V.id}`;return s.jsx("li",{children:s.jsxs("button",{type:"button",onClick:()=>W(V.id),className:pe("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",Z?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[s.jsx("p",{className:"truncate text-sm font-medium",children:be}),s.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[a2(V.createdAt),V.size!=null?` · ${r2(V.size)}`:""]})]})},V.id)})})})})]}),s.jsxs(Je,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[s.jsxs(dt,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx(ft,{className:"truncate text-base font-medium",children:ce?((B=ce.ticketName)==null?void 0:B.trim())||`Channel ${ce.id}`:"Preview"}),ce?s.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[a2(ce.createdAt),ce.size!=null?` · ${r2(ce.size)}`:""]}):null]}),s.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[P?s.jsxs(s.Fragment,{children:[s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>void G(),children:[s.jsx(xe,{icon:R2,size:16}),X?"Copied":"Copy link"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:ae,children:[s.jsx(xe,{icon:Nd,size:16}),"Public page"]})]}):null,s.jsxs(ue,{variant:"outline",size:"sm",disabled:!de,onClick:oe,children:[s.jsx(xe,{icon:p8,size:16}),"Open tab"]}),s.jsxs(ue,{variant:"outline",size:"sm",disabled:!se||M,onClick:()=>void D(),children:[s.jsx(xe,{icon:Cd,size:16}),M?"Saving…":"Download"]}),a?s.jsxs(ue,{variant:"outline",size:"sm",disabled:!m||_,className:"text-destructive hover:text-destructive",onClick:()=>void O(),children:[s.jsx(xe,{icon:bi,size:16}),_?"Deleting…":"Delete"]}):null]})]}),s.jsxs(et,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:v})}):null,ce&&de?s.jsx("iframe",{title:`Transcript ${ce.id}`,src:de,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):s.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[s.jsx(xe,{icon:Ul,size:40,className:"opacity-30"}),s.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}function CP(){const[t,n]=f.useState([]),[a,o]=f.useState(""),[c,l]=f.useState(!0),[d,m]=f.useState(""),[p,g]=f.useState(!0),[b,v]=f.useState([]);f.useEffect(()=>{try{Ne.getConfigJson("supportbot").then(Y=>{if(Y&&Y.data&&typeof Y.data=="object"){const te=kr(Y.data,"Ticket.DepartmentSystem.Enabled");typeof te=="boolean"&&g(te);const je=kr(Y.data,"Ticket.DepartmentSystem.Departments");if(je&&typeof je=="object"){const we=Object.entries(je).map(([Le,Xe])=>({id:Le,name:Xe&&typeof Xe=="object"&&Xe.Name?Xe.Name:Le,emoji:Xe&&typeof Xe=="object"&&Xe.Emoji?Xe.Emoji:"🎫"}));we.length>0&&(v(we),yn(we[0].id))}}}).catch(()=>{})}catch{}},[]);const[w,y]=f.useState("all"),[C,S]=f.useState("all"),[N,E]=f.useState(""),T=f.useMemo(()=>{const Y=new Set;return Array.isArray(t)&&t.forEach(te=>{if(te&&te.department&&typeof te.department=="string"){const je=te.department.trim().toLowerCase();je&&Y.add(je)}}),Array.from(Y).sort()},[t]),M=f.useMemo(()=>Array.isArray(t)?t.filter(Y=>{var te,je,we,Le,Xe,vt;if(!Y||p&&w!=="all"&&((te=Y.department)==null?void 0:te.toLowerCase())!==w.toLowerCase()||C!=="all"&&((je=Y.priority)==null?void 0:je.toLowerCase())!==C.toLowerCase())return!1;if(N.trim()){const gt=N.toLowerCase().trim(),jn=(we=Y.subject)==null?void 0:we.toLowerCase().includes(gt),mn=(Le=Y.ticket_id)==null?void 0:Le.toLowerCase().includes(gt),an=(Xe=Y.user_id)==null?void 0:Xe.toLowerCase().includes(gt),tr=p&&((vt=Y.department)==null?void 0:vt.toLowerCase().includes(gt));if(!jn&&!mn&&!an&&!tr)return!1}return!0}):[],[t,p,w,C,N]),[k,_]=f.useState(null),[R,L]=f.useState(!1),[ne,X]=f.useState(!1),[I,H]=f.useState([]),[q,ce]=f.useState(!1),[de,se]=f.useState(""),[P,W]=f.useState([]),[oe,ae]=f.useState(!1),[G,O]=f.useState(null),[D,B]=f.useState(!1),[V,Z]=f.useState(""),[be,K]=f.useState(null),[ge,me]=f.useState(""),[$,ie]=f.useState(!1),[ye,Se]=f.useState(null),[Be,Ke]=f.useState(""),[We,qt]=f.useState(null),[vn,Xn]=f.useState(!1),[br,yn]=f.useState("general"),[wn,Zn]=f.useState(""),[Kt,po]=f.useState(""),[Pt,Qn]=f.useState(!1),Da=async()=>{if(!wn.trim()){Dt.error("Please enter a subject or reason for the ticket.");return}Qn(!0);try{const Y=await Ne.createTicket({department:p?br:"general",subject:wn.trim(),userId:Kt.trim()||void 0});Dt.success(Y.message||"Ticket opened successfully!"),Xn(!1),Zn(""),po(""),yt()}catch(Y){Dt.error(Y instanceof Error?Y.message:"Failed to open ticket.")}finally{Qn(!1)}},Es=Y=>{Se(Y),Ke("Closed via Web Dashboard"),ie(!0)},qr=async()=>{if(!ye)return;const Y=ye.ticket_id;qt(Y);try{await Ne.closeTicket(Y,Be||"Closed via Web Dashboard"),Dt.success("Ticket closed and transcript saved."),n(te=>te.filter(je=>je.ticket_id!==Y)),(k==null?void 0:k.ticket_id)===Y&&(L(!1),X(!1),_(null)),ie(!1),Se(null)}catch(te){Dt.error(te instanceof Error?te.message:"Failed to close ticket.")}finally{qt(null)}},ho=f.useRef(null),Kr=f.useRef(null),Dn=()=>{var Y;(Y=ho.current)==null||Y.scrollIntoView({behavior:"smooth"})},yt=f.useCallback(async()=>{l(!0),m("");try{const Y=await Ne.listOpenTickets();Y.data&&(o(Y.data.guildId),n(Y.data.tickets.sort((te,je)=>je.created_at-te.created_at)))}catch(Y){m(Y instanceof Error?Y.message:"Failed to load open tickets")}finally{l(!1)}},[]);f.useEffect(()=>{yt()},[yt]),f.useEffect(()=>{Ne.getGuildResources().then(Y=>{Y.data&&O(Y.data)}).catch(()=>{})},[]);const On=f.useCallback(Y=>{k&&Y.ticketId===k.ticket_id&&(H(te=>te.some(je=>je.id===Y.message.id)?te:[...te,Y.message]),setTimeout(Dn,100))},[k]),Rt=f.useCallback(Y=>{k&&Y.ticketId===k.ticket_id&&H(te=>te.filter(je=>je.id!==Y.messageId))},[k]),Ai=f.useCallback(Y=>{k&&Y.ticketId===k.ticket_id&&H(te=>te.map(je=>je.id===Y.messageId?{...je,content:Y.content}:je))},[k]),_i=f.useCallback(Y=>{n(te=>te.some(je=>je.ticket_id===Y.ticket_id)?te:[Y,...te]),Dt.info("New Ticket Created",{description:`#${Y.ticket_id} - ${Y.subject||"No Subject"}`})},[]),go=f.useCallback(Y=>{n(te=>te.filter(je=>je.ticket_id!==Y.ticket_id)),(k==null?void 0:k.ticket_id)===Y.ticket_id&&Dt.warning("Active ticket was closed in Discord.")},[k]);kx({onTicketMessage:On,onTicketMessageDeleted:Rt,onTicketMessageUpdated:Ai,onTicketCreated:_i,onTicketClosed:go});const Wr=async Y=>{var te;_(Y),L(!0),ce(!0),H([]),W([]),K(null);try{const je=await Ne.getTicketMessages(Y.ticket_id);(te=je.data)!=null&&te.messages&&(H(je.data.messages),setTimeout(Dn,150))}catch(je){Dt.error(je instanceof Error?je.message:"Failed to fetch messages")}finally{ce(!1)}},Oa=Y=>{const te=Array.from(Y.target.files||[]);te.length&&(te.forEach(je=>{const we=new FileReader;we.onload=Le=>{var vt;const Xe=(vt=Le.target)==null?void 0:vt.result;W(gt=>[...gt,{filename:je.name,data:Xe,previewUrl:je.type.startsWith("image/")?Xe:void 0,sizeMb:(je.size/1024/1024).toFixed(2)}])},we.readAsDataURL(je)}),Kr.current&&(Kr.current.value=""))},Ar=Y=>{W(te=>te.filter((je,we)=>we!==Y))},Wt=async Y=>{var we;if(Y.preventDefault(),!de.trim()&&!P.length||!k||oe)return;const te=de.trim(),je=[...P];ae(!0),se(""),W([]),B(!1);try{const Le=await Ne.me().catch(()=>null),Xe=((we=Le==null?void 0:Le.data)==null?void 0:we.username)||"Staff",vt=await Ne.sendTicketReply(k.ticket_id,te,Xe,je.map(gt=>({filename:gt.filename,data:gt.data})));vt.data&&(H(gt=>gt.some(jn=>jn.id===vt.data.id)?gt:[...gt,{id:vt.data.id,author:vt.data.author,content:vt.data.content,attachments:vt.data.attachments||[],createdAt:vt.data.createdAt}]),setTimeout(Dn,100))}catch(Le){Dt.error(Le instanceof Error?Le.message:"Failed to send reply to Discord."),se(te),W(je)}finally{ae(!1)}},La=async Y=>{if(k)try{await Ne.deleteTicketMessage(k.ticket_id,Y),H(te=>te.filter(je=>je.id!==Y)),Dt.success("Message deleted in Discord.")}catch(te){Dt.error(te instanceof Error?te.message:"Failed to delete message.")}},De=Y=>{K(Y.id),me(Y.content)},rt=()=>{K(null),me("")},lt=async Y=>{if(!(!k||!ge.trim()))try{await Ne.editTicketMessage(k.ticket_id,Y,ge.trim()),H(te=>te.map(je=>je.id===Y?{...je,content:ge.trim()}:je)),K(null),Dt.success("Message updated in Discord.")}catch(te){Dt.error(te instanceof Error?te.message:"Failed to edit message.")}},rn=Y=>{const te=Y.target.value;se(te);const je=Y.target.selectionStart||te.length,we=te.slice(0,je),Le=we.lastIndexOf("@");if(Le!==-1&&!we.slice(Le).includes(" ")){const Xe=we.slice(Le+1).toLowerCase();Z(Xe),B(!0)}else B(!1)},It=(Y,te,je)=>{const we=de.lastIndexOf("@"),Le=de.slice(0,we),Xe=je?`<@&${te}>`:`<@${te}>`;se(`${Le}${Xe} `),B(!1)},Jn=Y=>{const te=Math.floor((Date.now()-Y)/1e3);return fg(te)},er=Y=>new Date(Y).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),bt=Y=>{if(!Y)return null;const te=/(```[\s\S]*?```|`[^`]+`|\*\*\*[\s\S]+?\*\*\*|\*\*[\s\S]+?\*\*|__[\s\S]+?__|~~[\s\S]+?~~|\|\|[\s\S]+?\|\||<@!?&?\d+>|^###\s[^\n]+|^##\s[^\n]+|^-#\s[^\n]+|\[[^\]]+\]\(https?:\/\/[^\s)]+\)|https?:\/\/[^\s]+)/gm;return Y.split(te).map((we,Le)=>{var jn;if(!we)return null;if(we.startsWith("-# "))return s.jsx("span",{className:"text-xs text-muted-foreground font-medium block my-0.5 opacity-80",children:bt(we.slice(3))},Le);if(we.startsWith("## "))return s.jsx("span",{className:"text-base font-bold text-foreground block my-1 tracking-tight",children:bt(we.slice(3))},Le);if(we.startsWith("### "))return s.jsx("span",{className:"text-sm font-bold text-foreground block my-0.5",children:bt(we.slice(4))},Le);if(we.startsWith("```")&&we.endsWith("```")&&we.length>=6){const mn=we.slice(3,-3).replace(/^[a-z0-9_-]+\n/i,"");return s.jsx("pre",{className:"bg-black/60 p-2.5 rounded-lg text-xs font-mono my-1.5 border border-border overflow-x-auto text-emerald-400 font-mono",children:s.jsx("code",{children:mn})},Le)}if(we.startsWith("`")&&we.endsWith("`")&&we.length>2)return s.jsx("code",{className:"bg-black/50 px-1.5 py-0.5 rounded text-xs font-mono text-emerald-300 border border-border/40",children:we.slice(1,-1)},Le);if(we.startsWith("***")&&we.endsWith("***")&&we.length>6)return s.jsx("strong",{className:"font-bold italic",children:bt(we.slice(3,-3))},Le);if(we.startsWith("**")&&we.endsWith("**")&&we.length>4)return s.jsx("strong",{className:"font-bold",children:bt(we.slice(2,-2))},Le);if(we.startsWith("__")&&we.endsWith("__")&&we.length>4)return s.jsx("span",{className:"underline underline-offset-2",children:bt(we.slice(2,-2))},Le);if(we.startsWith("~~")&&we.endsWith("~~")&&we.length>4)return s.jsx("span",{className:"line-through opacity-80",children:bt(we.slice(2,-2))},Le);if(we.startsWith("||")&&we.endsWith("||")&&we.length>4)return s.jsx("span",{className:"bg-secondary text-transparent hover:text-foreground hover:bg-secondary/50 px-1.5 py-0.5 rounded transition-all cursor-pointer select-none border border-border/30",title:"Click to reveal spoiler",children:we.slice(2,-2)},Le);const Xe=we.match(/^<@!?(\d+)>$/);if(Xe){const mn=Xe[1],an=new Map;k&&an.set(k.user_id,"Ticket Author"),I.forEach(_r=>{var Xr;(Xr=_r.author)!=null&&Xr.id&&an.set(_r.author.id,_r.author.globalName||_r.author.username)});const tr=an.get(mn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-primary/20 text-primary mx-0.5",title:`User ID: ${mn}`,children:["@",tr||"User"]},Le)}const vt=we.match(/^<@&(\d+)>$/);if(vt){const mn=vt[1],an=(jn=G==null?void 0:G.roles)==null?void 0:jn.find(tr=>tr.id===mn);return s.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded font-semibold text-xs bg-amber-500/20 text-amber-400 mx-0.5",children:["@",an?an.name:`Role (${mn})`]},Le)}const gt=we.match(/^\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)$/);if(gt){const mn=gt[1],an=gt[2];return s.jsx("a",{href:an,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:mn},Le)}return/^https?:\/\/[^\s]+$/i.test(we)?/\.(gif|jpe?g|png|webp)(\?[^\s]*)?$/i.test(we)||/cdn\.discordapp\.com\/(emojis|attachments)\//i.test(we)||/images\.discordapp\.net\//i.test(we)||/media\d*\.giphy\.com\//i.test(we)?s.jsx("span",{className:"block my-1",children:s.jsx("img",{src:we,alt:"GIF/Image",className:"max-h-64 rounded-lg border border-border object-contain hover:opacity-95 transition-opacity",loading:"lazy"})},Le):s.jsx("a",{href:we,target:"_blank",rel:"noreferrer",className:"text-primary underline hover:opacity-80 break-all",children:we},Le):we})},Ln=Y=>!Y||Y.length===0?null:s.jsx("div",{className:"space-y-2 mt-1",children:Y.map(te=>{var Xe,vt,gt;const je=((Xe=te.contentType)==null?void 0:Xe.startsWith("image/"))||/\.(png|jpe?g|gif|webp|svg)$/i.test(te.name),we=((vt=te.contentType)==null?void 0:vt.startsWith("video/"))||/\.(mp4|webm|mov|mkv)$/i.test(te.name),Le=((gt=te.contentType)==null?void 0:gt.startsWith("audio/"))||/\.(mp3|wav|ogg|m4a)$/i.test(te.name);return je?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black/40",children:s.jsx("a",{href:te.url,target:"_blank",rel:"noreferrer",children:s.jsx("img",{src:te.url,alt:te.name,className:"max-h-80 max-w-full object-contain hover:opacity-95 transition-opacity",loading:"lazy"})})},te.id):we?s.jsx("div",{className:"rounded-lg overflow-hidden border border-border bg-black",children:s.jsx("video",{src:te.url,controls:!0,className:"max-h-80 max-w-full"})},te.id):Le?s.jsx("div",{className:"p-2 border border-border rounded-lg bg-secondary/20",children:s.jsx("audio",{src:te.url,controls:!0,className:"w-full h-8"})},te.id):s.jsxs("div",{className:"p-2.5 rounded-lg border border-border bg-secondary/20 flex items-center justify-between text-xs gap-3",children:[s.jsxs("div",{className:"flex items-center gap-2 truncate",children:[s.jsx(xe,{icon:Uy,size:16,className:"text-primary shrink-0"}),s.jsx("span",{className:"truncate font-medium",children:te.name})]}),s.jsx(ue,{variant:"ghost",size:"sm",asChild:!0,className:"h-7 px-2 text-xs",children:s.jsx("a",{href:te.url,target:"_blank",rel:"noreferrer",download:!0,children:"Download"})})]},te.id)})}),Di=Y=>!Y||Y.length===0?null:s.jsx("div",{className:"space-y-3 mt-1.5 w-full",children:Y.map((te,je)=>{var we,Le,Xe,vt;return s.jsxs("div",{className:"rounded-lg border border-border/60 bg-secondary/30 p-3.5 text-xs space-y-2 border-l-4 shadow-sm relative overflow-hidden max-w-xl",style:{borderLeftColor:te.color||"#5865F2"},children:[te.author&&s.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-foreground",children:[te.author.iconURL&&s.jsx("img",{src:te.author.iconURL,alt:"",className:"h-4 w-4 rounded-full"}),s.jsx("span",{children:te.author.name})]}),((we=te.thumbnail)==null?void 0:we.url)&&s.jsx("img",{src:te.thumbnail.url,alt:"",className:"h-12 w-12 rounded object-cover absolute top-3 right-3 border border-border"}),te.title&&s.jsx("h4",{className:"font-bold text-sm text-foreground tracking-tight pr-12",children:bt(te.title)}),te.description&&s.jsx("div",{className:"text-muted-foreground whitespace-pre-wrap leading-relaxed pr-12",children:bt(te.description)}),te.fields&&te.fields.length>0&&s.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2.5 pt-2 border-t border-border/30",children:te.fields.map((gt,jn)=>s.jsxs("div",{className:`space-y-0.5 ${gt.inline?"":"sm:col-span-2"}`,children:[s.jsx("p",{className:"font-semibold text-foreground text-[11px] uppercase tracking-wider",children:gt.name}),s.jsx("p",{className:"text-muted-foreground whitespace-pre-wrap",children:bt(gt.value)})]},jn))}),((Le=te.image)==null?void 0:Le.url)&&s.jsx("div",{className:"rounded-md overflow-hidden border border-border mt-2",children:s.jsx("img",{src:te.image.url,alt:"",className:"max-h-64 w-full object-cover"})}),(te.footer||te.timestamp)&&s.jsxs("div",{className:"flex items-center gap-2 pt-1 border-t border-border/20 text-[10px] text-muted-foreground",children:[((Xe=te.footer)==null?void 0:Xe.iconURL)&&s.jsx("img",{src:te.footer.iconURL,alt:"",className:"h-3.5 w-3.5 rounded-full"}),((vt=te.footer)==null?void 0:vt.text)&&s.jsx("span",{children:te.footer.text}),te.timestamp&&s.jsxs("span",{children:[new Date(te.timestamp).toLocaleDateString()," ",new Date(te.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]},je)})}),Oi=Y=>{if(!Y||Y.length===0)return null;const te=Y.map(je=>({...je,components:(je.components||[]).filter(we=>we.customId||we.url||we.type===2||we.type===3||we.type==="BUTTON"||we.type==="STRING_SELECT")})).filter(je=>je.components&&je.components.length>0);return te.length===0?null:s.jsx("div",{className:"space-y-2 mt-2.5 w-full",children:te.map((je,we)=>{var Le;return s.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:(Le=je.components)==null?void 0:Le.map((Xe,vt)=>s.jsxs("div",{className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-secondary/80 text-secondary-foreground text-xs font-semibold border border-border/80 shadow-sm hover:bg-secondary transition-colors cursor-pointer",children:[Xe.emoji&&s.jsx("span",{children:Xe.emoji}),s.jsx("span",{children:Xe.label||Xe.customId||"Button"})]},vt))},we)})})},Li=()=>s.jsx(fc,{className:"flex-1 p-4 sm:p-6",children:s.jsxs("div",{className:"max-w-4xl mx-auto w-full space-y-4",children:[q?s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(Ue,{className:"h-10 w-3/4"}),s.jsx(Ue,{className:"h-10 w-1/2 ml-auto"}),s.jsx(Ue,{className:"h-10 w-2/3"})]}):I.length===0?s.jsx("div",{className:"p-12 text-center text-muted-foreground text-sm",children:"No recent messages in this ticket channel."}):I.map(Y=>{var te;return s.jsxs("div",{className:`group flex items-start gap-3 ${Y.author.isDashboard?"flex-row-reverse":""}`,children:[s.jsxs(vs,{className:"h-8 w-8 shrink-0",children:[s.jsx(eo,{src:Y.author.avatar,alt:Y.author.username}),s.jsx(ys,{children:s.jsx(xe,{icon:L8,size:16})})]}),s.jsxs("div",{className:`flex flex-col space-y-1 max-w-[80%] ${Y.author.isDashboard?"items-end":"items-start"}`,children:[s.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[s.jsx("span",{className:"font-semibold text-foreground",children:Y.author.globalName||Y.author.username}),Y.author.bot&&s.jsx(Fn,{variant:"secondary",className:"px-1 py-0 text-[10px]",children:"BOT"}),Y.author.isDashboard&&s.jsx(Fn,{variant:"default",className:"px-1 py-0 text-[10px]",children:"STAFF"}),s.jsx("span",{children:er(Y.createdAt)}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity ml-1",children:[s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-foreground",onClick:()=>De(Y),title:"Edit Message",children:s.jsx(xe,{icon:D2,size:12})}),s.jsx(ue,{variant:"ghost",size:"icon",className:"h-5 w-5 text-muted-foreground hover:text-destructive",onClick:()=>La(Y.id),title:"Delete Message",children:s.jsx(xe,{icon:bi,size:12})})]})]}),be===Y.id?s.jsxs("div",{className:"flex items-center gap-2 w-full mt-1",children:[s.jsx(_e,{value:ge,onChange:je=>me(je.target.value),className:"h-8 text-sm",autoFocus:!0}),s.jsx(ue,{size:"sm",className:"h-8 px-2 bg-primary",onClick:()=>lt(Y.id),children:s.jsx(xe,{icon:_8,size:14})}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-8 px-2",onClick:rt,children:s.jsx(xe,{icon:ba,size:14})})]}):Y.content?s.jsx("div",{className:`rounded-lg px-3.5 py-2.5 text-sm whitespace-pre-wrap ${Y.author.isDashboard?"bg-primary text-primary-foreground":"bg-secondary/40 text-secondary-foreground border border-border/50"}`,style:Y.containerColor||Y.author.bot&&!((te=Y.embeds)!=null&&te.length)?{borderLeftWidth:"4px",borderLeftColor:Y.containerColor||"#5865F2"}:void 0,children:bt(Y.content)}):null,Ln(Y.attachments),Di(Y.embeds),Oi(Y.components)]})]},Y.id)}),s.jsx("div",{ref:ho})]})}),zi=()=>{var Y;return s.jsxs("div",{className:"p-4 border-t border-border bg-secondary/10 flex flex-col gap-2 relative",children:[P.length>0&&s.jsx("div",{className:"max-w-4xl mx-auto w-full flex items-center gap-2 flex-wrap mb-1",children:P.map((te,je)=>s.jsxs("div",{className:"flex items-center gap-2 p-1.5 px-3 rounded-lg border border-border bg-secondary text-xs",children:[te.previewUrl?s.jsx("img",{src:te.previewUrl,alt:"",className:"h-6 w-6 rounded object-cover"}):s.jsx(xe,{icon:Uy,size:14,className:"text-primary"}),s.jsx("span",{className:"font-medium max-w-[120px] truncate",children:te.filename}),s.jsxs("span",{className:"text-muted-foreground text-[10px]",children:[te.sizeMb,"MB"]}),s.jsx("button",{type:"button",onClick:()=>Ar(je),className:"text-muted-foreground hover:text-destructive ml-1",children:s.jsx(xe,{icon:ba,size:12})})]},je))}),D&&s.jsxs("div",{className:"max-w-4xl mx-auto w-full absolute bottom-full mb-2 z-50 bg-popover text-popover-foreground border border-border rounded-xl shadow-xl overflow-hidden max-h-48 overflow-y-auto",children:[s.jsx("div",{className:"p-2 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider border-b",children:"Mentions (@)"}),k&&s.jsxs("button",{type:"button",onClick:()=>It("Ticket Author",k.user_id,!1),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(vs,{className:"h-5 w-5",children:s.jsx(ys,{children:"U"})}),s.jsx("span",{className:"font-medium",children:"Ticket Author"})]}),s.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["@",k.user_id]})]}),(Y=G==null?void 0:G.roles)==null?void 0:Y.filter(te=>te.name.toLowerCase().includes(V)).slice(0,5).map(te=>s.jsxs("button",{type:"button",onClick:()=>It(te.name,te.id,!0),className:"w-full text-left p-2 hover:bg-secondary flex items-center justify-between text-xs",children:[s.jsxs("span",{className:"font-medium text-amber-400",children:["@",te.name]}),s.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"Role"})]},te.id))]}),s.jsxs("form",{onSubmit:Wt,className:"max-w-4xl mx-auto w-full flex items-center gap-2",children:[s.jsx("input",{type:"file",ref:Kr,multiple:!0,onChange:Oa,className:"hidden",accept:"image/*,video/*,audio/*,.pdf,.zip,.txt,.json"}),s.jsx(ue,{type:"button",variant:"outline",size:"sm",onClick:()=>{var te;return(te=Kr.current)==null?void 0:te.click()},title:"Attach files or media",className:"h-9 px-2.5",children:s.jsx(xe,{icon:v8,size:16})}),s.jsx(_e,{value:de,onChange:rn,placeholder:"Type a reply... Use @ to tag roles or users",disabled:oe||q,className:"flex-1"}),s.jsx(ue,{type:"submit",size:"sm",disabled:oe||!de.trim()&&!P.length||q,children:oe?s.jsx(xe,{icon:fr,size:16,className:"animate-spin"}):s.jsxs(s.Fragment,{children:[s.jsx(xe,{icon:R8,size:16,className:"mr-1.5"}),"Send"]})})]})]})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Open Tickets"}),s.jsx("p",{className:"text-muted-foreground",children:"Manage open support tickets & reply live to Discord channels from the web dashboard."})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(ue,{onClick:()=>Xn(!0),className:"gap-2 bg-primary font-semibold text-xs h-9",children:[s.jsx(xe,{icon:is,size:15})," Open Ticket"]}),s.jsxs(ue,{onClick:()=>void yt(),disabled:c,variant:"outline",size:"sm",children:[s.jsx(xe,{icon:fr,size:16,className:c?"animate-spin mr-2":"mr-2"}),"Refresh"]})]})]}),s.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between gap-3 bg-card/60 p-3.5 rounded-xl border border-border/80 shadow-sm",children:[s.jsxs("div",{className:"relative w-full md:w-80",children:[s.jsx(xe,{icon:vi,size:15,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),s.jsx(_e,{placeholder:"Search tickets by ID, user, subject...",value:N,onChange:Y=>E(Y.target.value),className:"pl-9 text-xs h-9 bg-secondary/30 border-border"})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2.5 w-full md:w-auto justify-end",children:[p&&s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Department:"}),s.jsxs(Ca,{value:w,onValueChange:y,children:[s.jsx(Hr,{className:"text-xs h-9 w-[160px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Departments"})}),s.jsxs(Gr,{children:[s.jsx(Et,{value:"all",children:"All Departments"}),T.map(Y=>s.jsx(Et,{value:Y,className:"capitalize",children:Y},Y))]})]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{className:"text-xs font-semibold text-muted-foreground",children:"Priority:"}),s.jsxs(Ca,{value:C,onValueChange:S,children:[s.jsx(Hr,{className:"text-xs h-9 w-[140px] bg-secondary/30 border-border capitalize",children:s.jsx(Sa,{placeholder:"All Priorities"})}),s.jsxs(Gr,{children:[s.jsx(Et,{value:"all",children:"All Priorities"}),s.jsx(Et,{value:"low",children:"Low"}),s.jsx(Et,{value:"medium",children:"Medium / Normal"}),s.jsx(Et,{value:"high",children:"High"}),s.jsx(Et,{value:"urgent",children:"Urgent"})]})]})]}),(w!=="all"||C!=="all"||N.trim())&&s.jsx(ue,{variant:"ghost",size:"sm",onClick:()=>{y("all"),S("all"),E("")},className:"h-9 text-xs text-muted-foreground hover:text-foreground px-2",children:"Reset"})]})]}),s.jsx(Je,{className:"border-border bg-card",children:s.jsx(et,{className:"p-0",children:c?s.jsxs("div",{className:"space-y-4 p-6",children:[s.jsx(Ue,{className:"h-12 w-full"}),s.jsx(Ue,{className:"h-12 w-full"}),s.jsx(Ue,{className:"h-12 w-full"})]}):d?s.jsx("div",{className:"p-6",children:s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:d})})}):M.length===0?s.jsxs("div",{className:"p-12 text-center text-muted-foreground space-y-2",children:[s.jsx("p",{children:"No open tickets found matching your filter criteria."}),(w!=="all"||C!=="all"||N.trim())&&s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>{y("all"),S("all"),E("")},className:"text-xs mt-2",children:"Clear Filters"})]}):s.jsx("div",{className:"divide-y divide-border",children:M.map(Y=>s.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between p-4 hover:bg-secondary/10 transition-colors gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("p",{className:"font-medium text-primary",children:Y.subject||"Untitled Ticket"}),s.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",Y.ticket_id]}),p&&Y.department&&s.jsx(Fn,{variant:"outline",className:"text-xs capitalize",children:Y.department}),s.jsxs(Fn,{variant:Y.priority==="high"?"destructive":Y.priority==="medium"?"secondary":"outline",className:"text-xs capitalize",children:[Y.priority," priority"]})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["User ID: ",s.jsx("span",{className:"font-mono",children:Y.user_id}),Y.description&&` • ${Y.description}`]})]}),s.jsxs("div",{className:"flex items-center gap-3 w-full sm:w-auto justify-end",children:[s.jsxs("div",{className:"text-sm text-muted-foreground flex items-center whitespace-nowrap mr-2",children:[s.jsx(xe,{icon:h8,size:14,className:"mr-1.5"}),Jn(Y.created_at)]}),s.jsxs(ue,{variant:"default",size:"sm",onClick:()=>Wr(Y),className:"bg-primary text-primary-foreground hover:bg-primary/90",children:[s.jsx(xe,{icon:g8,size:16,className:"mr-2"}),"Live Chat"]}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Es(Y),disabled:We===Y.ticket_id,children:[We===Y.ticket_id?s.jsx(xe,{icon:fr,size:14,className:"animate-spin mr-1.5"}):s.jsx(xe,{icon:ba,size:14,className:"mr-1.5"}),"Close"]}),a&&s.jsx(ue,{variant:"secondary",size:"sm",asChild:!0,children:s.jsx("a",{href:`https://discord.com/channels/${a}/${Y.ticket_id}`,target:"_blank",rel:"noreferrer",children:s.jsx(xe,{icon:Nd,size:16})})})]})]},Y.ticket_id))})})}),R&&ne&&s.jsx("div",{className:"fixed inset-0 z-50 bg-black/65 backdrop-blur-sm flex items-center justify-center p-4 sm:p-6 lg:p-8 animate-in fade-in-0",onClick:Y=>{Y.target===Y.currentTarget&&X(!1)},children:s.jsxs("div",{className:"bg-card text-card-foreground border border-border rounded-2xl shadow-2xl flex flex-col w-full max-w-5xl h-[88vh] overflow-hidden animate-in zoom-in-95",children:[s.jsxs("div",{className:"p-4 border-b border-border bg-secondary/20 flex flex-col space-y-1",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx("h2",{className:"text-lg font-bold tracking-tight truncate",children:(k==null?void 0:k.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",k==null?void 0:k.ticket_id]}),p&&(k==null?void 0:k.department)&&s.jsx(Fn,{variant:"secondary",className:"text-xs capitalize shrink-0",children:k.department})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[k&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Es(k),disabled:We===k.ticket_id,className:"h-8 px-2.5 text-xs",children:[We===k.ticket_id?s.jsx(xe,{icon:fr,size:14,className:"animate-spin mr-1.5"}):s.jsx(xe,{icon:ba,size:14,className:"mr-1.5"}),"Close Ticket"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>X(!1),className:"h-8 px-3 text-xs flex items-center gap-1.5",children:[s.jsx(xe,{icon:S8,size:14}),s.jsx("span",{children:"Collapse"})]}),s.jsx(ue,{variant:"ghost",size:"icon",onClick:()=>{L(!1),X(!1)},className:"h-8 w-8 text-muted-foreground hover:text-foreground",children:s.jsx(xe,{icon:ba,size:18})})]})]}),(k==null?void 0:k.description)&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:k.description})]}),Li(),zi()]})}),R&&!ne&&s.jsx(Yj,{open:R,onOpenChange:L,children:s.jsxs(Hg,{side:"right",className:"w-full sm:max-w-xl p-0 flex flex-col h-full bg-card",children:[s.jsxs(Gg,{className:"p-4 border-b border-border space-y-1 bg-secondary/20",children:[s.jsxs("div",{className:"flex items-center justify-between pr-8",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap min-w-0",children:[s.jsx(Vg,{className:"text-base font-bold truncate",children:(k==null?void 0:k.subject)||"Ticket Live Chat"}),s.jsxs(Fn,{variant:"outline",className:"font-mono text-xs shrink-0",children:["#",k==null?void 0:k.ticket_id]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[k&&s.jsxs(ue,{variant:"destructive",size:"sm",onClick:()=>Es(k),disabled:We===k.ticket_id,className:"h-7 px-2 text-xs",children:[We===k.ticket_id?s.jsx(xe,{icon:fr,size:13,className:"animate-spin mr-1"}):s.jsx(xe,{icon:ba,size:13,className:"mr-1"}),"Close"]}),s.jsxs(ue,{variant:"outline",size:"sm",onClick:()=>X(!0),className:"h-7 px-2 text-xs flex items-center gap-1",title:"Open in Full View",children:[s.jsx(xe,{icon:C8,size:13}),s.jsx("span",{children:"Full View"})]})]})]}),(k==null?void 0:k.description)&&s.jsx(Fg,{className:"text-xs text-muted-foreground truncate",children:k.description})]}),Li(),zi()]})}),s.jsx(Qs,{open:$,onOpenChange:ie,children:s.jsxs(hs,{className:"sm:max-w-md bg-card border-border rounded-xl",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-lg font-bold flex items-center gap-2",children:[s.jsx(xe,{icon:ba,className:"text-destructive",size:20}),"Close Ticket #",ye==null?void 0:ye.ticket_id]}),s.jsx(bs,{className:"text-xs text-muted-foreground pt-1",children:"Are you sure you want to close this ticket? A transcript will be created and the channel will be deleted in Discord."})]}),s.jsxs("div",{className:"space-y-2 py-2",children:[s.jsx("label",{className:"text-xs font-semibold text-foreground",children:"Reason for closing (Optional)"}),s.jsx(_e,{value:Be,onChange:Y=>Ke(Y.target.value),placeholder:"e.g. Issue resolved by support team",className:"text-sm"})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0 mt-2",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>ie(!1),disabled:!!We,children:"Cancel"}),s.jsxs(ue,{variant:"destructive",size:"sm",onClick:qr,disabled:!!We,children:[We?s.jsx(xe,{icon:fr,size:14,className:"animate-spin mr-1.5"}):s.jsx(xe,{icon:ba,size:14,className:"mr-1.5"}),"Confirm Close"]})]})]})}),s.jsx(Qs,{open:vn,onOpenChange:Xn,children:s.jsxs(hs,{className:"sm:max-w-[450px]",children:[s.jsxs(gs,{children:[s.jsxs(xs,{className:"text-base flex items-center gap-2",children:[s.jsx(xe,{icon:is,size:18,className:"text-primary"}),"Open Direct Ticket"]}),s.jsx(bs,{className:"text-xs",children:p?"Select a support department to create a new ticket channel in Discord immediately.":"Create a new ticket channel in Discord immediately."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[p&&s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(Ae,{className:"text-xs font-semibold",children:"Department"}),s.jsxs(Ca,{value:br,onValueChange:yn,children:[s.jsx(Hr,{className:"text-xs border-border bg-secondary/30",children:s.jsx(Sa,{})}),s.jsx(Gr,{children:(b.length>0?b:[{id:"general",name:"General Support",emoji:"🎫"},{id:"purchase",name:"Purchase & Billing Support",emoji:"💳"},{id:"reports",name:"Player Report",emoji:"🚨"},{id:"appeals",name:"Ban Appeals",emoji:"⚖️"}]).map(Y=>s.jsxs(Et,{value:Y.id,children:[Y.emoji?`${Y.emoji} `:"",Y.name]},Y.id))})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(Ae,{className:"text-xs font-semibold",children:"Ticket Subject / Reason"}),s.jsx(_e,{value:wn,onChange:Y=>Zn(Y.target.value),placeholder:"e.g. Assistance with server permissions",className:"text-xs border-border bg-secondary/30"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(Ae,{className:"text-xs font-semibold",children:"Discord User ID (Optional)"}),s.jsx(_e,{value:Kt,onChange:Y=>po(Y.target.value),placeholder:"e.g. 123456789012345678 (Leave blank for yourself)",className:"text-xs font-mono border-border bg-secondary/30"}),s.jsx("p",{className:"text-[11px] text-muted-foreground",children:"If specified, the ticket channel will be created for this user."})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",size:"sm",onClick:()=>Xn(!1),disabled:Pt,className:"text-xs",children:"Cancel"}),s.jsxs(ue,{size:"sm",onClick:Da,disabled:Pt||!wn.trim(),className:"gap-1.5 text-xs bg-primary font-semibold",children:[Pt?s.jsx(xe,{icon:fr,size:14,className:"animate-spin"}):s.jsx(xe,{icon:is,size:14}),Pt?"Opening Ticket...":"Open Ticket"]})]})]})})]})}const SP=["admin","moderator","editor","viewer","custom"];function NP(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:ls("viewer"),yamlOwner:!1}}function EP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(Mt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(Mt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(Mt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(Mt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(Mt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var b;const g=((b=t.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(Mt,{checked:g.view,disabled:a,onCheckedChange:v=>o({configs:{...t.configs,[d]:{...g,view:v}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(Mt,{checked:g.edit,disabled:a,onCheckedChange:v=>o({configs:{...t.configs,[d]:{...g,edit:v,view:v?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(Mt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function kP(t){return t.permissions.users.manage?"Full + user management":t.permissions.settings.update?"Configs + settings updates":Object.values(t.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function TP(){const{user:t,hasPermission:n}=Yt(),a=n("users.manage"),[o,c]=f.useState([]),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,b]=f.useState(""),[v,w]=f.useState(null),[y,C]=f.useState(!1),S=f.useCallback(async()=>{p(!0),b("");try{const[R,L]=await Promise.all([Ne.listDashboardUsers(),Ne.listGroups().catch(()=>({data:{groups:[]}}))]);R.data&&c(R.data.users),L.data&&d(L.data.groups)}catch(R){b(R instanceof Error?R.message:"Failed to load users")}finally{p(!1)}},[]);f.useEffect(()=>{S()},[S]);const N=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function E(){w(NP())}function T(R){w({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:ls(R.role),yamlOwner:R.yamlOwner})}function M(R){v&&w({...v,role:R,permissions:ls(R,v.permissions)})}async function k(){if(!(!v||!a)){C(!0),b("");try{v.mode==="add"?await Ne.addDashboardUser({id:v.id.trim(),role:v.role,username:v.username||void 0,globalName:v.globalName||void 0,enabled:v.enabled,permissions:v.role==="custom"?v.permissions:void 0}):await Ne.updateDashboardUser(v.id,{role:v.yamlOwner?void 0:v.role,enabled:v.enabled,username:v.username||void 0,globalName:v.globalName||void 0,permissions:v.role==="custom"?v.permissions:void 0}),w(null),await S()}catch(R){b(R instanceof Error?R.message:"Could not save user")}finally{C(!1)}}}async function _(R){if(a&&window.confirm("Remove this user from the dashboard?")){b("");try{await Ne.removeDashboardUser(R),await S()}catch(L){b(L instanceof Error?L.message:"Could not remove user")}}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),s.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",s.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?s.jsxs(ue,{onClick:E,children:[s.jsx(xe,{icon:sg,size:16,className:"mr-2"}),"Add user"]}):null]}),g?s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}):null,s.jsx(Je,{className:"border-border bg-card overflow-hidden",children:s.jsx(et,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Ue,{className:"h-8 w-full rounded-md"}),s.jsx(Ue,{className:"h-8 w-full rounded-md"})]}):N.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:"No users found."}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"User"}),s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Access Summary"}),s.jsx("th",{className:"px-4 py-2.5",children:"Status"}),a&&s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:N.map(R=>{const L=l.find(I=>I.id===R.groupId||I.id===R.role),ne=(L==null?void 0:L.color)||"#10B981",X=(L==null?void 0:L.name)||$y[R.yamlOwner?"owner":R.role]||R.role;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsxs(vs,{className:"size-7",children:[s.jsx(eo,{src:R.avatar,alt:R.username}),s.jsx(ys,{className:"text-[10px]",children:(R.username||R.id).slice(0,2).toUpperCase()})]}),s.jsxs("div",{className:"min-w-0 leading-tight",children:[s.jsxs("p",{className:"truncate font-semibold text-foreground text-xs",children:[P2(R),R.id===(t==null?void 0:t.id)?s.jsx("span",{className:"text-[11px] text-primary font-normal ml-1",children:"(you)"}):""]}),s.jsx("p",{className:"truncate text-[10px] text-muted-foreground font-mono",children:R.id})]})]})}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"size-2 rounded-full shrink-0 shadow-sm",style:{backgroundColor:ne}}),s.jsx("span",{className:"font-medium text-xs text-foreground",children:X}),R.yamlOwner&&s.jsx("span",{className:"text-[10px] font-semibold px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Config Owner"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:kP(R)}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:R.enabled?s.jsx(Fn,{className:"text-[10px] px-2 py-0.5 bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15 border-emerald-500/20",children:"Active"}):s.jsx(Fn,{variant:"outline",className:"text-[10px] px-2 py-0.5",children:"Disabled"})}),a&&s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>T(R),children:[s.jsx(xe,{icon:b8,size:13}),"Edit"]}),!R.yamlOwner&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>_(R.id),children:[s.jsx(xe,{icon:bi,size:13}),"Remove"]})]})})]},R.id)})})]})})})}),s.jsx(Qs,{open:!!v,onOpenChange:R=>!R&&w(null),children:s.jsxs(hs,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:(v==null?void 0:v.mode)==="add"?"Add dashboard user":"Edit user"}),s.jsx(bs,{children:v!=null&&v.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":P8[(v==null?void 0:v.role)??"viewer"]})]}),v?s.jsxs("div",{className:"space-y-4",children:[v.mode==="add"?s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"discord-id",children:"Discord user ID"}),s.jsx(_e,{id:"discord-id",value:v.id,onChange:R=>w({...v,id:R.target.value}),placeholder:"829112572816130058"})]}):null,s.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Display name (optional)"}),s.jsx(_e,{value:v.globalName,onChange:R=>w({...v,globalName:R.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Username (optional)"}),s.jsx(_e,{value:v.username,onChange:R=>w({...v,username:R.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{children:"Permission Group"}),s.jsxs(Ca,{value:v.role,disabled:v.yamlOwner,onValueChange:R=>{const L=l.find(ne=>ne.id===R);L?w({...v,role:R,permissions:L.permissions}):M(R)},children:[s.jsx(Hr,{children:s.jsx(Sa,{})}),s.jsx(Gr,{children:v.yamlOwner?s.jsx(Et,{value:"owner",children:"Owner"}):l.length>0?l.map(R=>s.jsx(Et,{value:R.id,children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"size-2.5 rounded-full shrink-0",style:{backgroundColor:R.color||"#10B981"}}),s.jsx("span",{children:R.name})]})},R.id)):SP.map(R=>s.jsx(Et,{value:R,children:$y[R]},R))})]})]}),s.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[s.jsx("span",{className:"text-sm",children:"Account enabled"}),s.jsx(Mt,{checked:v.enabled,disabled:v.yamlOwner,onCheckedChange:R=>w({...v,enabled:R})})]}),v.role==="custom"&&!v.yamlOwner?s.jsx(EP,{permissions:v.permissions,onChange:R=>w({...v,permissions:R})}):null]}):null,s.jsxs(Js,{children:[s.jsx(ue,{variant:"outline",onClick:()=>w(null),children:"Cancel"}),s.jsx(ue,{disabled:y||!a||(v==null?void 0:v.mode)==="add"&&!/^\d{17,20}$/.test(v.id.trim()),onClick:()=>void k(),children:y?"Saving…":"Save"})]})]})})]})}const MP=[{name:"Emerald",hex:"#10B981"},{name:"Blue",hex:"#3B82F6"},{name:"Purple",hex:"#8B5CF6"},{name:"Amber",hex:"#F59E0B"},{name:"Red",hex:"#EF4444"},{name:"Cyan",hex:"#06B6D4"},{name:"Gray",hex:"#6B7280"}];function RP({permissions:t,onChange:n,disabled:a}){const o=d=>n({...t,...d}),c=[{key:"overview",title:"Dashboard Overview",description:"Access to system metrics, bot health status, and main dashboard stats."},{key:"tickets",title:"Support Tickets",description:"View open support tickets, live web chat, send staff replies, and close tickets."},{key:"transcripts",title:"Ticket Transcripts",description:"Access saved ticket HTML transcripts and configure public transcript options."},{key:"logs",title:"Console Terminal Logs",description:"View real-time bot terminal output, system logs, and runtime error traces."}],l=[["supportbot","Bot config","Main bot token, prefix, channels, categories, and core settings."],["ticket-panel","Ticket panel","Ticket home embed, button labels, dropdown options, and panel styling."],["commands","Commands","Enable/disable slash commands, descriptions, and custom names."],["messages","Messages","Custom bot response messages, welcome embeds, and embed colors."],["supportbot-ai","AI assistant","Configure AI support rules, model API keys, and auto-response channels."]];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"General & Modules Access"}),s.jsx("div",{className:"grid gap-2.5",children:c.map(({key:d,title:m,description:p})=>s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsx(Mt,{checked:t[d]??(d==="tickets"?t.overview:!1),disabled:a,onCheckedChange:g=>o({[d]:g}),className:"shrink-0"})]},d))})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Administration & Settings"}),s.jsxs("div",{className:"grid gap-2.5",children:[s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View system branding, OAuth configurations, and system health details."})]}),s.jsx(Mt,{checked:t.settings.view,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Settings (Install Updates)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Perform 1-click bot system updates and trigger bot server restarts."})]}),s.jsx(Mt,{checked:t.settings.update,disabled:a,onCheckedChange:d=>o({settings:{...t.settings,update:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (View)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"View dashboard staff accounts and permission group listings."})]}),s.jsx(Mt,{checked:t.users.view,disabled:a,onCheckedChange:d=>o({users:{...t.users,view:d}}),className:"shrink-0"})]}),s.jsxs("label",{className:"flex items-center justify-between gap-4 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Users & Groups (Manage)"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Create, edit, assign, and delete staff accounts and permission groups."})]}),s.jsx(Mt,{checked:t.users.manage,disabled:a,onCheckedChange:d=>o({users:{...t.users,manage:d}}),className:"shrink-0"})]})]})]}),s.jsxs("div",{className:"space-y-2.5",children:[s.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Configuration Files Access"}),s.jsxs("div",{className:"grid gap-2.5",children:[l.map(([d,m,p])=>{var b;const g=((b=t.configs)==null?void 0:b[d])??{view:!1,edit:!1};return s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:m}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:p})]}),s.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"View"}),s.jsx(Mt,{checked:g.view,disabled:a,onCheckedChange:v=>o({configs:{...t.configs,[d]:{...g,view:v}}})})]}),s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Edit"}),s.jsx(Mt,{checked:g.edit,disabled:a,onCheckedChange:v=>o({configs:{...t.configs,[d]:{...g,edit:v,view:v?!0:g.view}}})})]})]})]},d)}),s.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl border border-border bg-secondary/20 p-3 transition-colors hover:bg-secondary/40",children:[s.jsxs("div",{className:"space-y-0.5 min-w-0",children:[s.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Raw YAML Code Editor"}),s.jsx("p",{className:"text-xs text-muted-foreground leading-snug",children:"Access the raw YAML code editor tab to view or edit full raw configuration files."})]}),s.jsx("div",{className:"flex items-center gap-4 shrink-0",children:s.jsxs("label",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-pointer",children:[s.jsx("span",{children:"Access"}),s.jsx(Mt,{checked:t.rawYaml??!1,disabled:a,onCheckedChange:d=>o({rawYaml:d})})]})})]})]})]})]})}function AP(){const{permissions:t,impersonateGroup:n,impersonatedGroup:a,stopImpersonation:o}=Yt(),c=Rn(t,"users.manage"),[l,d]=f.useState([]),[m,p]=f.useState(!0),[g,b]=f.useState(null),[v,w]=f.useState(null),[y,C]=f.useState(!1),[S,N]=f.useState("add"),[E,T]=f.useState(!1),[M,k]=f.useState(""),[_,R]=f.useState(""),[L,ne]=f.useState(""),[X,I]=f.useState("#10B981"),[H,q]=f.useState(""),[ce,de]=f.useState(ls("viewer")),se=async()=>{var G;p(!0),b(null);try{const O=await Ne.listGroups();d(((G=O.data)==null?void 0:G.groups)||[])}catch(O){b(O instanceof Error?O.message:"Failed to load groups")}finally{p(!1)}};f.useEffect(()=>{se()},[]);const P=()=>{N("add"),k(""),R(""),ne(""),I("#10B981"),q(""),de(ls("viewer")),C(!0)},W=G=>{N("edit"),k(G.id),R(G.name),ne(G.description||""),I(G.color||"#10B981"),q(G.discordRoleId||""),de(G.permissions||ls("viewer")),C(!0)},oe=async()=>{if(!_.trim()){b("Group name is required");return}T(!0),b(null);try{S==="add"?(await Ne.createGroup({name:_.trim(),description:L.trim(),color:X,discordRoleId:H.trim()||null,permissions:ce}),w(`Group "${_}" created successfully.`)):(await Ne.updateGroup(M,{name:_.trim(),description:L.trim(),color:X,discordRoleId:H.trim()||null,permissions:ce}),w(`Group "${_}" updated successfully.`)),C(!1),await se()}catch(G){b(G instanceof Error?G.message:"Failed to save group")}finally{T(!1)}},ae=async G=>{if(!G.isSystem&&confirm(`Are you sure you want to delete the group "${G.name}"?`))try{await Ne.deleteGroup(G.id),w(`Group "${G.name}" deleted.`),await se()}catch(O){b(O instanceof Error?O.message:"Failed to delete group")}};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Permission Groups"}),s.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Create custom permission groups, assign staff members, and optionally sync with Discord Role IDs."})]}),c&&s.jsxs(ue,{onClick:P,className:"shrink-0 gap-2 bg-primary",children:[s.jsx(xe,{icon:sg,size:18}),"Create Group"]})]}),g&&s.jsx(Ye,{variant:"destructive",children:s.jsx(qe,{children:g})}),v&&s.jsx(Ye,{className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-500",children:s.jsxs(qe,{className:"flex items-center justify-between",children:[s.jsx("span",{children:v}),s.jsx(ue,{size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>w(null),children:"Dismiss"})]})}),s.jsx(Je,{className:"border-border bg-card overflow-hidden",children:s.jsx(et,{className:"p-0",children:m?s.jsxs("div",{className:"p-4 space-y-2",children:[s.jsx(Ue,{className:"h-8 w-full rounded-md"}),s.jsx(Ue,{className:"h-8 w-full rounded-md"})]}):l.length===0?s.jsx("div",{className:"p-6 text-center text-xs text-muted-foreground",children:'No permission groups found. Click "Create Group" to add one.'}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left text-xs",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-border/80 bg-secondary/30 text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:[s.jsx("th",{className:"px-4 py-2.5",children:"Group"}),s.jsx("th",{className:"px-4 py-2.5",children:"Description"}),s.jsx("th",{className:"px-4 py-2.5",children:"Discord Role ID"}),s.jsx("th",{className:"px-4 py-2.5",children:"Enabled Permissions"}),s.jsx("th",{className:"px-4 py-2.5 text-right",children:"Actions"})]})}),s.jsx("tbody",{className:"divide-y divide-border/40",children:l.map(G=>{var O,D,B,V,Z,be,K;return s.jsxs("tr",{className:"transition-colors hover:bg-secondary/25",children:[s.jsx("td",{className:"px-4 py-2.5 font-medium whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"size-2.5 rounded-full shrink-0 shadow-sm",style:{backgroundColor:G.color||"#10B981"}}),s.jsx("span",{className:"text-foreground font-semibold text-xs",children:G.name}),G.isSystem&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold px-1.5 py-0.5 rounded-full bg-secondary text-secondary-foreground border border-border/80",children:[s.jsx(xe,{icon:qu,size:10}),"System"]})]})}),s.jsx("td",{className:"px-4 py-2.5 text-xs text-muted-foreground max-w-xs truncate",children:G.description||"—"}),s.jsx("td",{className:"px-4 py-2.5 whitespace-nowrap",children:G.discordRoleId?s.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-muted-foreground font-mono bg-secondary/50 px-2 py-0.5 rounded border border-border/50",children:[s.jsx(xe,{icon:qu,size:12,className:"text-primary"}),G.discordRoleId]}):s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"—"})}),s.jsx("td",{className:"px-4 py-2.5",children:s.jsxs("div",{className:"flex flex-wrap gap-1 max-w-md",children:[((O=G.permissions)==null?void 0:O.overview)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary border border-primary/20",children:"Overview"}),(((D=G.permissions)==null?void 0:D.tickets)??((B=G.permissions)==null?void 0:B.overview))&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-400 border border-emerald-500/20",children:"Tickets"}),((V=G.permissions)==null?void 0:V.transcripts)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-purple-500/10 text-purple-400 border border-purple-500/20",children:"Transcripts"}),((Z=G.permissions)==null?void 0:Z.logs)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-blue-500/10 text-blue-400 border border-blue-500/20",children:"Logs"}),((K=(be=G.permissions)==null?void 0:be.users)==null?void 0:K.manage)&&s.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20",children:"User Mgmt"})]})}),s.jsx("td",{className:"px-4 py-2.5 text-right whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsxs(ue,{size:"sm",variant:"ghost",className:`h-7 px-2 text-xs gap-1 ${(a==null?void 0:a.id)===G.id?"text-amber-400 font-bold bg-amber-500/15 border border-amber-500/30":"text-amber-400 hover:text-amber-300 hover:bg-amber-500/10"}`,onClick:()=>(a==null?void 0:a.id)===G.id?o():n(G.id),children:[s.jsx(xe,{icon:qu,size:13}),(a==null?void 0:a.id)===G.id?"Active Preview":"View as Group"]}),c&&G.id!=="owner"&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-foreground",onClick:()=>W(G),children:[s.jsx(xe,{icon:D2,size:13}),"Edit"]}),c&&!G.isSystem&&s.jsxs(ue,{size:"sm",variant:"ghost",className:"h-7 px-2 text-xs gap-1 text-muted-foreground hover:text-destructive",onClick:()=>ae(G),children:[s.jsx(xe,{icon:bi,size:13}),"Delete"]})]})})]},G.id)})})]})})})}),s.jsx(Qs,{open:y,onOpenChange:C,children:s.jsxs(hs,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(gs,{children:[s.jsx(xs,{children:S==="add"?"Create Permission Group":`Edit Group: ${_}`}),s.jsx(bs,{children:"Configure group metadata, custom color badge, Discord role sync, and permission rules."})]}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"group-name",children:"Group Name"}),s.jsx(_e,{id:"group-name",placeholder:"e.g. Support Staff",value:_,onChange:G=>R(G.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"group-color",children:"Color Badge"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(tf,{value:X,onChange:I}),s.jsx(_e,{value:X,onChange:G=>I(G.target.value),placeholder:"#10B981",className:"w-28 font-mono text-sm uppercase"}),s.jsx("div",{className:"flex flex-wrap gap-1 ml-auto",children:MP.map(G=>s.jsx("button",{type:"button",className:"size-6 rounded-full border border-white/20 transition-transform hover:scale-110",style:{backgroundColor:G.hex},onClick:()=>I(G.hex),title:G.name},G.hex))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(Ae,{htmlFor:"group-desc",children:"Description"}),s.jsx(_e,{id:"group-desc",placeholder:"Brief description of what members in this group can access...",value:L,onChange:G=>ne(G.target.value)})]}),s.jsx(TS,{id:"discord-role-id",label:"Discord Role ID (Optional Auto-Sync)",description:"If provided, Discord users with this Role ID will automatically inherit this group upon login.",kind:"role",value:H,onChange:G=>q(String(G??""))}),s.jsxs("div",{className:"pt-2",children:[s.jsx("h4",{className:"text-sm font-semibold mb-3",children:"Group Permission Matrix"}),s.jsx(RP,{permissions:ce,onChange:de})]})]}),s.jsxs(Js,{className:"gap-2 sm:gap-0",children:[s.jsx(ue,{variant:"outline",onClick:()=>C(!1),disabled:E,children:"Cancel"}),s.jsx(ue,{onClick:oe,disabled:E,className:"bg-primary",children:E?"Saving...":S==="add"?"Create Group":"Save Changes"})]})]})})]})}function _P({children:t}){const{isAuthenticated:n,loading:a}=Yt();return a?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?s.jsx(s.Fragment,{children:t}):s.jsx(ya,{to:"/login",replace:!0})}function DP(){const{complete:t,loading:n}=fS(),a=Kn();return n?s.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):t?a.pathname==="/setup"?s.jsx(ya,{to:"/login",replace:!0}):s.jsxs(Py,{children:[s.jsx(un,{path:"/login",element:s.jsx(vz,{})}),s.jsxs(un,{element:s.jsx(_P,{children:s.jsx(TA,{})}),children:[s.jsx(un,{index:!0,element:s.jsx(Vz,{})}),s.jsx(un,{path:"system",element:s.jsx(ga,{permission:"overview",children:s.jsx(sP,{})})}),s.jsx(un,{path:"settings",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(nP,{})})}),s.jsx(un,{path:"configs",element:s.jsx(gz,{})}),s.jsx(un,{path:"logs",element:s.jsx(ga,{permission:"logs",children:s.jsx(mP,{})})}),s.jsx(un,{path:"tickets",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(CP,{})})}),s.jsx(un,{path:"transcripts",element:s.jsx(ga,{permission:"transcripts",children:s.jsx(jP,{})})}),s.jsx(un,{path:"users",element:s.jsx(ga,{permission:"users.view",children:s.jsx(TP,{})})}),s.jsx(un,{path:"groups",element:s.jsx(ga,{permission:"users.view",children:s.jsx(AP,{})})}),s.jsx(un,{path:"addons",element:s.jsx(ga,{permission:"settings.view",children:s.jsx(Fz,{})})}),s.jsx(un,{path:"addons/builder",element:s.jsx(ga,{permission:"settings.update",children:s.jsx(Yz,{})})})]}),s.jsx(un,{path:"*",element:s.jsx(ya,{to:"/",replace:!0})})]}):s.jsxs(Py,{children:[s.jsx(un,{path:"/setup",element:s.jsx(Lz,{})}),s.jsx(un,{path:"*",element:s.jsx(ya,{to:"/setup",replace:!0})})]})}function OP({...t}){return s.jsx(KO,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...t})}Zz();_3.createRoot(document.getElementById("root")).render(s.jsx(f.StrictMode,{children:s.jsx(a8,{children:s.jsx(aC,{children:s.jsx(B8,{children:s.jsx(MA,{children:s.jsxs(U8,{children:[s.jsx(DP,{}),s.jsx(OP,{})]})})})})})})); diff --git a/public/dashboard/index.html b/public/dashboard/index.html index 823007d..95d54fc 100644 --- a/public/dashboard/index.html +++ b/public/dashboard/index.html @@ -10,7 +10,7 @@ href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> - + From a746c468e57a9b093c35b387ebbbda3e1c586d32 Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Fri, 28 Aug 2026 17:48:09 +0100 Subject: [PATCH 21/22] 26.2 final push --- .gitignore | 3 - Commands/General/profile.js | 98 +- Commands/Utils/mod.js | 2 +- Commands/Utils/settings.js | 27 +- Configs/supportbot-ai.yml | 18 +- Configs/supportbot.yml | 2 +- Events/interactionCreate.js | 83 +- Logs/Error/Error-2026-08-28.log | 1 + Logs/Warn/Warn-2026-08-28.log | 1 + README.md | 20 +- Structures/Database.js | 216 +++ package-lock.json | 2625 +++++++++++++++++++++++++++++++ package.json | 2 +- scripts/setup-git-security.js | 113 ++ 14 files changed, 3048 insertions(+), 163 deletions(-) create mode 100644 Logs/Error/Error-2026-08-28.log create mode 100644 Logs/Warn/Warn-2026-08-28.log create mode 100644 package-lock.json create mode 100644 scripts/setup-git-security.js diff --git a/.gitignore b/.gitignore index 7209125..86bc145 100644 --- a/.gitignore +++ b/.gitignore @@ -17,8 +17,5 @@ Logs/Warns/* # Dashboard UI source at repo root only (do not ignore public/dashboard/) /dashboard/ -# Local git hooks + secret-stripping scripts (run npm run git:setup) -scripts/ - # Local secrets — use *.example as templates Configs/api.yml diff --git a/Commands/General/profile.js b/Commands/General/profile.js index 989f394..f1e20b7 100644 --- a/Commands/General/profile.js +++ b/Commands/General/profile.js @@ -177,6 +177,37 @@ function buildTicketStatsContainer(viewingUserId, ticketsClaimed, ticketsOpen, a return container; } +function getStaffTicketStats(viewingUserId) { + const allTickets = typeof db.getAllTickets === "function" ? db.getAllTickets() : []; + const ticketsClaimed = allTickets.filter( + (t) => t.claimedBy === viewingUserId || t.claimed_by === viewingUserId, + ); + const ticketsOpen = ticketsClaimed.filter( + (t) => (t.status || "").toLowerCase() === "open", + ); + + let totalResponseTime = 0; + let responseCount = 0; + + ticketsClaimed.forEach((t) => { + const claimedAt = t.claimedAt || t.claimed_at; + const createdAt = t.createdAt || t.created_at; + if (claimedAt && createdAt) { + const diff = new Date(claimedAt).getTime() - new Date(createdAt).getTime(); + if (diff > 0) { + totalResponseTime += diff; + responseCount++; + } + } + }); + + const avgMinutes = responseCount + ? Math.round(totalResponseTime / responseCount / 60000) + : 0; + + return { ticketsClaimed, ticketsOpen, avgMinutes }; +} + function buildOpenTicketsContainer(ticketsOpen) { const container = new ContainerBuilder(); @@ -192,7 +223,9 @@ function buildOpenTicketsContainer(ticketsOpen) { container.addTextDisplayComponents( new TextDisplayBuilder().setContent( - ticketsOpen.length ? ticketsOpen.map((t) => `<#${t.id}>`).join("\n") : "No active tickets.", + ticketsOpen.length + ? ticketsOpen.map((t) => `<#${t.ticket_id || t.id}>`).join("\n") + : "No active tickets.", ), ); @@ -352,31 +385,7 @@ module.exports = new Command({ } if (i.customId === "viewTicketStats") { - let TicketData = { tickets: [] }; - - try { - TicketData = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8")); - } catch (error) { - console.error("Error reading TicketData.json:", error); - } - - const ticketsClaimed = TicketData.tickets.filter((t) => t.claimedBy === viewingUserId); - const ticketsOpen = ticketsClaimed.filter((t) => t.open); - const totalTickets = ticketsClaimed.length; - - let totalResponseTime = 0; - let responseCount = 0; - - ticketsClaimed.forEach((t) => { - if (t.claimedAt && t.createdAt) { - totalResponseTime += new Date(t.claimedAt) - new Date(t.createdAt); - responseCount++; - } - }); - - const avgMinutes = responseCount - ? Math.round(totalResponseTime / responseCount / 60000) - : 0; + const { ticketsClaimed, ticketsOpen, avgMinutes } = getStaffTicketStats(viewingUserId); const statsContainer = buildTicketStatsContainer( viewingUserId, @@ -403,17 +412,7 @@ module.exports = new Command({ } if (i.customId === "showOpenTickets") { - let TicketData = { tickets: [] }; - - try { - TicketData = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8")); - } catch (error) { - console.error("Error reading TicketData.json:", error); - } - - const ticketsOpen = TicketData.tickets.filter( - (t) => t.claimedBy === viewingUserId && t.open, - ); + const { ticketsOpen } = getStaffTicketStats(viewingUserId); const openContainer = buildOpenTicketsContainer(ticketsOpen); @@ -431,30 +430,7 @@ module.exports = new Command({ } if (i.customId === "backToStats") { - let TicketData = { tickets: [] }; - - try { - TicketData = JSON.parse(fs.readFileSync("./Data/TicketData.json", "utf8")); - } catch (error) { - console.error("Error reading TicketData.json:", error); - } - - const ticketsClaimed = TicketData.tickets.filter((t) => t.claimedBy === viewingUserId); - const ticketsOpen = ticketsClaimed.filter((t) => t.open); - - let totalResponseTime = 0; - let responseCount = 0; - - ticketsClaimed.forEach((t) => { - if (t.claimedAt && t.createdAt) { - totalResponseTime += new Date(t.claimedAt) - new Date(t.createdAt); - responseCount++; - } - }); - - const avgMinutes = responseCount - ? Math.round(totalResponseTime / responseCount / 60000) - : 0; + const { ticketsClaimed, ticketsOpen, avgMinutes } = getStaffTicketStats(viewingUserId); const statsContainer = buildTicketStatsContainer( viewingUserId, diff --git a/Commands/Utils/mod.js b/Commands/Utils/mod.js index 545049f..cc3cb3f 100644 --- a/Commands/Utils/mod.js +++ b/Commands/Utils/mod.js @@ -74,7 +74,7 @@ module.exports = new Command({ } ], - run: async ({ interaction }) => { + async run(interaction) { const subcommandGroup = interaction.options.getSubcommandGroup(); const subcommand = interaction.options.getSubcommand(); const user = interaction.options.getUser('user'); diff --git a/Commands/Utils/settings.js b/Commands/Utils/settings.js index 036a705..acd4902 100644 --- a/Commands/Utils/settings.js +++ b/Commands/Utils/settings.js @@ -1,35 +1,18 @@ -const { Command } = require('../../Structures/Addon.js'); +const Command = require("../../Structures/Command.js"); const Discord = require("discord.js"); -const fs = require("fs"); -const yaml = require("js-yaml"); const db = require("../../Structures/Database.js"); const supportbot = require("../../Structures/ConfigStore").supportbot; const cmdconfig = require("../../Structures/ConfigStore").commands; async function loadSettings() { - return new Promise((resolve, reject) => { - db.get("SELECT data FROM settings WHERE id = 1", (err, row) => { - if (err) return reject(err); - if (!row) return resolve({}); - try { - resolve(JSON.parse(row.data)); - } catch (e) { - resolve({}); - } - }); - }); + return typeof db.getSettings === "function" ? db.getSettings() : {}; } async function saveSettings(settings) { - const data = JSON.stringify(settings); - return new Promise((resolve, reject) => { - db.run( - "INSERT INTO settings (id, data) VALUES (1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data", - [data], - (err) => (err ? reject(err) : resolve()) - ); - }); + if (typeof db.saveSettings === "function") { + db.saveSettings(settings); + } } module.exports = new Command({ diff --git a/Configs/supportbot-ai.yml b/Configs/supportbot-ai.yml index e8f9f89..7005f1a 100644 --- a/Configs/supportbot-ai.yml +++ b/Configs/supportbot-ai.yml @@ -59,20 +59,18 @@ Memory: CustomInstructions: - "You are SupportBot AI made by Emerald Services" - - "You are built with DiscordJS/NodeJS and currently running on dev build 26.0 - build 2" + - "You are built with DiscordJS/NodeJS and currently running on version 26.2" - "You're current build can be found here - https://github.com/Emerald-Services/SupportBot/tree/26.0" + https://github.com/Emerald-Services/SupportBot" - "You're main build can be found here https://builtbybit.com/resources/supportbot-free-advanced-ticket-bot.8940/ and Polymart at - https://polymart.org/product/518/supportbot-1-discord-ticket-bot which is - version 8.4" - - "dev build 26.0 build 2 includes all-new AI features for SupportBot such as - memory system that allows you to remember facts and summaries of - conversations, which can be used to provide better responses." - - "SupportBot AI also have a new tickets AI Mode which is enabled in - supportbot.ymll, which allows you to assist users in support tickets and + https://polymart.org/product/518/supportbot-1-discord-ticket-bot" + - "SupportBot includes all-new AI features such as a memory system that allows + you to remember facts and summaries of conversations, which can be used to + provide better responses." + - "SupportBot AI also has a tickets AI Mode which is enabled in + supportbot.yml, which allows you to assist users in support tickets and provide better responses based on the context of the ticket." - "Your main purpose is to assist users in the support server and provide helpful responses to their questions and issues. Always be accurate and if diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index e68a47a..e57debe 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -12,7 +12,7 @@ # # SupportBot Configuration (supportbot.yml) -SupportBot_Version: "v26.2-pre2" +SupportBot_Version: "v26.2" # ------------------------- # General diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index 0c98ebc..2b26d99 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -867,69 +867,52 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { interaction.customId === "downvote" || interaction.customId === "removevote" ) { - const suggestion = suggestions[interaction.message.id]; - if (!suggestion) - return interaction.reply({ - content: "Suggestion not found.", - ephemeral: true, - }); + const suggestion = (typeof db.getSuggestion === "function" ? db.getSuggestion(interaction.message.id) : null) || { + id: interaction.message.id, + author_id: "", + text: "", + status: "Created", + upvotes: [], + downvotes: [], + }; const userId = interaction.user.id; - const hasUpvoted = suggestion.upvotes.includes(userId); - const hasDownvoted = suggestion.downvotes.includes(userId); - if (interaction.customId === "upvote") { - if (hasUpvoted) { - suggestion.upvotes = suggestion.upvotes.filter((id) => id !== userId); - } else { - suggestion.upvotes.push(userId); - if (hasDownvoted) { - suggestion.downvotes = suggestion.downvotes.filter( - (id) => id !== userId, - ); - } - } - } else if (interaction.customId === "downvote") { - if (hasDownvoted) { - suggestion.downvotes = suggestion.downvotes.filter( - (id) => id !== userId, - ); - } else { - suggestion.downvotes.push(userId); - if (hasUpvoted) { - suggestion.upvotes = suggestion.upvotes.filter( - (id) => id !== userId, - ); - } - } - } else if (interaction.customId === "removevote") { - suggestion.upvotes = suggestion.upvotes.filter((id) => id !== userId); - suggestion.downvotes = suggestion.downvotes.filter( - (id) => id !== userId, - ); + if (supportbot.Suggestions?.OwnSuggestion === false && suggestion.author_id === userId) { + return interaction.reply({ + content: "You cannot vote on your own suggestion.", + flags: Discord.MessageFlags.Ephemeral, + }); } - fs.writeFileSync( - "./Data/SuggestionData.json", - JSON.stringify(suggestions, null, 2), - ); + const voteResult = typeof db.voteSuggestion === "function" + ? db.voteSuggestion(interaction.message.id, userId, interaction.customId) + : { upvoteCount: 0, downvoteCount: 0 }; - const upvoteCount = suggestion.upvotes.length; - const downvoteCount = suggestion.downvotes.length; + const oldEmbed = interaction.message.embeds?.[0]; + if (!oldEmbed) { + return interaction.reply({ + content: "Suggestion embed not found.", + flags: Discord.MessageFlags.Ephemeral, + }); + } - const updatedEmbed = new Discord.EmbedBuilder( - interaction.message.embeds[0].data, - ).setFields([ - { name: "Suggestion", value: suggestion.suggestion, inline: true }, - { name: "From", value: `<@${suggestion.author}>` }, + const suggestionText = suggestion.text || oldEmbed.fields?.find((f) => f.name === "Suggestion")?.value || ""; + const authorText = suggestion.author_id + ? `<@${suggestion.author_id}>` + : (oldEmbed.fields?.find((f) => f.name === "From")?.value || `<@${userId}>`); + + const updatedEmbed = Discord.EmbedBuilder.from(oldEmbed).setFields([ + { name: "Suggestion", value: suggestionText, inline: true }, + { name: "From", value: authorText }, { name: `${supportbot.Suggestions.UpvoteEmoji} ${supportbot.Suggestions.UpvoteTitle}`, - value: `${upvoteCount}`, + value: `${voteResult.upvoteCount}`, inline: true, }, { name: `${supportbot.Suggestions.DownvoteEmoji} ${supportbot.Suggestions.DownvoteTitle}`, - value: `${downvoteCount}`, + value: `${voteResult.downvoteCount}`, inline: true, }, ]); diff --git a/Logs/Error/Error-2026-08-28.log b/Logs/Error/Error-2026-08-28.log new file mode 100644 index 0000000..3b9f2c2 --- /dev/null +++ b/Logs/Error/Error-2026-08-28.log @@ -0,0 +1 @@ +[2026-08-28T16:37:42.883Z] [Database] Error initializing MySQL tables or state: diff --git a/Logs/Warn/Warn-2026-08-28.log b/Logs/Warn/Warn-2026-08-28.log new file mode 100644 index 0000000..461dd80 --- /dev/null +++ b/Logs/Warn/Warn-2026-08-28.log @@ -0,0 +1 @@ +[2026-08-28T16:37:42.884Z] [Database] Falling back to SQLite database. diff --git a/README.md b/README.md index c38d2cd..bcf741b 100644 --- a/README.md +++ b/README.md @@ -28,14 +28,10 @@ | SupportBot | Node.JS | Discord.JS | Supported | |------------|---------|------------|------------| -| 26.x | 22.x | 14.x. | ✅ Yes -| 8.x | 22.x | 14.x. | ❌ Yes -| 7.7.3 | 16.x | 13.x. | ❌ No -| 7.x | 16.x | 13.x. | ❌ No -| 6.x | 14.x | 13.x. | ❌ No -| 5.x | 12.x | 13.x. | ❌ No -| 4.x | 11.x | 13.x. | ❌ No -| Older | 10.x | 13.x. | ❌ No +| 26.x | 22.x | 14.x | ✅ Yes | +| 8.x | 22.x | 14.x | ❌ No | +| 7.x | 16.x | 13.x | ❌ No | +| Older | 10.x | 13.x | ❌ No |
@@ -74,7 +70,7 @@ Released under the [MIT](https://opensource.org/licenses/MIT) license. ## Third-Party - [Verified Addons](https://emeraldsrv.dev) -- [BuiltByBit]([https://builtbybit.com/supportbot](https://builtbybit.com/resources/supportbot-advanced-ticket-bot.8940/)) +- [BuiltByBit](https://builtbybit.com/resources/supportbot-advanced-ticket-bot.8940/) - [Voxel](https://polymart.org/resource/supportbot-1-discord-ticket-bot.518) @@ -86,8 +82,4 @@ Released under the [MIT](https://opensource.org/licenses/MIT) license. ## Hosting -You can use our [Pterodactyl egg](https://github.com/Emerald-Services/Pterodactyl-Egg) to host it on your own panel. We currently don't offer hosting for you, altough we might add this in the future. -If you don't know how to install pterodactyl, you could always host it on replit: - -[![Run on Repl.it](https://repl.it/badge/github/ItsNyoty/IKI-bot)]([https://repl.it/github/ItsNyoty/iki](https://repl.it/github/Emerald-Services/SupportBot -) \ No newline at end of file +You can use our [Pterodactyl egg](https://github.com/Emerald-Services/Pterodactyl-Egg) to host SupportBot on your own panel. \ No newline at end of file diff --git a/Structures/Database.js b/Structures/Database.js index 20576fa..8b70d95 100644 --- a/Structures/Database.js +++ b/Structures/Database.js @@ -37,6 +37,7 @@ const state = { profiles: {}, settings: {}, blacklisted_users: {}, + suggestions: {}, }; // ---------------------------------------------------- @@ -114,6 +115,16 @@ function initSQLite() { added_by TEXT, created_at INTEGER ); + + CREATE TABLE IF NOT EXISTS suggestions ( + id TEXT PRIMARY KEY, + author_id TEXT, + text TEXT, + status TEXT DEFAULT 'Created', + upvotes TEXT DEFAULT '[]', + downvotes TEXT DEFAULT '[]', + created_at INTEGER + ); `); loadSQLiteState(); @@ -132,6 +143,10 @@ function loadSQLiteState() { department: r.department || "general", priority: r.priority || "medium", status: r.status || "open", + claimedBy: r.claimed_by || null, + claimed_by: r.claimed_by || null, + claimedAt: r.claimed_at || null, + claimed_at: r.claimed_at || null, aiModeEnabled: r.ai_mode_enabled, aiChannelId: r.ai_channel_id, aiType: r.ai_type, @@ -190,6 +205,31 @@ function loadSQLiteState() { created_at: b.created_at, }; } + + const suggestions = sqliteDb.prepare("SELECT * FROM suggestions").all(); + for (const s of suggestions) { + let upvotes = []; + let downvotes = []; + try { + upvotes = JSON.parse(s.upvotes || "[]"); + } catch { + upvotes = []; + } + try { + downvotes = JSON.parse(s.downvotes || "[]"); + } catch { + downvotes = []; + } + state.suggestions[s.id] = { + id: s.id, + author_id: s.author_id, + text: s.text, + status: s.status || "Created", + upvotes: Array.isArray(upvotes) ? upvotes : [], + downvotes: Array.isArray(downvotes) ? downvotes : [], + created_at: Number(s.created_at), + }; + } } function initMySQL() { @@ -275,6 +315,18 @@ function initMySQL() { ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; `); + await poolPromise.query(` + CREATE TABLE IF NOT EXISTS suggestions ( + id VARCHAR(255) PRIMARY KEY, + author_id VARCHAR(255), + text TEXT, + status VARCHAR(255) DEFAULT 'Created', + upvotes LONGTEXT, + downvotes LONGTEXT, + created_at BIGINT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + // Load initial state from MySQL const [tickets] = await poolPromise.query("SELECT * FROM tickets"); for (const r of tickets) { @@ -286,6 +338,10 @@ function initMySQL() { department: r.department || "general", priority: r.priority || "medium", status: r.status || "open", + claimedBy: r.claimed_by || null, + claimed_by: r.claimed_by || null, + claimedAt: r.claimed_at ? Number(r.claimed_at) : null, + claimed_at: r.claimed_at ? Number(r.claimed_at) : null, aiModeEnabled: r.ai_mode_enabled, aiChannelId: r.ai_channel_id, aiType: r.ai_type, @@ -345,6 +401,31 @@ function initMySQL() { }; } + const [suggestions] = await poolPromise.query("SELECT * FROM suggestions"); + for (const s of suggestions) { + let upvotes = []; + let downvotes = []; + try { + upvotes = JSON.parse(s.upvotes || "[]"); + } catch { + upvotes = []; + } + try { + downvotes = JSON.parse(s.downvotes || "[]"); + } catch { + downvotes = []; + } + state.suggestions[s.id] = { + id: s.id, + author_id: s.author_id, + text: s.text, + status: s.status || "Created", + upvotes: Array.isArray(upvotes) ? upvotes : [], + downvotes: Array.isArray(downvotes) ? downvotes : [], + created_at: Number(s.created_at), + }; + } + mysqlReady = true; const clr = { reset: "\x1b[0m", gray: "\x1b[90m", green: "\x1b[32m", white: "\x1b[37m" }; console.log(`${clr.green}✓${clr.reset} ${clr.white}Database Connected${clr.reset} ${clr.gray}to MySQL (${mysqlOpts.Host}:${mysqlOpts.Port}/${mysqlOpts.Database})${clr.reset}`); @@ -639,6 +720,32 @@ function persistBlacklistedUser(userId, action = "add") { } } +function persistSuggestion(id) { + const s = state.suggestions[id]; + if (!s) return; + + const upvotesStr = JSON.stringify(s.upvotes || []); + const downvotesStr = JSON.stringify(s.downvotes || []); + + if (isMySQL && mysqlReady && mysqlPool) { + const sql = ` + INSERT INTO suggestions (id, author_id, text, status, upvotes, downvotes, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE text=VALUES(text), status=VALUES(status), upvotes=VALUES(upvotes), downvotes=VALUES(downvotes); + `; + mysqlPool.query(sql, [s.id, s.author_id || "", s.text || "", s.status || "Created", upvotesStr, downvotesStr, s.created_at || Date.now()], (err) => { + if (err) console.error("[Database] MySQL persistSuggestion error:", err.message); + }); + } else if (sqliteDb) { + const stmt = sqliteDb.prepare(` + INSERT INTO suggestions (id, author_id, text, status, upvotes, downvotes, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(id) DO UPDATE SET text=excluded.text, status=excluded.status, upvotes=excluded.upvotes, downvotes=excluded.downvotes; + `); + stmt.run(s.id, s.author_id || "", s.text || "", s.status || "Created", upvotesStr, downvotesStr, s.created_at || Date.now()); + } +} + function ensureProfile(userId) { if (!state.profiles[userId]) { state.profiles[userId] = { user_id: userId, bio: "", timezone: "", clockedIn: 0 }; @@ -657,8 +764,15 @@ function normaliseTicketRow(row) { } } + const claimedBy = row.claimedBy || row.claimed_by || null; + const claimedAt = row.claimedAt || row.claimed_at || null; + return { ...row, + claimedBy, + claimed_by: claimedBy, + claimedAt, + claimed_at: claimedAt, aiModeEnabled: Boolean(row.aiModeEnabled), clockedIn: row.clockedIn !== undefined ? Boolean(row.clockedIn) : row.clockedIn, questionAnswers, @@ -882,6 +996,108 @@ const exportsModule = { return Object.values(state.blacklisted_users); }, + claimTicket(ticketId, userId) { + const t = state.tickets[ticketId]; + if (!t) return; + t.claimedBy = userId; + t.claimed_by = userId; + t.claimedAt = Date.now(); + t.claimed_at = Date.now(); + t.updated_at = Date.now(); + persistTicket(ticketId); + }, + + addSuggestion(id, authorId, text) { + state.suggestions[id] = { + id, + author_id: authorId, + text, + status: "Created", + upvotes: [], + downvotes: [], + created_at: Date.now(), + }; + persistSuggestion(id); + }, + + add(id, authorId, text) { + this.addSuggestion(id, authorId, text); + }, + + getSuggestion(id) { + const s = state.suggestions[id]; + if (!s) return null; + return { + ...s, + upvotes: Array.isArray(s.upvotes) ? s.upvotes : [], + downvotes: Array.isArray(s.downvotes) ? s.downvotes : [], + }; + }, + + setSuggestionStatus(id, status) { + const s = state.suggestions[id]; + if (!s) return; + s.status = status; + persistSuggestion(id); + }, + + setStatus(id, status) { + this.setSuggestionStatus(id, status); + }, + + voteSuggestion(id, userId, voteType) { + let s = state.suggestions[id]; + if (!s) { + s = { + id, + author_id: "", + text: "", + status: "Created", + upvotes: [], + downvotes: [], + created_at: Date.now(), + }; + state.suggestions[id] = s; + } + + if (!Array.isArray(s.upvotes)) s.upvotes = []; + if (!Array.isArray(s.downvotes)) s.downvotes = []; + + const hasUpvoted = s.upvotes.includes(userId); + const hasDownvoted = s.downvotes.includes(userId); + + if (voteType === "upvote") { + if (hasUpvoted) { + s.upvotes = s.upvotes.filter((uid) => uid !== userId); + } else { + s.upvotes.push(userId); + if (hasDownvoted) { + s.downvotes = s.downvotes.filter((uid) => uid !== userId); + } + } + } else if (voteType === "downvote") { + if (hasDownvoted) { + s.downvotes = s.downvotes.filter((uid) => uid !== userId); + } else { + s.downvotes.push(userId); + if (hasUpvoted) { + s.upvotes = s.upvotes.filter((uid) => uid !== userId); + } + } + } else if (voteType === "removevote") { + s.upvotes = s.upvotes.filter((uid) => uid !== userId); + s.downvotes = s.downvotes.filter((uid) => uid !== userId); + } + + persistSuggestion(id); + + return { + suggestion: s, + upvoteCount: s.upvotes.length, + downvoteCount: s.downvotes.length, + }; + }, + getDatabaseInfo() { if (isMySQL) { const mysqlOpts = dbConfig.MySQL || {}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b999a9a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2625 @@ +{ + "name": "supportbot", + "version": "26.2-pre-2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "supportbot", + "version": "26.2-pre-2", + "license": "MIT", + "dependencies": { + "@vitalets/google-translate-api": "^9.2.1", + "adm-zip": "^0.6.0", + "axios": "^1.7.2", + "better-sqlite3": "^12.2.0", + "cookie-parser": "^1.4.7", + "cors": "^2.8.6", + "discord.js": "^14.13.0", + "express": "^5.2.1", + "figlet": "^1.9.3", + "google-translate-api": "^2.3.0", + "gradient-string": "^3.0.0", + "js": "^0.1.0", + "js-yaml": "^4.1.0", + "moment": "^2.29.3", + "ms": "^2.1.3", + "mysql2": "^3.23.3", + "openai": "^4.50.0", + "systeminformation": "^5.31.5", + "yaml": "^2.8.3" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.14.1.tgz", + "integrity": "sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/formatters": "^0.6.2", + "@discordjs/util": "^1.2.0", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "^0.38.40", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.2.tgz", + "integrity": "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "^0.38.33" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.3.tgz", + "integrity": "sha512-wvOylxNYJkwKjctS/Mn5GP1w9r3/rzyH+ThD1JlAca6zEdlHs8QWBBUQJpU5Q+W6DoIj/Ljh1IPlZs7hTU+UAg==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.2.0", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.5", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "^0.38.50", + "magic-bytes.js": "^1.13.0", + "tslib": "^2.6.3", + "undici": "^6.27.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz", + "integrity": "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "^0.38.33" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", + "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.5.1", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "^0.38.1", + "tslib": "^2.6.2", + "ws": "^8.17.0" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v16" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.5.tgz", + "integrity": "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", + "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.0.tgz", + "integrity": "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitalets/google-translate-api": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.1.tgz", + "integrity": "sha512-zlwQWSjXUZhbZQ6qwtIQ7GdYXFQmJ4wYqzcrYJUxtvzQQwUP+uKUb/SRJaBOQuBntjBjzcdcJoLFrpCKUbIkOg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "^1.8.2", + "http-errors": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.7.tgz", + "integrity": "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/adm-zip": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", + "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", + "license": "MIT", + "engines": { + "node": ">=14.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz", + "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", + "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/configstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha512-BOCxwwxF5WPspp1OBq9j0JLyL5JgJOTssz9PdOHr8VWjFijaC3PpjU48vFEX3uxx8sTusnVQckLbNzBq6fmkGw==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^3.0.0", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "license": "MIT", + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.38.54", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.54.tgz", + "integrity": "sha512-3704EKdPtVl0Mozoe6uBJQ8GNmUkH8c81nfXkdSBx+Um8GN3FI/003uTY0Pg0A4KjL8g2Q+4v5cHR247kv6vwA==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, + "node_modules/discord.js": { + "version": "14.27.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.27.0.tgz", + "integrity": "sha512-qHbFlFG2N7y3LjPySYsL6A1+BnX6bkTVgo842EX0CqVPk/KTMwZkojPHEXKsQUpWZNyz5BISNHK1cPpQw0+m4A==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/builders": "^1.14.1", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.6.2", + "@discordjs/rest": "^2.6.2", + "@discordjs/util": "^1.2.0", + "@discordjs/ws": "^1.2.3", + "@sapphire/snowflake": "3.5.5", + "discord-api-types": "^0.38.49", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.13.0", + "tslib": "^2.6.3", + "undici": "^6.27.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha512-k4ELWeEU3uCcwub7+dWydqQBRjAjkV9L33HjVRG5Xo2QybI6ja/v+4W73SRi8ubCqJz0l9XsTP1NbewfyqaSlw==", + "license": "MIT", + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/figlet": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.11.4.tgz", + "integrity": "sha512-ZU41480OncL+NVLQrT0GVnbO0COL24sLSrzksioDgunmdJNYEUxhJJZ4Y3x1csN8XXqN5OcCZTLG8lKdquNyfQ==", + "license": "MIT", + "dependencies": { + "commander": "^14.0.0" + }, + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 17.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/google-translate-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/google-translate-api/-/google-translate-api-2.3.0.tgz", + "integrity": "sha512-a7MRJpSAoS9HyQPE7Yqp5jYSRePWju53+Je/AkgU//zbSmZhy2tc+MvxlwbOegpptT7Ep6GCt7Q1/j7WmTntZw==", + "license": "MIT", + "dependencies": { + "configstore": "^2.0.0", + "google-translate-token": "latest", + "got": "^6.3.0", + "safe-eval": "^0.3.0" + } + }, + "node_modules/google-translate-token": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/google-translate-token/-/google-translate-token-1.0.0.tgz", + "integrity": "sha512-X+cONF24KI3PP94ih3L8QlqNgVxZxsfOyJtX93UISO7TRdTSrFpp4rmDpyS/x6xRxJOLcd6ApCTAkB+tNFtc3g==", + "license": "MIT", + "dependencies": { + "configstore": "^2.0.0", + "got": "^6.3.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", + "license": "MIT", + "dependencies": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gradient-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-3.0.0.tgz", + "integrity": "sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "tinygradient": "^1.1.5" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/js/-/js-0.1.0.tgz", + "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==", + "dependencies": { + "commander": "~1.1.1" + }, + "bin": { + "js": "bin/js" + } + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js/node_modules/commander": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", + "dependencies": { + "keypress": "0.1.x" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru.min": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.13.1.tgz", + "integrity": "sha512-x5sn4UX2k5gCWlcfmoFwG4TPie8+dctESyqOBdhB5p6MsgWXdBKGmt9nXPObj/JI50TTL928lc5Yt1WntMn1bw==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mysql2": { + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.24.2.tgz", + "integrity": "sha512-l9kXeKGwd6VCbSjmpO/bLWb+YCYpbvE4whte8ec6InXebvCNyEEydyRCnRU+TSHNqRLJ8B+Tk1uWb+vMCJgJzA==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.2", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.3", + "long": "^5.3.2", + "lru.min": "^1.1.4", + "named-placeholders": "^1.1.6", + "sql-escaper": "^1.5.1" + }, + "engines": { + "node": ">= 8.0" + }, + "peerDependencies": { + "@types/node": ">= 8" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/node-abi": { + "version": "3.95.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.95.0.tgz", + "integrity": "sha512-T9iGctuocf0qIWFFOTxPzjT5q0SILqaBYXt272tlBHvTKC5+3JnkMirLxNJNkXHtFyBjU2Jx+NL4Zipr0B/c6Q==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "4.104.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", + "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-eval": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/safe-eval/-/safe-eval-0.3.0.tgz", + "integrity": "sha512-uPIAjU2zpyv2QJCZ1zaWZKnPv/5jgkaitE7WHomV4Mxu6kgHY1ruIQ1oTikEta/Sux3E8pZAozzJRsAUu3iDZA==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/sql-escaper": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.5.1.tgz", + "integrity": "sha512-4toX5E1fQbBrpfXidaHnF0669nkAdETeIPTs2SUjxxD7RRIs9ICG4gtpmfc68JCEKehsdwLFqBu9VlQqZ1P1gg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=2.0.0", + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/mysqljs/sql-escaper?sponsor=1" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/systeminformation": { + "version": "5.33.5", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.33.5.tgz", + "integrity": "sha512-0v8l1CwFOAjfkv6ynpMrv3YGjH0M7PWCpZwusr8J1TEoQFPK7WXO6gbeAiandaWoh7vbMdnFtDqVotJVnLJtIg==", + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/tar-fs": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.5.tgz", + "integrity": "sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, + "node_modules/tinygradient": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", + "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", + "license": "MIT", + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha512-NF1pPn594TaRSUO/HARoB4jK8I+rWgcpVlpQCK6/6o5PHyLUt2CSiDrpUZbQ6rROck+W2EwF8mBJcTs+W98J9w==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + } + } +} diff --git a/package.json b/package.json index 5a9f1ce..1c1210c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "supportbot", - "version": "26.2-pre-2", + "version": "26.2.0", "description": "SupportBot is an open-sourced support system for discord. It's completely free to use with high amounts of customization to match your own brand.", "main": "index.js", "scripts": { diff --git a/scripts/setup-git-security.js b/scripts/setup-git-security.js new file mode 100644 index 0000000..b733e78 --- /dev/null +++ b/scripts/setup-git-security.js @@ -0,0 +1,113 @@ +#!/usr/bin/env node +/** + * SupportBot | Emerald Services + * Git Security Setup Script + * + * Sets up Git pre-commit hooks and safeguards to prevent sensitive credentials + * (Discord bot tokens, API keys, database credentials) from being accidentally committed. + */ + +const fs = require("fs"); +const path = require("path"); + +const ROOT_DIR = path.resolve(__dirname, ".."); +const GIT_DIR = path.join(ROOT_DIR, ".git"); +const HOOKS_DIR = path.join(GIT_DIR, "hooks"); +const PRE_COMMIT_HOOK = path.join(HOOKS_DIR, "pre-commit"); + +const colors = { + reset: "\x1b[0m", + green: "\x1b[32m", + yellow: "\x1b[33m", + red: "\x1b[31m", + cyan: "\x1b[36m", + bold: "\x1b[1m", + gray: "\x1b[90m", +}; + +console.log(`\n${colors.bold}${colors.green}SupportBot Git Security Setup${colors.reset}`); +console.log(`${colors.gray}────────────────────────────────────────────────────────${colors.reset}`); + +if (!fs.existsSync(GIT_DIR)) { + console.log(`${colors.yellow}[!] Warning: .git directory not found. Are you in a Git repository?${colors.reset}`); + process.exit(0); +} + +if (!fs.existsSync(HOOKS_DIR)) { + fs.mkdirSync(HOOKS_DIR, { recursive: true }); +} + +// Pre-commit hook script +const hookContent = `#!/usr/bin/env node +/** + * SupportBot Git Pre-Commit Security Hook + * Scans staged configuration files for exposed secrets before committing. + */ + +const fs = require("fs"); +const path = require("path"); +const { execSync } = require("child_process"); + +const ROOT = path.resolve(__dirname, "../.."); +const SENSITIVE_PATTERNS = [ + { name: "Discord Bot Token", regex: /N[A-Za-z0-9_-]{23,28}\\.[A-Za-z0-9_-]{6}\\.[A-Za-z0-9_-]{27,}/ }, + { name: "Groq API Key", regex: /gsk_[A-Za-z0-9]{40,}/ }, + { name: "OpenAI API Key", regex: /sk-(?:proj-)?[A-Za-z0-9_-]{32,}/ }, + { name: "Anthropic API Key", regex: /sk-ant-[A-Za-z0-9_-]{32,}/ } +]; + +const CONFIG_FILES = [ + "Configs/supportbot.yml", + "Configs/supportbot-ai.yml", + "Configs/api.yml" +]; + +let hasViolations = false; + +try { + const stagedFiles = execSync("git diff --cached --name-only", { encoding: "utf8" }) + .split("\\n") + .map((f) => f.trim()) + .filter(Boolean); + + for (const file of stagedFiles) { + if (CONFIG_FILES.includes(file)) { + const fullPath = path.join(ROOT, file); + if (fs.existsSync(fullPath)) { + const content = fs.readFileSync(fullPath, "utf8"); + + for (const pattern of SENSITIVE_PATTERNS) { + if (pattern.regex.test(content)) { + console.error("\\x1b[31m\\x1b[1m[GIT SECURITY ALERT]\\x1b[0m Potential active " + pattern.name + " detected in " + file + "!"); + console.error("\\x1b[33mPlease replace secrets with placeholders before committing.\\x1b[0m\\n"); + hasViolations = true; + } + } + } + } + } +} catch (err) { + // If git command fails, do not block commit +} + +if (hasViolations) { + console.error("\\x1b[31mCommit aborted due to sensitive credentials detected in staged files.\\x1b[0m"); + process.exit(1); +} + +process.exit(0); +`; + +try { + fs.writeFileSync(PRE_COMMIT_HOOK, hookContent, { mode: 0o755 }); + console.log(`${colors.green}✓${colors.reset} Pre-commit hook installed at ${colors.cyan}.git/hooks/pre-commit${colors.reset}`); +} catch (err) { + console.error(`${colors.red}✗ Failed to write pre-commit hook: ${err.message}${colors.reset}`); +} + +console.log(`\n${colors.bold}Recommended local workflow for sensitive configs:${colors.reset}`); +console.log(`${colors.cyan} git update-index --assume-unchanged Configs/supportbot.yml${colors.reset}`); +console.log(`${colors.cyan} git update-index --assume-unchanged Configs/supportbot-ai.yml${colors.reset}`); +console.log(`${colors.cyan} git update-index --assume-unchanged Configs/api.yml${colors.reset}`); +console.log(`\n${colors.green}Security setup completed successfully!${colors.reset}\n`); + From 01f9ebe387bcd8b642eb7f3c4a0063b44aedb507 Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Fri, 28 Aug 2026 17:49:56 +0100 Subject: [PATCH 22/22] removed junk --- Logs/Error/Error-2026-08-28.log | 1 - Logs/Warn/Warn-2026-08-28.log | 1 - scripts/setup-git-security.js | 113 -------------------------------- 3 files changed, 115 deletions(-) delete mode 100644 Logs/Error/Error-2026-08-28.log delete mode 100644 Logs/Warn/Warn-2026-08-28.log delete mode 100644 scripts/setup-git-security.js diff --git a/Logs/Error/Error-2026-08-28.log b/Logs/Error/Error-2026-08-28.log deleted file mode 100644 index 3b9f2c2..0000000 --- a/Logs/Error/Error-2026-08-28.log +++ /dev/null @@ -1 +0,0 @@ -[2026-08-28T16:37:42.883Z] [Database] Error initializing MySQL tables or state: diff --git a/Logs/Warn/Warn-2026-08-28.log b/Logs/Warn/Warn-2026-08-28.log deleted file mode 100644 index 461dd80..0000000 --- a/Logs/Warn/Warn-2026-08-28.log +++ /dev/null @@ -1 +0,0 @@ -[2026-08-28T16:37:42.884Z] [Database] Falling back to SQLite database. diff --git a/scripts/setup-git-security.js b/scripts/setup-git-security.js deleted file mode 100644 index b733e78..0000000 --- a/scripts/setup-git-security.js +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env node -/** - * SupportBot | Emerald Services - * Git Security Setup Script - * - * Sets up Git pre-commit hooks and safeguards to prevent sensitive credentials - * (Discord bot tokens, API keys, database credentials) from being accidentally committed. - */ - -const fs = require("fs"); -const path = require("path"); - -const ROOT_DIR = path.resolve(__dirname, ".."); -const GIT_DIR = path.join(ROOT_DIR, ".git"); -const HOOKS_DIR = path.join(GIT_DIR, "hooks"); -const PRE_COMMIT_HOOK = path.join(HOOKS_DIR, "pre-commit"); - -const colors = { - reset: "\x1b[0m", - green: "\x1b[32m", - yellow: "\x1b[33m", - red: "\x1b[31m", - cyan: "\x1b[36m", - bold: "\x1b[1m", - gray: "\x1b[90m", -}; - -console.log(`\n${colors.bold}${colors.green}SupportBot Git Security Setup${colors.reset}`); -console.log(`${colors.gray}────────────────────────────────────────────────────────${colors.reset}`); - -if (!fs.existsSync(GIT_DIR)) { - console.log(`${colors.yellow}[!] Warning: .git directory not found. Are you in a Git repository?${colors.reset}`); - process.exit(0); -} - -if (!fs.existsSync(HOOKS_DIR)) { - fs.mkdirSync(HOOKS_DIR, { recursive: true }); -} - -// Pre-commit hook script -const hookContent = `#!/usr/bin/env node -/** - * SupportBot Git Pre-Commit Security Hook - * Scans staged configuration files for exposed secrets before committing. - */ - -const fs = require("fs"); -const path = require("path"); -const { execSync } = require("child_process"); - -const ROOT = path.resolve(__dirname, "../.."); -const SENSITIVE_PATTERNS = [ - { name: "Discord Bot Token", regex: /N[A-Za-z0-9_-]{23,28}\\.[A-Za-z0-9_-]{6}\\.[A-Za-z0-9_-]{27,}/ }, - { name: "Groq API Key", regex: /gsk_[A-Za-z0-9]{40,}/ }, - { name: "OpenAI API Key", regex: /sk-(?:proj-)?[A-Za-z0-9_-]{32,}/ }, - { name: "Anthropic API Key", regex: /sk-ant-[A-Za-z0-9_-]{32,}/ } -]; - -const CONFIG_FILES = [ - "Configs/supportbot.yml", - "Configs/supportbot-ai.yml", - "Configs/api.yml" -]; - -let hasViolations = false; - -try { - const stagedFiles = execSync("git diff --cached --name-only", { encoding: "utf8" }) - .split("\\n") - .map((f) => f.trim()) - .filter(Boolean); - - for (const file of stagedFiles) { - if (CONFIG_FILES.includes(file)) { - const fullPath = path.join(ROOT, file); - if (fs.existsSync(fullPath)) { - const content = fs.readFileSync(fullPath, "utf8"); - - for (const pattern of SENSITIVE_PATTERNS) { - if (pattern.regex.test(content)) { - console.error("\\x1b[31m\\x1b[1m[GIT SECURITY ALERT]\\x1b[0m Potential active " + pattern.name + " detected in " + file + "!"); - console.error("\\x1b[33mPlease replace secrets with placeholders before committing.\\x1b[0m\\n"); - hasViolations = true; - } - } - } - } - } -} catch (err) { - // If git command fails, do not block commit -} - -if (hasViolations) { - console.error("\\x1b[31mCommit aborted due to sensitive credentials detected in staged files.\\x1b[0m"); - process.exit(1); -} - -process.exit(0); -`; - -try { - fs.writeFileSync(PRE_COMMIT_HOOK, hookContent, { mode: 0o755 }); - console.log(`${colors.green}✓${colors.reset} Pre-commit hook installed at ${colors.cyan}.git/hooks/pre-commit${colors.reset}`); -} catch (err) { - console.error(`${colors.red}✗ Failed to write pre-commit hook: ${err.message}${colors.reset}`); -} - -console.log(`\n${colors.bold}Recommended local workflow for sensitive configs:${colors.reset}`); -console.log(`${colors.cyan} git update-index --assume-unchanged Configs/supportbot.yml${colors.reset}`); -console.log(`${colors.cyan} git update-index --assume-unchanged Configs/supportbot-ai.yml${colors.reset}`); -console.log(`${colors.cyan} git update-index --assume-unchanged Configs/api.yml${colors.reset}`); -console.log(`\n${colors.green}Security setup completed successfully!${colors.reset}\n`); -

Check API health